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

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


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Раритетный взлом, или Stamp 0.81d forever !

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Автор: faust/STREAM <bulbul@ua.fm>

Цель

Stamp 0.81d

Инструменты

SoftICE
W32Dasm Ver 8.93
Hiew 6.11
PEiD 0.9
LordPE Delux
ProcDump Version 1.6 FINAL
Import REConstructor 1.6 FINAL

Вступление

Наверно читая название данной статьи, каждый из вас задумался...
Зачем ломать Stamp 0.81d когда уже с пол года как Stamp 0.84d коптит просторы интернета? Все просто, именно с версии Stamp 0.81d, и начался так сказать интернет бум на подделку печатей. Как сейчас помню, на форумах типа www.crack.ru , все было заваленно сообщениями: "Нужен кряк к Stamp 0.81d" и.т.д...
На те времена я мог похвастатся только парочкой ResHack`ов, и понятное дело для меня взлом Stamp 0.81d был мечтой. Честно сказать, я думал что лучше защиты нет, потому что тогда еле-еле нашел к ней кряк. Даже попросил Nitrogen`а из TSRh ёе взломать...
Я кстати пользовался хаком от YMY, и бесило меня одно НО, печать на принтер напрочь отказалась работать. Мотивируя это тем что демо-версия. Ну кто ж так ломает? Год спустя, набравшись необходимых знаний, я решил исправить ошибки прошлого...

Начало

Ну что ж, приступим?! Итак я пологаю вы уже скачали архив, и сумели его распаковать в отдельную директорию. Для начала проверим с помощью PEiD запакована ли программа. Ага "UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo". Оговорюсь, что это модифицированный UPX, и автоматически его распаковать невыйдет. Кстати Hex по этому UPX нев*****ый тутор накатал, но там одна порнуха, мы проще распакуем. Приступим к ручной распаковке, тоесть найдем OEP и сдампим прогу. Запускаем LordPE, в нем кликаем на кнопке "Break & Enter" и указываем путь к нашему exe`шнику. Выскочил messagebox, нажимаем Ctrl+D и попадаем в SoftICE, далее печатаем "bpint3" и нажимаем "Enter". Закроем SoftICE (F5) и нажмем "Ок" на том messagebox`е. Опять вваливаемся в SoftICE пишем "eb eip 60" жмём "Enter", потом поставим бряк "bpm esp-4" жмем "Enter" и наконец бацнем по "F5". Опять попали в SoftICE, значит сработал наш бряк. Видим такую хрень:
 0167:015E5D22 POPAD
 0167:015E5D23 JMP 004AF4F0 <--- Мы тут
 
Как видно это прыжок на OEP. Значит наш VA OEP = 004AF4F0 запишите его куда-нибудь.
Итак нужно зацыклить прогу, для этого в SoftICE входим в режим ассемблирования (печатаем "a" жмем "Enter", затем пишем "jmp eip" и два раза кликаем на "Enter").
Снимем бряки "bc *" жмем "Enter" и закрываем SoftICE (F5). Теперь запустим ProcDump, заходим в "Options", и для корректного дампа сделаем небольшую надстройку. В Structure ставим галочки напротив "Recompute Object Size" и "Optimize PE structure". ProcDump мы кстати взяли потому что с помощью LordPE мне не удалось грамотно сдампить прогу (exe`шник после дампа весил почти 18 мег, что я там в настройках только не крутил, толку мало). Ладно сохраняем наши настройки, и в списке задач ищем наш зацикленный процесс, тоесть stamp081.exe Нашли? Теперь правой кнопкой мыши "Dump (Full)", сохраняем результат например как dumped.exe Опять вернемся в ProcDump, и убём наш зацикленный процесс (правая кнопка мыши, "Kill task"). Обязательно проверьте размер сдампиного файла, он не должен превышать 1 мегабайт. Если он у вас занимает около 18 мегабайт, то прочитайте еще разок про настройку ProcDump`а или напишите мне. Закрываем все нафик, запускаем на запакованный stamp081.exe и Import REConstructor. В Import REConstructor выбираем в списке наш процесс, тоесть C:\Program Files\Stamp\stamp081.exe (Ну или какой у вас там путь к оригинальному exe`шнику).
Теперь нам нужно узнать наш RVA OEP (RVA OEP = VA OEP - ImageBase) Запускаем LordPE, выбираем PE Editor, и загружаем через него наш оригинал exe`шника.
Смотрим, ImageBase = 00400000 Помните я вам говорил записать наш OEP? Так вот VA OEP = 004AF4F0 После нехитрой математической задачи (RVA OEP = 4AF4F0 - 400000 тоесть RVA OEP = AF4F0) Скопируем наш RVA OEP, и вернемся в Import REConstructor. Там у нас в окошке OEP = 011E5BC0, поправим на AF4F0 и жмем "IAT AutoSearch". Теперь "Get Imports", напротив всех импортируемых библиотек должно стоять YES. И наконец жмём "Fix Dump", в открывшемся окне выбираем наш dumped.exe Проверим, заходим в папку где лежит файл dumped.exe и ищем там файл dumped_.exe, его и запустим... Работает?! УРЯ!!! И размер 1 мегабайт. Все на этом распаковка окончена, тоесть самое сложное позади. Кстати dumped.exe можно удалить, не перепутайте с dumped_.exe!!!

Как говорится доверяй но проверяй. Проверим наш распакованный файл с помощью PEiD, говорит мол "Borland Delphi 6.0 - 7.0" а значить можно приступать к полноценному патчу (серийник я даже не пробовал искать, охота музон послушать а SoftICE все портит) Грузим это дело в W32Dasm. В нем "Pe Information" и "String Data References" или кнопка слева в меню быстрого запуска около кнопки "Print". Листая кучи непутевых текстовых строк я нашел два за кторые можно зацепится:
- Эта функция не доступна в демо версии!
- Stamp 0.81 Registered Version
Проверим каждую. Сначала два раза кликнем на строке "Stamp 0.81 Registered Version"
Кстати всегда кликайте подряд много раз, чтобы убедится нет ли этого текста под другими адресами. В нашем случае он встречается два раза.
Первый раз мы попадаем сюда:
 * Possible StringData Ref from Data Obj ->"Stamp 0.81 Registered Version"
 |
 :004978B4 BA44794900 mov edx, 00497944
 :004978B9 E81AB5FAFF call 00442DD8
 :004978BE 33D2 xor edx, edx
 :004978C0 8B8304030000 mov eax, dword ptr [ebx+00000304]
 :004978C6 8B08 mov ecx, dword ptr [eax]
 :004978C8 FF5164 call [ecx+64]
 
Но это нас не интересует, ибо если глянуть выше, то сюда мы попадаем при вводе правильного серийника, но когда программа перезапускается то она проверяет зарегеность из другого места, с таким же текстом, так что жмем два раза в "String Data References" на строке "Stamp 0.81 Registered Version" и попадаем на другой адрес:
 * Possible StringData Ref from Data Obj ->"Stamp 0.81 Registered Version"
 |
 :00497B13 BA887B4900 mov edx, 00497B88
 :00497B18 E8BBB2FAFF call 00442DD8
 :00497B1D 33D2 xor edx, edx
 :00497B1F 8B8304030000 mov eax, dword ptr [ebx+00000304]
 :00497B25 8B08 mov ecx, dword ptr [eax]
 :00497B27 FF5164 call [ecx+64]
 
 Глянем чуток выше:
 
 Дофига вырезано...
 :00497ACB 755D jne 00497B2A <--(1)
 :00497ACD A1F02C4B00 mov eax, dword ptr [004B2CF0]
 :00497AD2 8B8000030000 mov eax, dword ptr [eax+00000300]
 :00497AD8 B201 mov dl, 01
 :00497ADA E88196F9FF call 00431160
 :00497ADF A1A81D4B00 mov eax, dword ptr [004B1DA8]
 :00497AE4 8B00 mov eax, dword ptr [eax]
 :00497AE6 B202 mov dl, 02
 :00497AE8 E8E352FCFF call 0045CDD0
 :00497AED A1A81D4B00 mov eax, dword ptr [004B1DA8]
 :00497AF2 8B00 mov eax, dword ptr [eax]
 :00497AF4 8A9028020000 mov dl, byte ptr [eax+00000228]
 :00497AFA 0A157C7B4900 or dl, byte ptr [00497B7C]
 :00497B00 A1A81D4B00 mov eax, dword ptr [004B1DA8]
 :00497B05 8B00 mov eax, dword ptr [eax]
 :00497B07 E89852FCFF call 0045CDA4
 :00497B0C A16C1D4B00 mov eax, dword ptr [004B1D6C]
 :00497B11 8B00 mov eax, dword ptr [eax]
 
Если по адресу 00497ACB подправить переход, то интерфейс программы при запуске будет зареген :) Етим и займемся, потом увидите зачем. Открываем Hiew и меняем в нем jne 00497B2A на je 00497B2A (делаем это так, открываем Hiew, находим наш файл и нажимаем "Enter", после того как откроется какой-то текст жмём еще два раза "Enter", попадаем в дизассемблер, там жмём "F5" и набираем ".00497ACB" коикаем "Enter"). Адрес найден, теперь его нужно подправить нажимаем "F2" сразу-же жмём "F3" и правим как сказанно выше. Все? "Enter" сохраним "F9" и выйдем "F10". Запускаем прогу, как видите никаких сверху написано что Registered Version, заходим в меню регистрации, кнопка "Зарегестрировать" стала неактивной. Но при попытке сохранить печать в файл рисунка или распечатать, выскакивает наг с надписью "Эта функция не доступна в демо версии!".
Опять лезем в "String Data References", и пробиваем этот текст, он встречается тоже два раза. Соответственно один отвечает за сохранение печати как изображения, другой за распечатку печати :) Чтож первым мне попался адрес:
 * Possible StringData Ref from Data Obj ->"Эта функция не доступна в демо-верии!
 "
 ->"Пожалуйста, ознакомтесь с условиями "
 ->"регистрации"
 |
 :004A5875 B8E0584A00 mov eax, 004A58E0
 :004A587A E8196DF9FF call 0043C598
 
 Смотрим выше:
 
 Дохера пропущено...
 :004A57A2 0F85CD000000 jne 004A5875 <--(1)
 :004A57A8 8BC3 mov eax, ebx
 :004A57AA E8693E0000 call 004A9618
 :004A57AF 84C0 test al, al
 :004A57B1 0F85C8000000 jne 004A587F
 :004A57B7 8B83E0040000 mov eax, dword ptr [ebx+000004E0]
 :004A57BD 8B10 mov edx, dword ptr [eax]
 :004A57BF FF523C call [edx+3C]
 :004A57C2 84C0 test al, al
 :004A57C4 0F84B5000000 je 004A587F
 :004A57CA 8D55FC lea edx, dword ptr [ebp-04]
 :004A57CD 8B83E0040000 mov eax, dword ptr [ebx+000004E0]
 :004A57D3 E8D854F9FF call 0043ACB0
 :004A57D8 8B83E0040000 mov eax, dword ptr [ebx+000004E0]
 :004A57DE E82555F9FF call 0043AD08
 :004A57E3 83F802 cmp eax, 00000002
 :004A57E6 7559 jne 004A5841
 :004A57E8 8B55FC mov edx, dword ptr [ebp-04]
 Тоже много вырезал...
 
Значит по адресу 004A57A2 нужно исправить переход, который и ведет нас к подлому нагу по адресу 004A5875 Запускаем Hiew и меняем jne 004A5875 на je 004A5875 как это сделать описано выше. Сохраняем и выходим. Опять запускаем нашу прогу, интерфейс мы еще тогда зарегели :), создаем печать и сохраняем ее как рисунок, никаких нагов, значит все сделано правильно.
Ну и последнее, сделаем так чтобы еще и кнопка "Печать" заработала, аналогично выше описаному, два клика в "String Data References", пока адрес на этом тексте не изменится на другой:
 * Possible StringData Ref from Data Obj ->"Эта функция не доступна в демо-верии!
 "
 ->"Пожалуйста, ознакомтесь с условиями "
 ->"регистрации"
 |
 :004A8A63 B8B88A4A00 mov eax, 004A8AB8
 :004A8A68 E82B3BF9FF call 0043C598
 
 Опять же смотрим выше:
 
 вырезано...
 :004A885C 0F8501020000 jne 004A8A63 <--(1)
 :004A8862 8BC3 mov eax, ebx
 :004A8864 E8AF0D0000 call 004A9618
 :004A8869 84C0 test al, al
 :004A886B 0F85FC010000 jne 004A8A6D
 :004A8871 8B83E8040000 mov eax, dword ptr [ebx+000004E8]
 :004A8877 8B8068010000 mov eax, dword ptr [eax+00000168]
 :004A887D E88EB2F7FF call 00423B10
 :004A8882 8BF8 mov edi, eax
 :004A8884 4F dec edi
 :004A8885 8B83E8040000 mov eax, dword ptr [ebx+000004E8]
 :004A888B 8B8068010000 mov eax, dword ptr [eax+00000168]
 :004A8891 E892B2F7FF call 00423B28
 тоже вырезано...
 
NO COMMENT! Просто в Hiew меняем переход, я думаю уже знаете почему :) ВСЕ! Сохраняем, и запускаем, проверяем РАБОТАЕТ!
Теперь обясню почему мы сначала интерфес зарегели, да просто на момент написания стстьи я прогу уже успел ломануть, и написал вам все в хронологическом порядке! Если Stamp 0.81 Registered Version не править, как мы это сделали впервую очередь, то результат не изменится. Просто будет написано Stamp 0.81 Shareware Version мелочь а приятно :)

Разработчику: Макс (Максим Седых), сделав акцент на паковщике, ты совсем забыл про защиту.

Всем кто прочитал: Ну что ж, опыть штамполомания у нас уже есть, так что обещаю в будущем написать статью по исследованию Stamp`а 0.84

Respect to: Ping0, Jackasm, UnKnOwN, Che, Forscher, Yokel, and Danger!!!

Данная статья опубликована только в учебных целях :) Это вам не план взлома, а баг лист!

Комментарий:
От 03.01.2004 как я и обещал, взломал версию 0.84.
Защита абсолютно аналогична версии 0.81, распаковка тоже аналогична.
Проблема в том что на сайте www.stampz.ru лежит недописанная демка версии 0.84, и ее взломать невозможно.
Полную версию я нашел на сайте www.kpnemo.ru но она уже варезная. Тоесть в комплекте кейген, и распакованный ехешник. Опять же взлом аналогичен версии 0.81 только с другими адресами. Писать тутор о взломе варезного я несобираюсь. Если кто найдет полную версию 0.84, еще не тронутую нашими крэкерами, то пишите мне, и я накатаю туторец!

Автор: bulbul@ua.fm

Обсуждение статьи: Раритетный взлом, или Stamp 0.81d forever ! >>>


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



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


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