РЕГИСТРАЦИЯ INTERNET MANIAC
Перейти на главную страницу, индексную страницу.
ВВЕДЕНИЕ
Internet Maniac - программа для получения
информация о серверах в Интернет.
Включает такие возможности, как Ping,
Finger, Traceroute и т.д.
Для исследованиz данной программы
мы будем использовать отладчик
SoftICE. Же-
лательно, версии 4.00 или выше.
ИССЛЕДОВАНИЕ
При каждом запуске программа в
заголовке окна выдает строку
UNREGISTERED,
что само по себе уже угнетает. В
этой статье мы рассмотрим, как ее
зарегистриро-
вать.
Запустим программу. В меню Help есть
пункт Register..., с помощью которого мож-
но ввести имя (Your Name) и код (Registration
code). Попробуем ввести любые имя и
код и нажмем на кнопку Register.
Появится окошко с надписью Incorrect
registration
code. Хорошо... Перейдем в SoftICE и
поставим контрольные точки (breakpoint)
на
выполнение функций GetDlgItemTextA() и
GetWindowTextA(). Для этого введем сле-
дующие команды:
bpx GetDlgItemTextA
bpx GetWindowTextA
Хотя названия функций можно
вводить и маленькими буквами,
рекомендуется
вводить их так. Таким образом, Вы
быстрее их запомните.
Ну, что ж... Введем имя (я ввел YH2K) и
код (я ввел 110184). Нажимаем на кнопку,
и... Программа прерывается, и мы
попадаем в отладчик. Программа
остановилась при
вызове функции GetDlgItemTextA(). Нажмем F12,
чтобы вернуться из функции в про-
грамму. Теперь посмотрим на участок,
откуда она вызывается:
015F:0040449D 6800010000 PUSH 00000100
015F:004044A2 50 PUSH EAX
015F:004044A3 684A040000 PUSH 0000044A
015F:004044A8 56 PUSH ESI
015F:004044A9 FFD7 CALL EDI <- вызов GetDlgItemTextA (считывается
имя)
015F:004044AB 8D4C2408 LEA ECX,[ESP+08] <- мы тут
015F:004044AF 6800010000 PUSH 00000100
015F:004044B4 51 PUSH ECX
015F:004044B5 6849040000 PUSH 00000449
015F:004044BA 56 PUSH ESI
015F:004044BB FFD7 CALL EDI <- вызов GetDlgItemTextA (считывается
код)
015F:004044BD 8D542448 LEA EDX,[ESP+48]
015F:004044C1 8D442408 LEA EAX,[ESP+08]
015F:004044C5 52 PUSH EDX <- запись в стек кода
015F:004044C6 50 PUSH EAX <- запись в стек
имени
015F:004044C7 E8C4240000 CALL 00406990 <- вызов
функции
Попробуем разобраться. По адресу
4044А9 происходит вызов функции,
считыва-
ющей имя, введенное пользователем.
По адресу 4044ВВ происходит вызов
функции,.NeCrOmAnCeR. Регистрация Internet
Maniac v1.08. 2
считывающей код. По адресам 4044С5 и
4044С6 происходит запись в стек двух
пара-
метров, которые будут переданы
функции, вызывающейся по адресу 4044С7.
С по-
мощью кнопки F10 дойдем до адреса 4044С5
и посмотрим, что хранится в
регистрах
EDX и EAX. Выполняется это с помощью
следующих команд:
d edx
d eax
И что же мы увидим??? В этих
регистрах хранится имя и код,
которые мы ввели! А
зачем функции получать в качестве
параметров имя и код??? Правильно...
Отпра-
вимся внутрь функции с помощью
кнопки F8. Начнем анализировать код:
015F:00406990 83EC20 SUB ESP,20 <- мы
здесь
015F:00406993 56 PUSH ESI
015F:00406994 8B742428 MOV ESI,[ESP+28]
015F:00406998 56 PUSH ESI
015F:00406999 FF154C004100 CALL [KERNEL32!lstrlen] <-
определяется длина имени
015F:0040699F 83F804 CMP EAX,04 <- если длина не
меньше 4,
015F:004069A2 7D07 JGE 004069AB <- то
осуществляется переход на 4069АВ
015F:004069A4 33C0 XOR EAX,EAX
015F:004069A6 5E POP ESI
015F:004069A7 83C420 ADD ESP,20
015F:004069AA C3 RET <- выход из функции
015F:004069AB 0FBE4601 MOVSX EAX,BYTE PTR [ESI+01]
...
015F:004069E0 8B542440 MOV EDX,[ESP+40]
015F:004069E4 83C414 ADD ESP,14
015F:004069E7 8D442404 LEA EAX,[ESP+04]
015F:004069EB 52 PUSH EDX <- запись в стек
содержимого регистра EDX
015F:004069EC 50 PUSH EAX <- запись в стек
содержимого регистра EAX
015F:004069ED FF15F8004100 CALL [KERNEL32!lstrcmp] <-
сравнивается две строки
Обратим внимание на адрес 406999.
Вызывается функция, определяющая
длину
имени. Далее, если длина имени не
меньше 4, то осуществляется переход
на 4069АВ.
А если длина меньше 4, то переход не
осуществляется и происходит выход
из функ-
ции по адресу 4069АА. После того, как
произошел переход на 4069АВ, по шагу
про-
кручиваем код и доходим до того
места, в котором сравнивается
введенный нами код
с правильным. Конечно... Вызывается
функция lstrcmp(), которая
предназначена для
сравнения строк. Посмотрим
параметры, которые ей передаются: в
регистре EDX (d
edx) находится код введенный нами код
(у меня 110184), а в регистре EAX (d eax) -
искомый код. В моем случае -
1184420864-200144. Вот его-то и следует
переписать...
Выйдем из отладчика и введем новые
данные в окно регистрации (не
забудьте перед
этим отключить все контрольные
точки - bd *). Нажимаем на кнопку Register,
и...
программа зарегистрирована!
Казалось бы, программа исследована...
Но, есть один нюанс. Помните,
осуществ-
лялся выход из функции, если длина
имени была менее 4 символов? Вот тут-то
и надо
рассмотреть этот случай. В
отладчике вновь включим все
контрольные (be *), введем
имя меньше четырех символов и
нажмем на Register. Пройдем по
вышеописанному
пути и после выхода из функции
попадем сюда:
015F:004044C7 E8C4240000 CALL 00406990
015F:004044CC 83C408 ADD ESP,08 <- сюда мы
попадаем
015F:004044CF 85C0 TEST EAX,EAX <- проверяется
значение EAX.NeCrOmAnCeR. Регистрация Internet
Maniac v1.08. 3
015F:004044D1 744A JZ 0040451D <- осуществляется
переход, если установ-
лен флаг нуля (Z)
015F:004044D3 8B3D78004100 MOV
EDI,[KERNEL32!WritePrivateProfileSt...
По адресу 4044CF проверяется значение
EAX, после которого устанавливается
флаг
нуля (Z). Далее, с адреса 4044D1
происходит переход в случае, если
данный флаг уста-
новлен. После этого перехода
появляется окно с сообщением о
неправильно введен-
ном коде. Значит, нам нужно сделать
так, чтобы переход не осуществлялся.
Этого
можно добиться путем изменения
оператора условного перехода JZ на
обратный ему
JNZ. Шестнадцатеричный код оператора
JZ 0040451D - 74h 4Аh. Когда курсор уста-
новлен на строке 4044D1, наберите
команду «a» (без кавычек) для
переключения в
режим интерактивного ассемблера.
Поменяйте данный оператор на JNZ
0040451D.
Таким образом, шестнадцатеричный
код изменится на 75h 4Ah. Теперь если
Вы вый-
дете из отладчика, высветится
окошко об успешной регистрации. Но...
Код изменил-
ся только на одну сессию работы
программы, поэтому Вам нужно
открыть исполняе-
мый файл в шестнадцатеричном
редакторе и производить
модификацию в нем. Глав-
ное, найти нужное место в файле. Так
как комбинация 744Ah очень коротка,
она мо-
жет встречаться в нескольких
местах в программе. Поэтому следует
переписать так-
же несколько байт, стоящих до и
после изменяемой комбинации,
например:
83C40885C0744A8B3D78004100h. Далее надо изменить
байт 74h на 75h (т.е. изменить
код команды JZ на JNZ). Удачи Вам!
Материалы находятся на сайте
http://cracklab.narod.ru/doc/