:: TheBat! 1.53d - пример плохой защиты ::

Вы наверняка спросите - чтоже в ней плохого, ведь там нужно вводить ключ, его контрольную суму и пароль? А если пытаться отслеживать куда все это пишеться, куда копируеться, вочто трансформируется и с чем сравнивается, то в мозгах быстро кончается фосфор и они отказываются работать! Все это так, но как гласит народная мудрость - на каждую хитрую жопу найдется свой болт =) Сразу хочу сказать что идея ломать TheBat! 1.53d именно таким образом родилась у меня после прочтения статьи "Как взломать TheBat! v1.36"(Dr.Golova) на reversing.net
А теперь собственно сама идея и ее реализация. Незаегистрированный TheBat при каждом запуске и создании нового почтового ящика светит наг, причем если триальный период истек то прога требует себя зарегить. Как оказалось все это вызывается в одной процедуре и нам ничего не стоит просто отменить ее вызов.
Итак, запускаем TheBat, когда появится наг ставим bpx DestroyWindow. Бряк сработает кактолько мы щелким какуето кнопку на наге, теперь в софтайсе ищем строку "This program is provided to you for evaluation purposes"(первая строчка нага), найдя ставим на ее адрес bpm(у меня он был равен 007CABE9). На самом деле эта строка будет встречаться в памяти много раз, но для нас главное чтобы наш бряк сработал раньше чем вызовется наг. Поставив bpm закрываем прогу и снова запускаем. Когда бряк сработает удаляем его и начинаем трасировать програму по F10. Жать F10 придется минуты 4 - до того момента пока мы не проскочим call из которого и вызывается наг. Вобщем мы должны попасть сюда:

015F:0057B254 E81F1AEFFF CALL 0046CC78 <- отсюда мы пришли
015F:0057B259 A348FD6B00 MOV [006BFD48],EAX
015F:0057B25E A148FD6B00 MOV EAX,[006BFD48]
015F:0057B263 E8EC48EFFF CALL 0046FB54 <- вызов NAG
015F:0057B268 48 DEC EAX
015F:0057B269 0F95C0 SETNZ AL
015F:0057B26C 33D2 XOR EDX,EDX
015F:0057B26E 891548FD6B00 MOV [006BFD48],EDX
015F:0057B274 5B POP EBX
015F:0057B275 C3 RET

Как я уже говорил NAG и все что сним связано вызывается из CALL 0046FB54. Путем щелканья на "ОК" и на "Exit" до того как истек триал-период и после обнаруживаем, что если все нормально то этот CALL возвращает в ЕАХ 1, если же прогу надо закрыть то 2. Поэтому просто меняем CALL 0046FB54 на MOV EAX,1(количество байт какраз совпадает) и наслаждаемся халявой =)