В этой статье будет описано исследование защиты и создание лоадера для 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, dsff_83DB0C CODE:007D61AD cmp byte ptr [eax], 0 CODE:007D61B0 jz short loc_7D6221 CODE:007D61B2 mov eax, dsff_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, dsff_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, dsff_83DB48 CODE:007D6230 mov eax, [eax] CODE:007D6232 mov edx, dsff_83D0B8 CODE:007D6238 cmp eax, [edx] CODE:007D623A jl short loc_7D628A CODE:007D623C mov eax, dsff_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, dsff_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, dsff_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.
снимаем защиту от изменения wvs.exe (правим сразу файл на диске): Virtual addr: 004501B0 File offset: 0004F5B0 оригинальный вид: 55 push ebp заменяем на: C3 retn .. все, терь экзешник никогда не заругается на модификацию кода. все, никаких лоадеров етц, пишем статический патч.
>>от мы и исследовали защиту новой версии Acunetix Web Scanner. только уто4ню, 4то далеко не новой, а 4астный слу4ай (Consultant Edition), так как обы4ный релиз О4ЕНЬ отли4ен от сабжа (особенно тут call sub_5E9E0C). НО в любом слу4ае, Go0o$E, респект за тутор и дерЖи +
ну дык я ж писал, топикстартер исследовал лишь 4асти4ный слу4ай (консультант эдишн, в котором даж нагов нету), а в полном релизе защита на порядок сложнее
>>лучше кейген делать лу4ше - да проЩЕ - нет (особенно у4итывая объем кода модуля проверка клю4ей в либе)
>>лучше кейген делать > лу4ше - да > проЩЕ - нет (особенно у4итывая объем кода модуля проверка клю4ей в либе) понятно, что это намного сложнее чем делать патчи (которые нестабильны или вообще не работают). Но Acunetix того стоит. Допустим, есть реальный 7 day evaluation license key, содержит 38 знаков. Истекший правда, действовал с 02 Oct 2006 - 08 Oct 2006. Есть полная версия Enterprise на 1 website. Не так много данных для иследования ключей, но все же кое-что реальное.
>>которые то работают, то нет так же и про кейгены можно сказать >>допустим, есть реальный 7 day evaluation license key, содержит 38 знаков. Истекший правда, действовал с 02 Oct 2006 - 08 Oct 2006. Есть полная версия Enterprise на 1 website. Не так много данных для иследования ключей, но все же кое-что реальное. а вот имея хоть какие-то (даже истекшие) клю4и кейненнинг можно было бы намного ускорить... мне бы их в свое время...
>>которые то работают, то нет > так же и про кейгены можно сказать если найти алгоритм, то будут генерить правильные ключи, к тому же кейгены не нарушают исходного кода. сейчас интерес к Acunetix есть?
>>если найти алгоритм, то будут генерить правильные ключи если найти алгоритм...это уже из области теории вероятности >>к тому же кейгены не нарушают исходного кода. а пат4и нарушают исходный функционалный код? они, как правило, просто меняют логику выполнения модуля проверки и аргументы твои тут неуметсны, в 99% слу4аев кейгеннинг занимает гораздо больше времени пропат4ивания или нахождения верного клю4а (несмотря на то, 4то этот метод более универсален, эстети4ен и удобен)
>>к тому же кейгены не нарушают исходного кода. >а пат4и нарушают исходный функционалный код? >они, как правило, просто меняют логику выполнения модуля проверки не надо ничего нарушать в логике программы, тем более в сложной. отсюда всякие баги и прочее. Да, поиск ключа времени занимает гораздо больше. Ломать напрямую проще, конечно. но отсюда и качество соответствующее. К примеру, SSG team создает кейгены, которые работают хорошо..
silver, а 4асто видишь кейгены от видных команд, которые работают плохо? хватит флеймить - тема закрыта