Время работы не ограничено - Wallpaper Calendar 2.0.3
|
Bugs, life - программистские хроники.
|
Target: Wallpaper Calendar 2.0.3
Tools:
- Some brains
- Win32Dasm 8.93
- Hex&Asm редактор (я использовал QView)
Все, кроме мозгов, можно найти на www.exetools.com
Вступление
Как это начиналось:
Выдался свободный час и я решил поисследовать какую-нибудь программу, а заодно (поскольку время оставалось) решил накатать и тьюториал.
Что за прога:
Какой-то календарь на рабочем столе. Честно говоря говно какое-то, мне такой даром не нужен, но для взлома сойдет. В архиве эта прога занимает 1,470,ххх и написана она на Delphi. Системные требования минимальные. Имеет ограничение в свободном использовании 30 дней и я попытаюсь этот недостаток исправить.
Начало
Достали из кобуры известный всем Win32Dasm и кинули в него прогу? Она распаковалась хорошо и мы понимаем, что она ничем не запакована.
Далее заходим в секцию строк и ищем, что-нибудь про evaluation или expired, в самом начале нашлась такая строка [FREE Evaluation period over], означающая, что типа все - приехали. Посмотрим что за код скрывается рядом, щелкаем два раза и видим...
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BA885(C)
|
* Possible StringData Ref from Code Obj ->"Wallpaper Calendar "
|
:004BA8CA 6808AE4B00 push 004BAE08
:004BA8CF 8D458C lea eax, dword ptr [ebp-74]
:004BA8D2 E8A1DDFFFF call 004B8678
:004BA8D7 FF758C push [ebp-74]
* Possible StringData Ref from Code Obj ->" [FREE Evaluation period over]"
|
:004BA8DA 6854AE4B00 push 004BAE54
|
Все как обычно. Видно, что сюда делается прыжок с 004BA885, а следовательно надо идти туда и посмотреть, что за дела. И вот мы там...
:004BA86F DB6DA0 fld tbyte ptr [ebp-60]
:004BA872 DEE1 fsubrp st(1), st(0)
:004BA874 E83B83F4FF call 00402BB4
:004BA879 A32C7C4C00 mov dword ptr [004C7C2C], eax
:004BA87E 833D2C7C4C0000 cmp dword ptr [004C7C2C], 00000000
:004BA885 7C43 jl 004BA8CA
|
Как отче наш видно, что счетчик дней заносится в 004C7C2C, а затем сравнивается с 0 если уже все, то переход. Eax считается в выделенной процедуре, значит надо сделать так, чтобы процедура всегда возвращала число больше 0.
Как это сделать? Все до невозможного просто, если вы уже сами догадались, то делайте сами - "Практика это лучший учитель". Для тех, кто продолжает читать скажу, что здесь всего-то надо сделать ret из процедуры, до процедуры eax всегда больше 0. Как догадался? на практике проверил, вообщем, делаем так: списываем строку кода, чтобы по ней можно было найти в файле нужное место, я взял E83B83F4FF. Теперь заходим в hex&asm редактор, переходим в 32-битный режим ассемблера. И начинаем искать эту строку в QViewе надо нажать F7 и ввести эту строку. И Enter.
Так строка нашлась на 0B9C74, хорошо в путных редакторах рядом с процедурой должна быть написана цифра. Держите Shift и нажмите эту цифру и вы перенесетесь в место с процедурой. Если у вас нету цифры рядом жмите F5 и набираете 1FB4 именно по такому адресу, находится нужная процедура. Теперь можете написать C3 или перейти в режим аsm-редактирования и ввести ret, это одно и тоже. Теперь сохраняйте изменения и запускайте программу. В верхней строке написано сколько вам ее пользовать у меня это число выходило за рамки 100000. И оно не будет убавляться, так что дерзайте и все будет круто.
Послесловие
Спасибо автору за предоставленный для исследования продукт.
Господа Авторы: защита фигня, если хотите, чтобы за прогу платили баблосы - делайте защиту лучше.
Все ругательства отправлять в null
Все остальное на lomovskih@yandex.ru
Спасибо за интерес к моему творчеству!
Удачи в Reversing Engeneering!
P.S. Запомните все материалы публикуются только в учебных целях и автор за их использование ответственности не несет!!
P.P.S. Возможно имеют место опечатки, заранее извините!
With best wishes Fess
И да пребудет с вами великий дух bad-сектора.
|