Исследование Ascii Picture Designer 2.22

Перейти на главную страницу, индексную страницу.


Автор: FEUERRADER <feuerrader@nm.ru>


Исследование Ascii Picture Designer 2.22
  Программа: Ascii Picture Designer 2.22
     Размер: 69632 байта
       Язык: Microsoft Visual C++ 6.0
     Защита: имя/код
       Цель: взлом
Инструменты: Win32Dasm 8.9-9.0, Hiew 6.x

Описание: стремноватая прога для рисования ascii графики. Имеет одно функциональное ограничение: не работает стирательная резинка.

Исследование: в принципе без проблем можно на специализированных сайтах скачать серийник или самому найти в памяти сгенерированный код для Вашего имени (проверено). Но сейчас займемся взломом, а не поиском серийного номера. Начнем. Суем прогу в Win32Dasm. Открываем SDR (список строк). Ищем строку: "Thank you for your register! Please run it again now!". Это сообщение выходит, когда наша регистрация успешна. Смотрим выше, в поисках перехода:

:0040514C E88F000000              call 004051E0
:00405151 83F801                  cmp eax, 00000001
:00405154 7564                    jne 004051BA

Заходим в CALL.

* Referenced by a CALL at Addresses:
|:004023C6   , :0040514C   , :004058B2
|
:004051E0 6AFF                    push FFFFFFFF
...

Вызывается из трех разных мест. Ну, что будем искать в три места и править там переходы (они там точно есть). Все пределтно просто: эта процедура возвращает в еах 0 или 1, т.е 0 - незарегены, 1 -зарегены. Кстати она генерирует верный РН, кто хочет - проанализируйте и сделайте кейген. Так не будем же глупить и сделаем, чтобы она возвращала 1. Я попробовал вставить соответствующий код в начало процедуры, но прога меня обламала аварийным завершением. Тогда я решил вставить в конец, все прошло удачно. Давайте это проделаем: крутим вниз процедуры до этого места:

:00405705 64890D00000000          mov dword ptr fs:[00000000], ecx
:0040570C 81C488000000            add esp, 00000088
:00405712 C20800                  ret 0008
:00405715 90                      nop
:00405716 90                      nop
:00405717 90                      nop
:00405718 90                      nop

Итак, процедура заканчивается на 405712. Далее идут NOP. Они как будто специально для нас оставлены! Все просто, заменяем так, как показано:

:00405705 64890D00000000          mov dword ptr fs:[00000000], ecx
:0040570C 81C488000000            add esp, 00000088
:00405712 B801000000              mov eax, 00000001
:00405717 C20800                  ret 0008
:0040571A 90                      nop
:0040571B 90                      nop

Всё. Запускаем прогу, работает вроде и резинка доступна. Давайте создадим рисунок, порисуем, а теперь потрем резинкой... Опа! Не стирает! Непорядок! Вскоре выяснилось, что в процедуре проверяется начличие в реестре (путь HKEY_CURRENT_USER\SOFTWARE\asciiart\asciiart\setting, строковые параметры usernamе и regcode) параметров. И из-за их отсутствия резинка не трет. Вот этот код:

:00405217 FFD6                    call esi    <проверка на
                                              <существование username
:00405219 83C408                  add esp, 00000008
:0040521C 85C0                    test eax, eax
:0040521E 0F84AC040000            je 004056D0 <на конец процедуры
:00405224 8B8C2494000000          mov ecx, dword ptr [esp+00000094]
:0040522B 6844B74000              push 0040B744
:00405230 51                      push ecx
:00405231 FFD6                    call esi    <проверка на
                                              <существование regcode
:00405233 83C408                  add esp, 00000008
:00405236 85C0                    test eax, eax
:00405238 0F8492040000            je 004056D0 <на конец процедуры

Давайте изменим переходы вот так:

:00405217 FFD6                    call esi
:00405219 83C408                  add esp, 00000008
:0040521C 85C0                    test eax, eax
:0040521E 0F8400000000            je 00405224
:00405224 8B8C2494000000          mov ecx, dword ptr [esp+00000094]
:0040522B 6844B74000              push 0040B744
:00405230 51                      push ecx
:00405231 FFD6                    call esi
:00405233 83C408                  add esp, 00000008
:00405236 85C0                    test eax, eax
:00405238 0F8400000000            je 0040523E
:0040523E 8B942490000000          mov edx, dword ptr [esp+00000090]

То есть в любом случае переход осуществляется на следующую инструкцию. Просто при таком изменении меньше надо изменять байтов (всего 2), чем полностью NOPить переход (всего 6!).

Теперь попробуйте, всё должно работать.

Crack:
=========вырежь=тут=========
Difference(s) between asciiart.exe & cracked.exe
ASCIIART.EXE
00005220: AC 00
00005221: 04 00
0000523A: 92 00
0000523B: 04 00
00005712: C2 B8
00005713: 08 01
00005715: 90 00
00005716: 90 00
00005717: 90 C2
00005718: 90 08
00005719: 90 00
=========вырежь=тут=========

Спасибо за интерес к этой статье!



Все права защищены ©  2003 


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz