Новичку полезно

  • Баннер
  • А знаете ли вы что?

    - rudvs согреет в непогоду


IDA Demo 4.8 patching

Теги: IDA, OllyDbg, PEiD, W32dsm, AspackDie, Патч
Цель         - IDA Demo 4.8
Сложность - 1/10
Инструменты - OllyDbg, PEiD, AspackDie, W32dsm
Метод взлома - Патч

Введение...

Привет всем!!! По некоторым причинам мне надо было покопаться в одной проге и очень
понадобилась Ида. Запустил и... пробный период закончился!

Вот проблема:
Кликнем по EXE, а он нам мессаж (Целых два) типа "Sorry, this is DEMO!!!", и выходит в
окошки :(

Начнем...

Пихаем екзешник в PEiD, а он нам выдал Аспа 2.12, лично я распаковал с помощью
AspackDie... Затем в Олю, а тут у меня не стандартное начало (я
не знаю почему так произошло, но думаю это потому что прога не до конца распоковалась.
Так что распаковывайте вручную!!!)).
Начинаем трейсить по F8 пока не вылетит NAG`лое окно, останавливаемся на 005C7EE8 и
секунды через 2 вылетает сообщение
******************************************************************************************
005C7EE2 |. E8 0B740000 CALL
005C7EE7 |. 50 PUSH EAX
005C7EE8 |. FF56 18 CALL DWORD PTR DS:[ESI+18] ; МЫ ТУТ!!!
******************************************************************************************
У меня может код и адреса отличаться от ваших, но принцип я думаю понятен...
Ставим бряк по адресу 005C7EE8 (Выделяем эту строку и давим F2) затем Ctrl+F2
для рестарта проги. Жмем "play" или F9. Тормозим на бряке
(для того они и нужны) и заходим в процедуру (F7) и трейсим по F8 пока сообщение
опять не вылетит...
******************************************************************************************
00401F85 . 8B81 B8040000 MOV EAX,DWORD PTR DS:[ECX+4B8] ; Неинтересно...
00401F8B . E8 5C0B1600 CALL unpacked.00562AEC ; Неинтересно...
00401F90 . E8 CB430300 CALL unpacked.00436360 ; А вот тут мы и тормознули
******************************************************************************************
Снова ставим бряк на 00401F90 затем Ctrl+F2 -> F9 -> Тормозим на бряке, заходим в
процедуру и трейсим по F8 пока сообщение опять не вылетит...
******************************************************************************************
00436548 |> B8 01000000 MOV EAX,1
0043654D |> E8 264F0300 CALL unpacked.0046B478 ; 00436552 |. 6A 00 PUSH 0 ; /Arg1 = 00000000
00436554 |. E8 5F281900 CALL unpacked.005C8DB8 ; \unpacked.005C8DB8
00436559 |. 59 POP ECX
0043655A |. 3D F0EBDF43 CMP EAX,43DFEBF0
0043655F 7C 3B JL SHORT unpacked.0043659C
00436561 |. 68 71005E00 PUSH unpacked.005E0071 ; /Arg1 = 005E0071 ASCII
Sorry,
00436566 |. E8 E508FDFF CALL unpacked.00406E50 ; \unpacked.00406E50
******************************************************************************************
Тормозим на 0043654D. Вас не смущает команда MOV EAX,1? Перед процедурой вывода сообщения
в EAX помещается 1, а что случиться, если там будет ноль? Выделяем строку 00436548, давим
ПРОБЕЛ, все стираем и пишем "xor eax,eax" без кавычек. Эта команда обнулит значение в eax.
Снова выделяем строку 00436548. Правый клик и "New origin here" (По любому должны знать
что это такое). Проходим 0043654D по F8 и... ура... сообщения нет!!! Но по адресу 00436566
выскакивает еще один мессаж. Посмотрим выше... Какое чудо может случиться чтобы
перепрыгнуть этот CALL... Смотри на 0043655A. Это сравнение содержимого EAX с 43DFEBF0.
Если в EAX другое число то прыжок на 0043659C не осуществится и выскочит "Sorry, this is
DEMO!!!" Так что просто выделяем 0043655F, жмакаем ПРОБЕЛ для изменение кода и вместо
JL пишем JMP (Учите асму). Тыкаем в любом месте кода правой кнопкой крысы, далее Copy to
executable -> All modifications, Copy all, вылезет новое окно, правой кнопкой, Save file,
и сохроняем новый екзешник, например new.exe Вот и все, прога запускается и работает без
проблем... ну почти без проблем. Во время работы выскакивает сообщение "The demonstration
version has expired". Запихнем new.exe в W32dsm и поищем в refs -> String data слово
"Warning" (учитывая регистр), давим два раза и попадаем сюда:
******************************************************************************************
* Possible StringData Ref from Data Obj ->"Warning"
|
:0041A383 B827AA5D00 mov eax, 005DAA27
******************************************************************************************
Посмотрим, откуда вызывается эта процедура. Как? Нам подскажет надпись выше:
******************************************************************************************
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A33A(U)
|
******************************************************************************************
Найдем эту строку...
******************************************************************************************
:0041A331 7409 je 0041A33C
:0041A333 C745C803000000 mov [ebp-38], 00000003
:0041A33A EB36 jmp 0041A372 ; А вот наш джамп
******************************************************************************************
Но бряк на него ставить бесполезно т.к. тут все запутанно и прога не попадет на эту
строчку из-за джампа на 0041A331. Вывод: ставим бряк на 0041A331.
В Olly открываем new.exe и в commandBar`е пишем bp 0041A331 и давим F9 для
запуска проги. Открывается Ида... Нам надо сделать так, чтобы выскочило сообщение. Для
этого откроем любой файл в Иде... Опа! Бряк сработал! Ищем начала процедуры...
Она начинается так:
******************************************************************************************
0041A2C0 55 PUSH EBP
0041A2C1 8BEC MOV EBP,ESP
0041A2C3 |. 83C4 C8 ADD ESP,-38
******************************************************************************************
Теперь ищем ближайший джамп...
******************************************************************************************
0041A2DC |. 84D2 TEST DL,DL
0041A2DE 75 1C JNZ SHORT unpacked.0041A2FC ; Этот вполне подойдет...
0041A2E0 |. 66:C745 E4 080>MOV WORD PTR SS:[EBP-1C],8
---------------------------------------------------------
---------------пропущено несколько строк-----------------
---------------------------------------------------------
0041A380 |. FF75 CC PUSH DWORD PTR SS:[EBP-34] ; |Arg1
0041A383 |. B8 27AA5D00 MOV EAX,unpacked.005DAA27 ; |ASCII "Warning"
0041A388 |. 8B4D D0 MOV ECX,DWORD PTR SS:[EBP-30] ; |
0041A38B |. BA 03000000 MOV EDX,3 ; |
0041A390 E8 73980B00 CALL unpacked.004D3C08 ; \unpacked.004D3C08
0041A395 |. 8B45 D4 MOV EAX,DWORD PTR SS:[EBP-2C]
0041A398 |. 64:A3 00000000 MOV DWORD PTR FS:[0],EAX
0041A39E |. 8BE5 MOV ESP,EBP
0041A3A0 |. 5D POP EBP
0041A3A1 \. C3 RETN
******************************************************************************************
Наша цель это перепрыгнуть CALL "Warning". Для этого выделим строчку 0041A2DE -> пробел ->
стираем все и пишем "Jmp 0041A395".
Ну, вот и все. Конечно, остался NAG при выходе из проге, но я думаю, вы без труда сможете
убить этот раздрожитель нервной системы :) Я не стал это рассматривать т.к. для нормальной
работы проги это не мешает...

P.S. Когда я дописал статью мне в голову пришла идея скручивания таймера триала :) Но как
бы там не было мне понравилась иследование. Удачного вам реверсинга!!!

26.11.2006 ;)




Добавить комментарий


Обновить