/\ /\ / \_ _/ \ ____/ /__ T E A M . F I F T Y . T H R E E __\ \____ \__ ____\\- ____ -//____ __/ / /_____ ______\ \__________\ \ _/ /_\ \_________________________-// // ____/ /_\ \_ __\ _\ ____ /___ _ \_ \/ // ___\/_ /__ ))______________\_ _______\_|__ /____\/_____\ /gf _/______________(( \___\\- /___//- /____((- TEAM FiFTY THREE TUTORiALS PACK # SEVENTEEN ::Примитивная защита APIS32 v 2.5:: Автор: Бойков Александр aka vtAlex Инструменты: W32DASM, UN-PACK, PROCDUMP32 Вторая моя статья по взлому программ посвящена программе APIS32 v 2.5. Это очень полезная прога, при помощи которой можно проследить все вызовы внешних функций. Единственный её недостаток - она требует регистрации :). Хотя работает и без регистрации, желательно расширить её возможности. Начнём осмотр как всегда с интерфейса. Программа сразу выводит сообщение о том, что она незарегистрирована. Можно начать уже с этого. Но мы, как и в первый раз пойдём дальше. Жмём регистрация, вводим любые значения и получаем "The registration information is incorrect...". Запускаем W32DASM. Дизассемблирование проходит успешно, но нет ни одной внешней функции, ни строки...О чём это говорит? Правильно, программа запакована. С UN-PACK проверяем чем. Оказывается PELite 1.2, но PROCDUMP32 не может распаковать этим депакером. Ставим *Unknown* и получаем распакованный APIS32.EXE. Снова дизассемблируем и ищем нужную строку. Получаем два адреса. По очереди ставим на них брейк.Находим место на котором прога останавливается. Видим такую картину: :004018A9 FF15B4904000 Call dword ptr [004090B4] :004018AF E88C370000 call 00405040 :004018B4 A34CC34000 mov dword ptr [0040C34C], eax :004018B9 EB01 jmp 004018BC :004018BB B8 BYTE B8 * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004018B9(U) | :004018BC 0AC0 or al, al :004018BE 7402 je 004018C2 :004018C0 EB2C jmp 004018EE * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004018BE(C) | * Possible StringData Ref from Data Obj ->"The registration information you " ->"provided is incorrect. Please" | :004018C2 BFFCA04000 mov edi, 0040A0FC :004018C7 BA80C74000 mov edx, 0040C780 :004018CC 83C9FF or ecx, FFFFFFFF :004018CF 33C0 xor eax, eax :004018D1 F2 repnz :004018D2 AE scasb :004018D3 F7D1 not ecx :004018D5 2BF9 sub edi, ecx :004018D7 8BF7 mov esi, edi :004018D9 8BC1 mov eax, ecx :004018DB 8BFA mov edi, edx :004018DD C1E902 shr ecx, 02 :004018E0 F3 repz :004018E1 A5 movsd :004018E2 8BC8 mov ecx, eax :004018E4 83E103 and ecx, 00000003 :004018E7 F3 repz :004018E8 A4 movsb :004018E9 E9B1000000 jmp 0040199F * Referenced by a (U)nconditional or (C)onditional Jump at Address: |:004018C0(U) | * Possible StringData Ref from Data Obj ->"Registered to " | :004018EE BF4CA04000 mov edi, 0040A04C :004018F3 BA80C74000 mov edx, 0040C780 :004018F8 83C9FF or ecx, FFFFFFFF Отлично видно, что je в данном случае переходит либо на 004018C2, либо на 004018EE. Это можно проверить патчем на jne. Идём дальше, последний CAll пере водит нас на блок, в конце которого видим xor eax, eax. Это говорит о том, что программа решила, что логин и пароль не подходят и теперь надо обнулить eax. Заставим её думать, что она должно не обнулить, а наоборот выставить al = 1... Итак, патчим mov al, 1. Убираем брейк и наблюдаем, что прога зарегилась, но неизвестно на кого. Конечно, я мог бы описать как сделать так, чтобы надпись была REGISTERED TO %USER%, но думаю будет полезнее, если вы сами попробуете мделать это. Как видите, взлом аналогичен взлому проги Game Maker, что говорит о том, что авторы не особо беспокоились о защите своих творений, благодаря чему теперь любой, обладающий серым веществом ломает прогу за несколько минут. Бойков Александр aka vtAlex vtAlexWork@mail.ru.