![]() |
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс |
Новичку | Ссылки | Программирование | Интервью | Архив | Связь |
Исследование BadCopy Pro 3.70Обсудить статью на форумеМассу крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь. Данный метод работоспособен только на Win2k или WinXP Автор: X0E-2003 <nexus-2002@yandex.ru> Инструменты: SoftICE with Driver Studio v2.5.0(Build 240),
SuperBPM for NT, IceExt, Ida v4.x, Hiew, Import REconstructor v1.4.2+, бумага и ручка, немного мозгов. Проблема:
В этой статье немного подробнее расскажу, как распаковать ASprotect 1.2x [New Stain] и ломануть прогу.
Поехали:
Для начала загружаем IceExt, в командной строке пишем: net start iceext в айсе поставим bpint 03, в Lord PE нажмем на Break & Enter укажем на прогу, затем в айсе EB EIP 68 и запишем значение:ESP=12FFC4 (у вас может быть другим), далее BC* и вводим такую команду:
bpx GetProcAddress if (*(*(esp+8))==61647055) айс сразу прервется по адресу: 11B32AC пройдем по F10 до такой инструкции: Mov [edx],eax В айсе делаем dd esp и видим адрес IAT запишем его, а то Import REconstructor не всегда правильно его определяет далее делаем !suspend и входим в SuperBPM не закрывая ДОС-окна в айсе вводим !resume почему так? Т.к прога проверяет, запушен SuperBPM или нет, если да то она не запускается. Далее вводим в айсе BPMB 12FFC4-24 RW (12FFC4 то значение, которое мы записывали в начале). И останавливаемся на такой инструкции: pop ebp, опять запишем значение ESP = 12FFA0 оно нам пригодится. Вот теперь самое время снять дамп !suspend в Lord PE (Full dump нашей проге) и опять !resume, далее проходим весь полиморфиг аспа по F8 до: POPA RET В дельфи он занимает около 1400h байт поэтому переписывать его бесполезно,но мы то знаем, что в Дельфи начало не такое и большое по сравнению с VC++ Затем доходим до такой инструкции: JMP [00B79278] Нажимаем F10 и попадаем сюда: Push ebp <-- мы тут (запишем значение EBX = 4FE154) Mov ebp,esp Посмотрим на значение ESP = 12FF90 (вспомним значение ESP, которое было перед полиморфигом ESP = 12FFA0) 12FFA0-12FF90 = 10h значить стэк сдвинулся на 10 байт Т.к прога написана на Дельфи, то у них почти у всех EP будет таким: Push ebp Pop ebp – т.к один байт лишний, я заменил так, вы можете поставить nop Mov ebp,esp Sub esp,10 – вот тут пишем 10 т.к стэк сдвинулся на 10 байт, помните Mov eax, 4FE154 – вспомните значение EBX’а Берем Hiew и восстановим все краденные байты по адресу FE49B Импорт: Грузим Import REconstructor v1.4.2+ Вводим ОЕР = FE49B, потом на IAT Auto Search RVA = 77917C Size = 778 Жмем на Get Import потом Show invalid - -> Trace Level 1 (Disasm), видим что осталось несколько неопределённых адресов (PlugIn Asprotect 1.2x Imul) не всегда определяет их, но в данном случае определил практически все, кроме одного посмотрим на него 11B1590: push ebp mov eax,[xxxxxxxx] – по адресу xxxxxxxx командная строка, но эта функция не может быть GetCommandlineA, ЭТО чистой воды FreeResource (просто асп хочет запутать нас). pop ebp ret Поправив это недоразумение, делаем Fix Dump укажем на наш дамп и запускаем его, РАБОТАЕТ, но не спешите радоваться после закрытия проги мы видим, что выскакивает какая то ошибка по адресу xxxxxxxx В чем же дело? Ну, это просто, берем Ida, dissas’мим наш дампнутый файл и ищем Api функцию ExitProcess, да она нашлась в одном месте по адресу 004049A6. В айсе видно, что при выполнении call’a по адресу: 00404945 прога выдает ошибку. Поэтому заменим этот call на: Xor eax,eax Nop Nop Nop Все прога пашет. Но у нас имеется еще одно ограничение, она восстанавливает информацию с диска или дискеты в зашифрованном виде и не расшифровывает их, а выводит такой наг BadCopy Evaluation Version Limitation; Sorry you are using an evaluation vers… и т.д. Попробуем избавится от этого недоразумения, по ставим bpx на Showwindow, BC* в айсе и жмем F12 пока не окажимся тут: :0046E274 55 push ebp -- BPX на этот адрес :0046E275 8BEC mov ebp, esp :0046E277 83C4E0 add esp, FFFFFFE0 :0046E27A 53 push ebx :0046E27B 56 push esi ……… много пропущено :0046E384 E83BFEFFFF call 0046E1C4 :0046E389 33D2 xor edx, edx -- мы тут :0046E38B 55 push ebp
BPX 0046E274 и нажимаем next в BadCopy, сработал бряк, в айсе смотрим на стэк dd esp и видим: 004EF258 пишем U 4EF258 и видим такой участок:
:004EF21C 55 push ebp :004EF21D 8BEC mov ebp, esp :004EF21F 8B0DA03E5000 mov ecx, dword ptr [00503EA0] :004EF225 8B09 mov ecx, dword ptr [ecx] :004EF227 B201 mov dl, 01 * Possible StringData Ref from Code Obj ->"{E" :004EF229 A13CAB4E00 mov eax, dword ptr [004EAB3C] :004EF22E E851ADF7FF call 00469F84 :004EF233 8B15F0405000 mov edx, dword ptr [005040F0] :004EF239 8902 mov dword ptr [edx], eax :004EF23B 33C0 xor eax, eax :004EF23D 55 push ebp :004EF23E 6872F24E00 push 004EF272 :004EF243 64FF30 push dword ptr fs:[eax] :004EF246 648920 mov dword ptr fs:[eax], esp :004EF249 A1F0405000 mov eax, dword ptr [005040F0] :004EF24E 8B00 mov eax, dword ptr [eax] :004EF250 8B10 mov edx, dword ptr [eax] :004EF252 FF92E8000000 call dword ptr [edx+000000E8] :004EF258 33C0 xor eax, eax – адрес в стэк’е :004EF25A 5A pop edx далее бряк на 004EF21C делаем аналогичные действия, пока не окажемся тут: * Possible StringData Ref from Code Obj ->"SaveFile" :004ED59C BA3CDC4E00 mov edx, 004EDC3C :004ED5A1 E8B678F1FF call 00404E5C :004ED5A6 0F857D010000 jne 004ED729 – не прыгаем и выдаём наг :004ED5AC A1243D5000 mov eax, dword ptr [00503D24] :004ED5B1 803800 cmp byte ptr [eax], 00 :004ED5B4 EB0D jmp 004ED5C3 - мы тут ….. немного пропущено :004ED60C 9E sahf :004ED60D 7223 jb 004ED632 :004ED60F 8B15E03F5000 mov edx, dword ptr [00503FE0] :004ED615 8B12 mov edx, dword ptr [edx] * Possible StringData Ref from Code Obj ->"ID=" :004ED617 B854DC4E00 mov eax, 004EDC54 :004ED61C E8337AF1FF call 00405054 :004ED621 85C0 test eax, eax :004ED623 740D jne 004ED632 -- не прыгаем и выдаём наг :004ED625 8B45FC mov eax, dword ptr [ebp-04] :004ED625 8B45FC mov eax, dword ptr [ebp-04] :004ED628 E8EF1B0000 call 004EF21C :004ED62D E9A0050000 jmp 004EDBD2
Далее меняем по адресу 004ED5A6 jne 004ED729 на JMP; и адрес 004ED623 jne 004ED632 на JMP.
---Ну, вот и все попробуем восстановить данные с дискетки… ДА востанавливает и расшифровывает все как надо!!! Я тут не совершал никаких, преступных действий, а лишь хотел указать специалистам на их существующую, уязвимость!. Комментарии к статье: Исследование BadCopy Pro 3.70 madsmoker82 12.10.2005 08:16:32 Статья хороша для меня как для новичка. А по поводу уязвимостей, то мне не понятно, почему в незарег. версии точно так же создается дамп восстанавливаемого файла как и в зарегистрированной, правда если после попытки восстановления зайти в папку временных файлов BadCopy, то мы увидим там наш дамп. Его можно скопировать в другое место, потом правда придется потратить время на составление таблицы соответствия байтов (типа: 00=A7,01=A8,02=A9 etc.). Написав небольшую прожку для обратной замены байтиков можно в конце концов получить восстановленный файл в нормальном виде. И это при незарег. версии. :) --- Материалы находятся на сайте https://exelab.ru ![]() |
Вы находитесь на EXELAB.rU |
![]() |