|

Хакер vs Шаровары
FINNAN (finnan@mail.ru)
Xakep, номер #022, стр. 022-060-5
Хм, теперь прога ломится к себе на сервак, не иначе как проверить ту лабуду, что ты ввел. Видимо, догадывается, что ее кидают ;). Ну что ж, уже кое-что!
Отхлебнули пива, поехали дальше.
Как уже выяснилось, команда [0167:00489AB9 CALL 004AB0E0] вызывает функцию, которая проверяет SN и RegName. Значит надо подробно исследовать ее. Трассируем по F8 и попадаем в тело функции. Вот ее урезанный код:
:0167:004AB0E0 SUB ESP,20
:0167:004AB0E3 OR ECX,-01
:0167:004AB0E6 XOR EAX,EAX
:0167:004AB0E8 PUSH ESI
:0167:004AB0E9 MOV ESI,[ESP+2C]
:0167:004AB0ED PUSH EDI
:0167:004AB0EE MOV EDI,ESI
:0167:004AB0F0 REPNZ SCASB
:0167:004AB0F2 NOT ECX
:0167:004AB0F4 DEC ECX
:0167:004AB0F5 CMP ECX,0E -\
:0167:004AB0F8 JNZ 004AB16D - Проверка длины SN
..............
..............
Если длина не 14, то вылетаем без лишних вычислений
:0167:004AB16D MOV ECX,[ESP+2C]
:0167:004AB171 POP EDI
:0167:004AB172 XOR AX,AX
:0167:004AB175 POP ESI
:0167:004AB176 MOV DWORD PTR [ECX],FFFFFFFF
:0167:004AB17C ADD ESP,20
:0167:004AB17F RET
Обрати внимание на строки 004AB0F0 - 004AB0F8: (если ты не знаешь, как работает команда REPNZ SCASB, почитай доки по ASM-у). Этот код проверяет длину SN и, если окажется, что длина не равна 0Eh (т.е. 14), то посылает в обломинск сразу. Теперь имеет смысл вводить не 0987654321, а 09876543211234. Продолжаем исследовать дальше.
Функция 004AB0E0 после проверки длины SN вызывает еще 6 функций. Как мне удалось выяснить, первые пять из них вычисляют реальный серийный номер, а последняя сравнивает его со введенным. Нас интересует последняя функция, находящаяся по адресу 004B04D0. Она начинается так:
:0167:004B04D0 PUSH EBP
:0167:004B04D1 MOV EBP,ESP
:0167:004B04D3 PUSH EDI
:0167:004B04D4 PUSH ESI
:0167:004B04D5 PUSH EBX
:0167:004B04D6 MOV ECX,[EBP+10]
:0167:004B04D9 OR ECX,ECX
:0167:004B04DB JZ 004B05CA
:===>:004B04E1 MOV ESI,[EBP+08]
:===>:004B04E4 MOV EDI,[EBP+0C]
:0167:004B04E7 LEA EAX,[005456E4]
:0167:004B04ED CMP DWORD PTR [EAX+08],00
Обрати внимание: этой функции передаются через стек два параметра, которые почти сразу заносятся в регистры ESI и EDI. Наверняка это указатели на что-то в памяти. Чтобы посмотреть на что, оттрассируй до строчки [:0167:004B04E7 LEA EAX,[005456E4]] и введи команды:
DB EDI
DB ESI
Хм. По адресу, находящемуся в EDI, лежит введенный SN (т.е. 09876543211234), а по адресу в ESI - странная последовательность - A2222222222222. Ее длина - 14 символов, и я почти уверен, что это сгенерированный SN, тем более данная функция сравнивает эти последовательности, и если они окажутся одинаковыми, то, по-видимому, ты станешь счастливым обладателем зарегистрированной программы. Что-то мне подсказывает, что SN не может быть таким, но первый символ его - 'A' стопудово. Так давай поставим BP на строчку [:0167:004B04E7 LEA EAX,[005456E4]], попытаемся ввести A9876543211234 и посмотрим, что сгенерит программа для себе (ну и для нас, естественно ;) ).
Назад на стр. 022-060-4 Содержание Вперед на стр. 022-060-6
|