Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | 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
 

……..немного пропущено Call GetModuleHandleA Далее выходим из СAll’ов по F12 и попадаем сюда: 00 00 -- offset: 4FE49B-400000= FE49B (наш OEP) 00 00 00 00 -- то место где должны быть краденные байты 00 00 call xxxxxxx --- Мы тут ………


Посмотрим на значение 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 >>>


Комментарии к статье: Исследование BadCopy Pro 3.70

madsmoker82 12.10.2005 08:16:32
Статья хороша для меня как для новичка. А по поводу уязвимостей, то мне не понятно, почему в незарег. версии точно так же создается дамп восстанавливаемого файла как и в зарегистрированной, правда если после попытки восстановления зайти в папку временных файлов BadCopy, то мы увидим там наш дамп. Его можно скопировать в другое место, потом правда придется потратить время на составление таблицы соответствия байтов (типа: 00=A7,01=A8,02=A9 etc.). Написав небольшую прожку для обратной замены байтиков можно в конце концов получить восстановленный файл в нормальном виде. И это при незарег. версии. :)
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS