В этой статье будет описано исследование защиты и создание лоадера для
Acunetix Web Scanner 4 build 20060809.
Я буду использовать:
1. Peid http://cracklab.ru/download.php?action=get&n=NTYw
2. IDA http://cracklab.ru/download.php?action=get&n=MjE1
3. OllyDBG http://cracklab.ru/download.php?action=get&n=MzYw
4. Yoda's Process Patcher http://wasm.ru/baixado.php?mode=tool&id=41
И так, в самом начале открываем wvs.exe в Peid и видим, что он ничем не запакован. Отлично! Можно сразу загнать wvs.exe в IDA. Подождем пока он закончит свою работу… Теперь можно приступать к анализу.
1. Для разогрева уберем надписи EVALUATION edition.
В IDA щелкаем по Strings Window, потом меню->Search->Search… и ищем строчку
EVALUATION. Находим
<Status>Evaluation</Status>, щелкаем по этой строчке и видим:
CODE:007CBEC4 aStatusEvaluati db 9,' <Status>Evaluation</Status>',0
CODE:007CBEC4 ; DATA XREF: sub_7CB32C+292 o
Теперь щелкаем по CODE:007CB5BE и переходим сюда:
CODE:007CB5B1 mov edx, [ebp-1E0h]
CODE:007CB5B7 mov eax, ebx
CODE:007CB5B9 call sub_4CA40C
CODE:007CB5BE mov edx, offset aStatusEvaluati ; "\t <Status>Evaluation</Status>"
CODE:007CB5C3 lea eax, [ebp-1CCh]
CODE:007CB5C9 call sub_405654
CODE:007CB5CE call sub_403A70
А выше видим:
CODE:007CB578 mov eax, [eax]
CODE:007CB57A sub eax, 1
CODE:007CB57D jb loc_7CB65A
CODE:007CB583
jz short loc_7CB5F7 /CONSULTANT/
CODE:007CB585 dec eax
CODE:007CB586 jz short loc_7CB594 /EVALUATION/
CODE:007CB588 dec eax
CODE:007CB589 jz loc_7CB6E0
CODE:007CB58F jmp loc_7CB714
Запускаем OllyDBG, открываем wvs.exe и переходим на 007CB583.
И изменяем CODE:007CB583
jz short loc_7CB5F7
На CODE:007CB583
jmp short loc_7CB5F7
Теперь внешне программа выглядит как Consultant Edition, кроме надписи при старте приложения.
2. Уберем счетчик дней.
Ищем строчку
Your license period has expired и
The evaluation period has expired
Находим:
CODE:007D61A3 cmp dword ptr [eax], 0
CODE:007D61A6
jnz short loc_7D6221
CODE:007D61A8 mov eax, ds

ff_83DB0C
CODE:007D61AD cmp byte ptr [eax], 0
CODE:007D61B0 jz short loc_7D6221
CODE:007D61B2 mov eax, ds

ff_83D854
CODE:007D61B7 push dword ptr [eax+4]
CODE:007D61BA push dword ptr [eax]
CODE:007D61BC push dword ptr ds:dbl_843728+4
CODE:007D61C2 push dword ptr ds:dbl_843728
CODE:007D61C8 call sub_5EC1B4
CODE:007D61CD test al, al
CODE:007D61CF jg short loc_7D6221
CODE:007D61D1 mov eax, ds

ff_83D0D4
CODE:007D61D6 cmp byte ptr [eax], 0
CODE:007D61D9 jnz short loc_7D61F2
CODE:007D61DB push 0
CODE:007D61DD mov cx, word_7D62B0
CODE:007D61E4 xor edx, edx
CODE:007D61E6 mov eax, offset aYourLicensePer ; "Your license period has expired.\r\nYou n"...
CODE:007D61EB call sub_487FB0
CODE:007D61F0 jmp short loc_7D6214
CODE:007D61F2 ; ---------------------------------------------------------------------------
CODE:007D61F2
CODE:007D61F2 loc_7D61F2: ; CODE XREF: sub_7D5F24+2B5j
CODE:007D61F2 push offset aYourLicensePer ; "Your license period has expired.\r\nYou n"...
CODE:007D61F7 push 1
Меняем
jnz short loc_7D6221
на
jmp short loc_7D6221
CODE:007D6226 cmp dword ptr [eax], 1
CODE:007D6229
jnz short loc_7D628A
CODE:007D622B mov eax, ds

ff_83DB48
CODE:007D6230 mov eax, [eax]
CODE:007D6232 mov edx, ds

ff_83D0B8
CODE:007D6238 cmp eax, [edx]
CODE:007D623A jl short loc_7D628A
CODE:007D623C mov eax, ds

ff_83D0D4
CODE:007D6241 cmp byte ptr [eax], 0
CODE:007D6244 jnz short loc_7D625D
CODE:007D6246 push 0
CODE:007D6248 mov cx, word_7D62B0
CODE:007D624F xor edx, edx
CODE:007D6251 mov eax, offset aTheEvaluationP ; "The evaluation period has expired.\r\nYou"...
CODE:007D6256 call sub_487FB0
CODE:007D625B jmp short loc_7D627F
CODE:007D625D ; ---------------------------------------------------------------------------
CODE:007D625D
CODE:007D625D loc_7D625D: ; CODE XREF: sub_7D5F24+320j
CODE:007D625D push offset aTheEvaluationP ; "The evaluation period has expired.\r\nYou"...
CODE:007D6262 push 1
И
jnz short loc_7D628A
на
jmp short loc_7D628A
Этим действием мы перепрыгиваем через сообщение об окончание времени использования триальной версии и теперь даже если количество дней уйдет в минус, программа будет работать дальше.
3. Разблокировка ограничения сканирования сайтов.
Ищем строчку
(unable to resolve).
Находим:
CODE:005E7822 cmp byte ptr [ebx+42BCh], 0
CODE:005E7829 jz short loc_5E783F
CODE:005E782B test esi, esi
CODE:005E782D jnz short loc_5E783F
CODE:005E782F lea eax, [ebx+42C0h]
CODE:005E7835 mov edx, offset aUnableToResolv ; "(unable to resolve)"
CODE:005E783A call sub_404FBC
А выше:
CODE:005E77F3 test esi, esi
CODE:005E77F5 jz short loc_5E781B
CODE:005E77F7 mov eax, esi
CODE:005E77F9
xor eax, 50EDC6ECh
CODE:005E77FE
jz short loc_5E781B
CODE:005E7800 mov eax, esi
CODE:005E7802 xor eax, 50EDC6EDh
CODE:005E7807 jz short loc_5E781B
CODE:005E7809 mov eax, esi
CODE:005E780B xor eax, 50EDC6EDh
CODE:005E7810 jz short loc_5E781B
CODE:005E7812 mov byte ptr [ebx+42BCh], 1
CODE:005E7819 jmp short loc_5E7822
И меняем CODE:005E77F9 xor eax,
50EDC6ECh
CODE:005E77FE
jz short loc_5E781B
На CODE:005E77F9 xor eax,
eax
CODE:005E77FE
jmp short loc_5E781B
Дальше ищем
LE_CHECK
Находим:
CODE:0068B3B0 call sub_5CD2B8
CODE:0068B3B5 push [ebp+var_18]
CODE:0068B3B8 push offset aCgiBinLe_check ; "/cgi-bin/le_check_v3.exe"
CODE:0068B3BD lea eax, [ebp+var_10]
CODE:0068B3C0 mov edx, 4
CODE:0068B3C5 call sub_4052F8
CODE:0068B3CA mov edx, [ebp+var_10]
CODE:0068B3CD mov eax, [ebx+0C4h]
CODE:0068B3D3 call sub_5ED2B8
CODE:0068B3D8 mov dl, 2
CODE:0068B3DA mov eax, [ebx+0C4h]
CODE:0068B3E0 call sub_5ED798
CODE:0068B3E5 mov eax, [ebx+0C4h]
CODE:0068B3EB mov eax, [eax+18h]
CODE:0068B3EE mov ecx, [ebx+0BCh]
CODE:0068B3F4 mov edx, offset aLe_check ; "LE_CHECK"
CODE:0068B3F9
call sub_5E9E0C
CODE:0068B3FE mov eax, [ebx+0C4h]
CODE:0068B404 mov [eax+44h], ebx
CODE:0068B407 mov dword ptr [eax+40h], offset sub_695758
CODE:0068B40E call sub_5ED518
CODE:0068B413 jmp loc_68B8AA
И чтобы перескочить проверку, меняем
CODE:0068B3F9
call sub_5E9E0C
На CODE:0068B3F9
JMP SHORT 0068B418
Теперь мы можем сканировать любые сайты, но только из текстового файла. Но так как это не всегда удобно каждый раз записывать сайт в текстовый файл, чтобы просканировать его. Поэтому, мы разблокируем ввод сайта в программе.
4. Разблокировка ComboBox.
Ищем строку
Scan Wizard
CODE:007C06C7 call sub_6191C8
CODE:007C06CC
mov dl, 2 / Заблокированный ComboBox/
CODE:007C06CE call sub_618A10
CODE:007C06D3 xor edx, edx
CODE:007C06D5 mov eax, [ebx+34Ch]
CODE:007C06DB call sub_619234
CODE:007C06E0 mov eax, [ebx+3BCh]
CODE:007C06E6 call sub_6191C8
CODE:007C06EB call sub_6189F8
CODE:007C06F0 mov edx, [eax]
CODE:007C06F2 call dword ptr [edx+44h]
CODE:007C06F5 mov eax, [ebx+3BCh]
CODE:007C06FB call sub_6191C8
CODE:007C0700 call sub_6189F8
CODE:007C0705 mov edx, eax
CODE:007C0707 mov eax, offset aScanWizardFile ; "\\Scan Wizard\\File History"
CODE:007C070C call sub_6E951C
Чтобы разблокировать ввод адреса нужно изменить
CODE:007C06CC mov dl,
2
На CODE:007C06CC mov dl,
1
Этим действием мы разблокировали ввод адреса в Scan Wizard, но остался еще один в Web Scanner.
Ищем
Data\\Profiles\\VulnXML\\CrawlerAlerts.xml
CODE:007FCC84 call sub_6191C8
CODE:007FCC89
mov dl, 2
CODE:007FCC8B call sub_618A10
CODE:007FCC90 mov eax, [ebp-4]
CODE:007FCC93 mov eax, [eax+29Ch]
CODE:007FCC99 xor edx, edx
CODE:007FCC9B call sub_619234
CODE:007FCCA0 mov eax, ds

ff_83D608
CODE:007FCCA5 call sub_407024
CODE:007FCCAA xor eax, eax
CODE:007FCCAC push ebp
CODE:007FCCAD push offset loc_7FCCFA
CODE:007FCCB2 push dword ptr fs:[eax]
CODE:007FCCB5 mov fs:[eax], esp
CODE:007FCCB8 mov edx, ds

ff_83D17C
CODE:007FCCBE mov edx, [edx]
CODE:007FCCC0 lea eax, [ebp-18h]
CODE:007FCCC3 mov ecx, offset aDataProfiles_7 ; "Data\\Profiles\\VulnXML\\CrawlerAlerts.xml".. .
CODE:007FCCC8 call sub_405284
И опять изменяем CODE:007FCC89 mov dl,
2
На CODE:007FCC89 mov dl,
1
Почти все, до полой версии осталось разблокировать Обновление и Сохранение отчетов. Но я думаю вам стоит попробовать сделать это самим, для закрепления материала.
Теперь сохраняем все изменения в OllyDBG в файл. Если кто не знает: Правая кнопка мыши->Copy to Executable->All modifications и Save file. Теперь вроде все, но в этой версии еще добавили проверку целостности файла, поэтому сейчас мы сделаем лоадер, который будет делать изменения в памяти, а не в файле. А раз файл не изменяется, то и программа думает, что все хорошо.
Запускаем Yoda's Process Patcher и нажимаем compare files, выбираем оригинальный и только что модифицированный нами файл. Сравниваем их, в Filename пишем wvs.exe(имя файла, который будет модифицирован при запуске лоадера) и, нажав кнопку make Loader, делаем лоадер.
Вот мы и исследовали защиту новой версии Acunetix Web Scanner.