Брутфорс для 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}

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