Исследование Njwin

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Необходимые инструменты

1. Отладчик SoftICE 3.23 или более поздний

2. Ваш любимый шестнадцатеричный редактор

Введение

Не так давно наткнулся я на программу под названием Njwin, которая опознает и перекодирует япон- ские, корейские и китайские иероглифы в их «первозданный» вид. Найти программу Njwin 1.6 можно по адресу http://www.njstar.com

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

У программы интересная сильная защита, которая все-таки имеет свои слабости, и при правильном подходе довольно быстро сдается. Во-первых, программа при закрытии проверяет сама себя на измене- ния кода, и если Вы изменили в теле программы хоть один байт, программа самоуничтожается. Вторая защита — 30-ти дневный «trial period». Итак, сначала нам необходимо отключить механизм самоуничтожения, а после заняться ее регистра- цией.

Отключение механизма самоуничтожения

Скопируйте файл Njwin.exe в другое место на случай неудачи и запустите программу. Установите в SoftICE точку прерывания bpx GetModuleFileName, нажмите F5 и закройте Njwin. Вы попадаете в SoftICE. Нажмите F11 и вы окажетесь в модуле Njwin.exe:

44E9 call KERNEL!GETMODULEFILENAME

44EE push 1A7Fh

44F1 push 7688h

44F4 lea ax, [bp FEEAh]

44F8 push ss

44F9 push ax

44FA call 1A7F:0856

44FF add sp,08

4502 mov si, ax

4504 mov [bp-0C], dx

4507 or dx, ax

4509 jnz 450C

450B jmp 4698

450E push 02

Протрассируйте код, используя F10, и записав все переходы jz и jnz. Теперь, используя любой шест- надщатеричный редактор, измените что-нибудь в файле Njwin.exe. Откройте его, установите точку пре- рывания на ту же функцию (bpx GetModuleFileName), и закройте Njwin. Попав в SoftICE, снова трасси- руйте код, отыскивая различия..Eduard Titov. Исследование Njwin 2 Для начинающих исследователей Очень скоро вы наткнетесь на место:

461C JNZ 467A расхождение

MOV WORDD PTR[BP-12],CFC4

MOV WORD PTR[BP-10],7BBC

PUSH 112F

PUSH 768C

LEA AX,[BP FEEA]

PUSH SS

PUSH AX

CALL 112F:0856 вот он, самоубийца

ADD SP,08

MOV SI,AX

MOV [BP-0C],DX

OR DX,AX

JZ 4698

И убедитесь, что неизмененная программа не делает перехода по адресу 461С (jnt 467A), и делает его по команде jz 4698. Измените jnz на jmp 4698, и вы увидите, что программа перестала самоуничтожаться. Теперь можно внести эти изменения в тело оригинальной программы. Кстати, взглянув повнимательнее на первый кусочек кода, вы увидите знакомый переход по адресу 450В. Можно просто изменить jnz 450C по адресу 4509 на jmp 4698, и вы снова отключите защиту. Теперь можно переходить к регистрации программы.

Регистрация программы

У меня программа не выдавала окна для ввода регистрационной информации, но друзья говорили, что даже после ввода правильной регистрационной информации при перезапуске программы она снова видела себя незарегистрированной, т.е. снова появлялось окошко с напоминанием о необходимости ре- гистрации и т.д. Как избавиться от этого окошка? Программа использует при запуске файл Njwin.ini , расположенный в каталоге Windows. Значит, следует трассировать изменения, происходящие при чте- нии .ini файла. Ставим bpx GetPrivateProfileString и запускаем программу. Останавливаемся мы в следую- щем месте:

0001.3B83 9AB93B0000 call KERNEL.GETPRIVATEPROFILESTRING

0001.3B88 80BEF6FD3F cmp byte ptr [bp FDF6], 3F

0001.3B8D 752E jne 3BBD

0001.3B8F FF36DC05 push word ptr [05DC]

0001.3B93 FF36DA05 push word ptr [05DA]

0001.3B97 FF36E005 push word ptr [05E0]

0001.3B9B FF36DE05 push word ptr [05DE]

0001.3B9F FFB6ECFB push word ptr [bp FBEC]

0001.3BA3 FFB6EAFB push word ptr [bp FBEA]

0001.3BA7 8D86F6FD lea ax, [bp FDF6]

0001.3BAB 16 push ss

0001.3BAC 50 push ax

0001.3BAD 680001 push 0100

0001.3BB0 FF36F405 push word ptr [05F4]

0001.3BB4 FF36F205 push word ptr [05F2]

0001.3BB8 9AE53B0000 call KERNEL.GETPRIVATEPROFILESTRING

0001.3BBD FF36DC05 push word ptr [05DC]

Трассируем программу, пока не дойдем до следующего места:

0001.33EB 9AFA360334 call 0001.36FA вызов считывания данных из реестра

0001.33F0 83C402 add sp, 0002

0001.33F3 0BC0 or ax, ax

0001.33F5 7503 jne 33FA проверка на регистрацию

0001.33F7 E9BF01 jmp 35B9 переход, если зарегистрирована

0001.33FA FF36F005 push word ptr [05F0]

0001.33FE FF36EE05 push word ptr [05EE]

0001.3402 680934 push SEG ADDR of Segment 0001.

Как видно, по адресу 001.33F5 осуществляется проверка регистра ах, с последующим переходом через адрес 0001.33F7, если программа не зарегистрирована. Значит, нам необходимо изменить jne 33FA на jmp 35B9 — и CRACK готов.

{/codecitation}

Добавить комментарий