скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

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



Автор: Bad_guy
WEB сайт: http://cracklab.narod.ru

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.






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook