Описание: стремноватая прога для рисования 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_USERSOFTWAREasciiartasciiartsetting, строковые параметры 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 =========вырежь=тут=========