Брутфорс для IP-Tools v1.11
{codecitation class=»brush: pascal; gutter: false;» width=»600px»}
Автор: Hex
Брутфорс уместен везде, где нужен ввод пароля. Почему бы не юзать брутфорс для регистрации? Почему не заставить прогу подбирать серийный номер к самой себе? Никто не запрещал. Вот и заставим IP-Tools 1.11 сгенерить нам номер 🙂
Для начала найдем где происходит генерация и проверка. Запускаем прогу. Заходим в окно ввода регистрационного номера. Ставим брейкпоинт на hmemcpy. Жмем ок. Мы в айсе. Жмем F12 пока не выберемся на уровень с адресами 4973хх. Теперь идем вниз по коду и посматривая в регистры замечаем:
0049738B 8B45F0 mov eax, dword ptr [ebp-10] — в ЕАХ попадает наш номер.
0049738E E8617DFFFF call 0048F0F4 — проверка на длину и символы, которые юзались
00497393 663BF8 cmp di, ax
00497396 0F8574010000 jne 00497510 — прыжок к ошибке
0049739C A1B0994B00 mov eax, dword ptr [004B99B0]
004973A1 BAFF010000 mov edx, 000001FF
004973A6 E8957CFFFF call 0048F040
004973AB 8BF8 mov edi, eax
004973AD A1E8984B00 mov eax, dword ptr [004B98E8]
004973B2 BAFF010000 mov edx, 000001FF
004973B7 E8847CFFFF call 0048F040 — проверка самого кода
004973BC 3BF8 cmp edi, eax
004973BE 0F854C010000 jne 00497510 — прыжок к ошибке
Итак если ни один из прыжков (00497396 и 004973BE) не выполнится — выводится месага о том, что все зарегено. Так как в ЕАХ по адресу 0049738B загоняется номер из ebp, то можно зациклить прогу заставив ее прыгать сюда загоняя в eax номер для проверки. Как я определил, в коде юзаются тока цифры, причем 0 не юзается. Ну и слава богу. Меньше мороки. Теперь нам остается тока написать небольшую прогу которая будет генерить код который мы будем загонять в EAX перед этой все проверкой 🙂
Как это сделал я. Я открыл iptools.exe в qview и нашел пустое место (т.е. там тока 00 00 00 …)
И написал там свою программу. Вот она:
000B2C8E: 60 pushad — сохраняем на всякий случай регистры
000B2C8F: 31C9 xor ecx,ecx — очистили ecx
000B2C91: 8B45F0 mov eax,dword ptr [ebp-10] — прочитали серийный номер
000B2C94: 823839 cmp byte ptr [eax],39 — первая цифра = ‘9’
000B2C97: 7404 jz 000B2C9D — равно
000B2C99: FE00 inc byte ptr [eax] — увеличили первую цифру на 1
000B2C9B: EB0B jmp 000B2CA8 — вернулись в прогу
000B2C9D: C60031 mov byte ptr [eax],31 — записали в первую цифру 1
000B2CA0: 40 inc eax — переключились на вторую цифру
000B2CA1: 823831 cmp byte ptr [eax],31 — проверили не закончился ли код
000B2CA4: 7C08 jl 000B2CAE — закончился
000B2CA6: EBEC jmp 000B2C94 — повторим проверку для следующей цифры
000B2CA8: 61 popad — вернули регистры на место
000B2CA9: E9DD3AFEFF jmp 0009678B — вернулись в прогу (49738B = 9678B offset)
000B2CAE: C60031 mov byte ptr [eax],31 — если уже конец кода то допишем 1.
000B2CB1: 61 popad — вернули регистры на место
000B2CB2: E9D43AFEFF jmp 0009678B — вернулись в прогу.
Ну и еще надо сделать это
000967BE: 0F85CAC40100 jnz 000B2C8E — т.е. если код неверный то увеличиваем на 1.
Итак как этот бред работает. Читаю из стэка номер и читаю его слева направо (еврейские замашки :)) Если первая цифра не 9. То увеличиваю ее на 1 и выхожу в прогу. Если первая цифра 9 то заменяю ее на 1 и проверяю следующую цифру. При проверке следующей цифры проверяю чтобы она не оказалась последней в коде. В памяти это выглядит вот так (мой код 12345):
31 32 33 34 35 00 00 00 00
Так вот я слежу чтобы не попасть на 00 или еще че-нить. Если так 00 то делаем из него 31 (это ‘1’) т.е. увеличиваем длину кода на одну цифру. ну и под конец опять таки выхожу в программу. Генерить код оно будет в таком виде:
11111
21111
…
91111
12111
22111
32111
…
13111 и т.д.
Т.е. в обратном порядке. Нам то ведь пофиг, главное — перебрать все варианты. Я вводил имя ‘Hex’ и начальный код ‘1111’, помоему, код не может быть короче 4 символов, я уже не помню. И еще два нюанса. Первое:
00497396 0F8574010000 jne 00497510
тут почему то она выпрыгивает 🙁 занопить эту команду. Второе — прога проверяет контрольную сумму и выводит страшную месагу о том, что файл был поврежден. Bpx на showwindow и потом найдете, что проверка идет по адресу 4B34A7. Правим там джамп и терь запускаем прогу. Терь осталось тока поставить брейкпоинт на 4973C4 чтобы попасть в айс когда генерация закончится. Запускаем вводим ‘Hex’ и ‘1111’ жмем ок. Прога типа подвисает. И секунд через 40 (это на celeron 366, запущено тока айс и IP-tools) мы в айсе. Теперь d *(ebp-10) и там у нас ‘96521’. Какая красота. 🙂
Теперь берем оригинальный exe, запускаем и регимся 🙂 P.S. Это так все хорошо потому, что юзались тока цифры, а если бы в коде были еще и буквы… Есть еще проги в, которых в проверку специально вставляют процедуру KERNEL32!Sleep, чтобы типа замедлить генерацию. Занопить ее и все.
{/codecitation}