Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Крэк на FlashGet - легко!

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Статью написал: Bad_guy
Статья создана: 14.10.02

FlashGet(JetCar) - это замечательная программа для быстрого скачивания файлов из интернета, вот заходим мы на интерду, находим пара сайтиков, находим логику в нумерации картинок, создаём список... и поехали... ну или на даунлодру заходим.

В общем, программа не выкидывает НАГ окон, но показывает баннер в верху своего окна, и многим это даже совсем не мешает, если вам не мешает - не надо его убирать, ведь авторы именно на этих показах и делают деньги, и пускай делают, мы лишь исследуем программный код с целью выясенения их ленивости.

Был у меня такой FlashGet - 0.86 и был 1.10, я решил посмотреть версию 1.10 и наконец-таки избавиться от, отвлекающего меня, баннера.

Во FlashGetе в окне "Убрать баннер" я ввёл своё замечательное имя, Bad_guy, и 12345 в качестве кода, нажал OK и получил сообщение: "Спасибо за регистрацию!....Перезапустите программу...". Неужели, я угадал код - конечно нет - просто программа у нас "крутая", она проверяет пароль при запуске. Ну что ж, перезапустим под RegMon'ом, что же мы видим: в реестре есть ветка, где живет наш FlashGet по имени JetCar, вот она: HKEY_CURRENT_USER\Software\JetCar\JetCar\, посмотрим в этой ветке раздел General. Этот раздел содержит два преинтересных параметра RegName="Bad_guy" и RegPass="12345", вот почти наш FlashGet и попался, мы теперь знаем, что, в принципе, можно поставить прерывание на функцию RegQueryValueExA? но она плохая функция - её слишком часто вызывают многие программы, боюсь, сложно будет докопаться до истины (FlashGetа). Признаюсь, что я тщетно баловался SoftIce'ом достаточно долго, прежде чем понял, что он мне не поможет целиком "сломать" FlashGet и я решил взять W32Dasm. После того, как программа была раздизассемблирована можно было догадаться, что скоро настоящий регистрационный код для FlashGet мною будет найден, давайте взгляним на этот дизассемблированный код, важные строки я выделил красным цветом:

 * Possible StringData Ref from Data Obj ->"RegName"
                                   |
 :0041807F 6878B34D00              push 004DB378
 :00418084 8D442414                lea eax, dword ptr [esp+14]
 
 * Possible StringData Ref from Data Obj ->"General"
                                   |
 :00418088 6848A44D00              push 004DA448
 :0041808D 8BF1                    mov esi, ecx
 :0041808F 50                      push eax
 :00418090 E868C70800              call 004A47FD
 :00418095 68D4134E00              push 004E13D4
 
 * Possible StringData Ref from Data Obj ->"RegPass"
                                   |
 :0041809A 6870B34D00              push 004DB370
 :0041809F 8D4C2410                lea ecx, dword ptr [esp+10]
 
 * Possible StringData Ref from Data Obj ->"General"
                                   |
 :004180A3 6848A44D00              push 004DA448
 :004180A8 51                      push ecx
 :004180A9 8BCE                    mov ecx, esi
 :004180AB C744243400000000        mov [esp+34], 00000000
 :004180B3 E845C70800              call 004A47FD
 :004180B8 8B54240C                mov edx, dword ptr [esp+0C]
 :004180BC BB01000000              mov ebx, 00000001
 :004180C1 885C2424                mov byte ptr [esp+24], bl
 :004180C5 8B42F8                  mov eax, dword ptr [edx-08]
 :004180C8 85C0                    test eax, eax
 :004180CA 0F84CF000000            je 0041819F
 :004180D0 8B442408                mov eax, dword ptr [esp+08]
 :004180D4 8B48F8                  mov ecx, dword ptr [eax-08]
 :004180D7 85C9                    test ecx, ecx
 :004180D9 0F84C0000000            je 0041819F
 :004180DF 57                      push edi
 :004180E0 53                      push ebx
 :004180E1 6A43                    push 00000043
 :004180E3 8D4C2420                lea ecx, dword ptr [esp+20]
 :004180E7 E84D280700              call 0048A939
 :004180EC 8D4C241C                lea ecx, dword ptr [esp+1C]
 :004180F0 53                      push ebx
 :004180F1 51                      push ecx
 :004180F2 8D4C2414                lea ecx, dword ptr [esp+14]
 :004180F6 C644243002              mov [esp+30], 02
 :004180FB E8F82C0700              call 0048ADF8
 :00418100 8B542418                mov edx, dword ptr [esp+18]
 :00418104 8B00                    mov eax, dword ptr [eax]
 :00418106 52                      push edx
 :00418107 50                      push eax
 :00418108 E806380600              call 0047B913
 :0041810D 83C408                  add esp, 00000008
 :00418110 8D4C241C                lea ecx, dword ptr [esp+1C]
 :00418114 85C0                    test eax, eax
 :00418116 0F94C0                  sete al
 :00418119 25FF000000              and eax, 000000FF
 :0041811E 8BF8                    mov edi, eax
 :00418120 E89E730700              call 0048F4C3
 :00418125 8D4C2418                lea ecx, dword ptr [esp+18]
 :00418129 885C2428                mov byte ptr [esp+28], bl
 :0041812D E891730700              call 0048F4C3
 :00418132 8B4C2410                mov ecx, dword ptr [esp+10]
 :00418136 57                      push edi
 :00418137 8D542418                lea edx, dword ptr [esp+18]
 :0041813B 51                      push ecx
 :0041813C 52                      push edx
 :0041813D 8BCE                    mov ecx, esi
 :0041813F E89C000000              call 004181E0
 :00418144 8B44240C                mov eax, dword ptr [esp+0C]
 :00418148 8B4C2414                mov ecx, dword ptr [esp+14]
 :0041814C 50                      push eax
 :0041814D 51                      push ecx
 :0041814E E8C0370600              call 0047B913
 :00418153 83C408                  add esp, 00000008
 :00418156 885C2428                mov byte ptr [esp+28], bl
 :0041815A 85C0                    test eax, eax
 :0041815C 5F                      pop edi
 :0041815D 8D4C2410                lea ecx, dword ptr [esp+10]
 :00418161 7537                    jne 0041819A
 :00418163 E85B730700              call 0048F4C3
 :00418168 8D4C2408                lea ecx, dword ptr [esp+08]
 :0041816C C644242400              mov [esp+24], 00
 :00418171 E84D730700              call 0048F4C3
 :00418176 8D4C240C                lea ecx, dword ptr [esp+0C]
 :0041817A C7442424FFFFFFFF        mov [esp+24], FFFFFFFF
 :00418182 E83C730700              call 0048F4C3
 :00418187 8BC3                    mov eax, ebx
 :00418189 5E                      pop esi
 :0041818A 5B                      pop ebx
 :0041818B 8B4C2414                mov ecx, dword ptr [esp+14]
 :0041818F 64890D00000000          mov dword ptr fs:[00000000], ecx
 :00418196 83C420                  add esp, 00000020
 :00418199 C3                      ret
 

Как можно увидеть из листинга, я искал имена параметров, под которыми в реестре сохранены наши регистрационные данные. Каждый из них встречается в листинге дважды, первый раз я увидел рядом строку "Спасибо за регистрацию...", в общем это то место, где мы вводили наши данные, а вот второй случай более интересен, беру этот адрес (ну, например, 0041807F) и ставлю в SoftIce прерывание на него, если не знаете, как это сделать - подскажу - (перед тем, как запускать FlashGet поставьте в SoftICE прерывание bpx hmemcpy и запустите FlashGet, сразу же прервётесь, жмите F12, пока не окажетесь в модуле по имени FlashGet, а дальше спокойно ставьте прерывания на любые адреса, полученные для этой программы в W32Dasme - этот метод "добраться до программы" хорош для любых программ, а не только FlashGet). Вот мы уже прервавлись по адресу 0041807F, смотрим по моей методике бегло все "прыги" и значения в регистрах и вот мы добрались до 00418144, давайте ещё раз поглядим на этот код:

 :00418144 8B44240C                mov eax, dword ptr [esp+0C]
 :00418148 8B4C2414                mov ecx, dword ptr [esp+14]
 :0041814C 50                      push eax
 :0041814D 51                      push ecx
 :0041814E E8C0370600              call 0047B913
 :00418153 83C408                  add esp, 00000008
 :00418156 885C2428                mov byte ptr [esp+28], bl
 :0041815A 85C0                    test eax, eax
 :0041815C 5F                      pop edi
 :0041815D 8D4C2410                lea ecx, dword ptr [esp+10]
 :00418161 7537                    jne 0041819A
 

Если даже не будем смотреть значения в регистрах, всё равно увидим, что jne 0041819A отправляет нас за ближайший RET, а это подозрительно, теперь поглядим значения в регистрах перед CALLом, наберём:
:deax - там '12345'
:decx - там '37949NE1L6' - правильный рег. номер

Проверим, введя эти данные в FlashGet и получим, что мы правы и что:

Регистрационный ключ для FlashGet(JetCar) Version 1.10

Name: Bad_guy
Serial: 37949NE1L6


А вот памятка, которую я по-быстрому набросал специально для себя с целью будущего исследования новых версий FlashGet:

Вводим любые рег. данные, ищем их в реестре: HKEY_CURRENT_USER\Software\JetCar\JetCar\General, название параметров (RegName, RegPass) ищем в W32Dasm дизассемблерном листинге, ставим в SoftIce прерывание на второй из двух найденных адресов, смотрим в SoftIce, перед RET есть JZ. Перед входом в CALL, меняющий флаг, есть PUSH eax, PUSH ecx - в EAX неправильный номер, в ECX - правильный. (адрес для версии 1.10 был 41814D).

Удачи вам в вашей деятельности, чем бы вы ни занимались, Bad_guy.



Обсуждение статьи: Крэк на FlashGet - легко! >>>


Комментарии к статье: Крэк на FlashGet - легко!

Brainstorm 11.12.2004 23:16:46
В настоящее время действенным было-бы взломать v1.60. но в целом Not bad!
---

Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS