Исследование Calendarscope 1.6

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


Автор: bi0w0rM <bioworm@mail.ru>


Привет всем, давно не виделесь! С этой гребаной учебой совсем не приходилось ничего ломать. Но свободная минута нашлась, да и софт не подкачал - принесли опять диск Xakep за ЯНВАРь 2003(опять не самый свежий :). Софтой набит просто у-у-уууу! За что спасиба большая Спайку. Так вот, стал на форуме вопрос, почему и зачем патчить байты. Вот и попытаюсь объяснить, но опять же нужнО знание ассемблера, без него никак.

Для примера я схватил прогу Calendarscope 1.6
Вы же постарайтесь слить ее откуда-нибдуь, например с самого www.calendarscope.com
Я не думаю, что защиту явно улучшили, да и паковщика наверно не повесят тоже. Более того, прога написана на Visual C, а там в отличие от Borland C++Builder и Delphi(да и Visual Basic тоже :) код не набит мусором от компонентов. Сломалась прога легко, и я решил, что это будет хорошим примером для начинающих и непонимающих, а также пример для программистов - оставлять прогу в таком "чистом" виде нельзя. Естественно вам ниельзя никак использовать данную программу в сломанном виде, так как это незаконно!

Нам не понадобится даже SoftIce, так что дизассемблируйте в w32dasm(даже IDA не нужна). Регистрация проги основана на ключе. И даже если Вы посмотрите ее, то тут нескоро-то и поймаешь, когда же кнопка активная станет. Значит, прицепляемся к самому слабому - в заголовке окна написано ( UNREGISTERED EVALUATION COPY ), вот это и ищем. Прописываем в поиске такую строчку. Она встречается несколько раз, но нас пока интересует то, что в заголовке окна. То есть окажемся здесь:

* Possible Reference to String Resource ID=00140: "Calendarscope"
|
:0041E574 688C000000 push 0000008C
:0041E579 50 push eax
:0041E57A E801E40200 call 0044C980
:0041E57F 83C408 add esp, 00000008
:0041E582 50 push eax
:0041E583 8D4C240C lea ecx, dword ptr [esp+0C]
:0041E587 C644242004 mov [esp+20], 04
:0041E58C E806860800 call 004A6B97
:0041E591 8D4C240C lea ecx, dword ptr [esp+0C]
:0041E595 885C241C mov byte ptr [esp+1C], bl
:0041E599 E82D820800 call 004A67CB
:0041E59E E87C8A0900 call 004B701F
:0041E5A3 8B4804 mov ecx, dword ptr [eax+04]
:0041E5A6 E895D6FEFF call 0040BC40 <<== возможно, это ключевая процедура
:0041E5AB 85C0 test eax, eax
:0041E5AD 742E je 0041E5DD <<== засекайте, куда прыжок
:0041E5AF 8D4C240C lea ecx, dword ptr [esp+0C]

* Possible Reference to String Resource ID=59301: " ( UNREGISTERED EVALUATION COPY )" <<==это светится в окне
|
:0041E5B3 68A5E70000 push 0000E7A5
:0041E5B8 51 push ecx
:0041E5B9 E8C2E30200 call 0044C980
:0041E5BE 83C408 add esp, 00000008
:0041E5C1 50 push eax
:0041E5C2 8D4C240C lea ecx, dword ptr [esp+0C]
:0041E5C6 C644242005 mov [esp+20], 05
:0041E5CB E8C7850800 call 004A6B97
:0041E5D0 8D4C240C lea ecx, dword ptr [esp+0C]
:0041E5D4 885C241C mov byte ptr [esp+1C], bl
:0041E5D8 E8EE810800 call 004A67CB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041E5AD(C)
|
:0041E5DD 8B742424 mov esi, dword ptr [esp+24] <<==прыжок сюда

Джамп JE 0041E5DD проскакивает через PUSH'ы. То есть если бы джамп не сработал, то в заголовок окна была бы помещена строка
Calendarscope ( UNREGISTERED EVALUATION COPY ) ,
что обычно и происходит. Посмотрите оффсет и попробуйте поменять je на jne в хекс-редакторе. Получилось, заголовок окна нормальный, как при обычной регистрации. Предположим, товарищ программист обозначил проверку на зарегистрированность одной функцией, которую вызывал в разных местах программы. Я предпологаю, что по адресу 0040BC40 и есть та самая процедура(ее вызов стоит перед тем джампом, который нас пустил). Давайте проверим. Открутитесь в самое начало листинга в w32dasm и в поиске пишем call 0040BC40. Находится такая строка во многих местах, всюду стоят после них условные переходы. Если их всех заменить на противоположные, то будет рулез, не будет нага и ничего лишнего, прога типа зарегистрирована. Понятно, что и зачем патчится? Я думаю, да. Но это способ отмороженный, так как можно поступить более изящно. То есть сделать, чтобы эта процедурка всегда возвращала то, что нам нужно. Для этого недо нажать кнопочку CALL на панели инструментов w32dasm, когда стоишь на любом call 0040BC40. Вот она, это процедура:

:0040BC40 E8DBFFFFFF call 0040BC20 <<== сюда уж не поползем
:0040BC45 F7D8 neg eax
:0040BC47 1BC0 sbb eax, eax
:0040BC49 40 inc eax <<== вот с этим можно сотворить кое-что
:0040BC4A C3 ret

Вот. Можете заменить INC EAX на NEG EAX или просто на NOP. Вот тогда не надо искать все джампы, они итак теперь будут работать как надо. Кому непонятно, что такое INC и NEG, то нужно срочняком учить ассемблер! Ну слово "учить" слишком грубо и очень напоминает мне мою учебу :)) Так что почитайте, но читайте вдумчиво!!

ЗЫЖ Теперь надо в самой программе из EventList'а удалить событие End of 30-day evaluation period, а также в редакторе ресурсов(Restorator, Exescope) найти окно About(диалог 5101) и подправить UNREGISTERED EVALUATION COPY на что-нибудь другое, более прикольное :) Впишите туда свое имя, хотя это на любителя, т.к. прога итак работает.

Всего хорошего
bi0w0rM[AHT]

T1p5 0F the D4y: у меня бессрочный [!] в ru.antisex Кто следующий встанет на пути флеймера? ;-)


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






Hosted by uCoz