Исследование WinCAM 2000

Перейти на главную страницу, индексную страницу.


Автор: GL#0M gl00m-crk@yandex.ru

Цель: WinCAM 2000
Инструменты: W32Dasm, Hiew.

О программе

"...никакая пошаговая инструкция со скриншотами по доступности подачи информации не может сравниться с видеороликом. Если вы согласны с последним утверждением, то WinCAM 2000 наверняка придется вам по вкусу. Программа позволяет записывать происходящее на Рабочем столе или в окнах приложений со звуковым сопровождением" - Журнал Chip 08/2003

Взлом

При запуске программы, перед нами появится Nag, в котором говорится, что время работы программы ограничено 15-ю днями. У нас есть возможность нажать на кнопку "Evaluate>>" или "Enter Code..." (которого мы, как обычно, не знаем =) Что ж, введём в поле "Key" любую ерунду и нажмём на "Enter Code...". В ответ на это вылетит грозный MessageBox, по имени "Register WinCAM 2000", и скажет нам "Invalid Software Key!!!" (неправильно значит...), а затем продолжится загрузка программы.

При беглом осмотре директории, куда была установлена программа, мы обнаружим интересный установочный файл - HLDRV32.EXE - Hardlock Device Driver.

Я ни разу не встречался с Hardlock, но, насколько мне известно, это одна из лучьших защит на сегодняшний день. Обычно, программа защищённая Hardlock, работает в DEMO-режиме, но, как только, в порт (LPT, USB, RS-232 и др.) компьютера, будет вставлен КЛЮЧ (специальное устройство), она начнёт работать в нормальном режиме, без каких-либо ограничений. КЛЮЧИ старых версий этой защиты можно было проэмулировать "вручную", а затем написать программный эмулятор КЛЮЧА. В последних же версиях Hardlock'а, возможность написания эмулятора есть, но только при наличии настоящего КЛЮЧА.

Подумав об этом, я двинулся в путь... (дисассемблируем WinCam.exe)

Программа написана при помощи MFC и, в начале листинга, идёт длинное описание меню и диалогов программы. Давайте поищим там что-нибудь связанное с регистрацией. "DialogID_0136" и "DialogID_01CF" - это то, что нам нужно. Хотя, если присмотреться, то "DialogID_0136" можно не трогать... А вот в "DialogID_01CF" можно увидеть заветную фразу "Thank you for...". Короче ищем все его вхождения. Как оказалось их всего одно... Посмотрим:
 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004019E2(U) // с этого адреса произошёл вызов
|
:00482840 55                      push ebp
 ---ВЫРЕЗАНО---
 * Possible Reference to Dialog: DialogID_01CF

:00482876 68CF010000            push 000001CF
:0048287B 8B4DF0                  mov ecx, dword ptr [ebp-10]
 ---ВЫРЕЗАНО---
Идём по адресу 004019E2:


 * Referenced by a CALL at Addresses:
|:004AAB00 , :0050623E
|
:004019E2 E9590E0800              jmp 00482840
:004019E7 E9B4AD0F00              jmp 004FC7A0
...
Что ж, идём на адрес 004AAB00:


 * Reference To: MFC42D.Ordinal:0746, Ord:0746h

:004AAAEE E823BC0700              Call 00526716
:004AAAF3 83F801                     cmp eax, 00000001
:004AAAF6 7539                        jne 004AAB31 // если EAX <> 1 то прыгаем
:004AAAF8 6A00                        push 00000000
:004AAAFA 8D8D44FDFFFF           lea ecx, dword ptr [ebp+FFFFFD44]
:004AAB00 E8DD6EF5FF               call 004019E2 // процедура вызова "Thank you..."
:004AAB05 C645FC01                  mov [ebp-04], 01
:004AAB09 8D8D44FDFFFF            lea ecx, dword ptr [ebp+FFFFFD44]
...
По адресу 004AAAF3 происходит сравнение регистра EAX с еденицей и если они не равны, то происходит прыжок на плохую мессагу, в противном случае "Thank you for...". Следовательно нам необходимо проделать следующее:


 * Reference To: MFC42D.Ordinal:0746, Ord:0746h

:004AAAEE E823BC0700              Call 00526716
:004AAAF3 33C0                       xor eax, eax       // обнуление регистра EAX
:004AAAF5 40                           inc eax               // увеличиваем EAX на еденицу
:004AAAF6 90                           nop                     // ничего не делаем
:004AAAF7 90                           nop                     // :)
:004AAAF8 6A00                        push 00000000
:004AAAFA 8D8D44FDFFFF          lea ecx, dword ptr [ebp+FFFFFD44]
:004AAB00 E8DD6EF5FF              call 004019E2
:004AAB05 C645FC01                 mov [ebp-04], 01
:004AAB09 8D8D44FDFFFF           lea ecx, dword ptr [ebp+FFFFFD44]
...
Теперь попробуем зарегестрироваться в программе... Вылетела ошибка, блин... Ладно, жмём "Сведения>>" и видим, что "упали" мы по адресу 00491E7F. Идём туда:


 * Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00491E1C(C)

:00491E77 6A10                        push 00000010
:00491E79 68C4595D00              push 005D59C4
:00491E7E 68A8595D00              push 005D59A8      // здесь мы "падаем"
:00491E83 8B4DFC                    mov ecx, dword ptr [ebp-04]
...
Идём по адресу 00491E1C:


* Reference To: MFC42D.Ordinal:0370, Ord:0370h
|
:00491E0C E8454B0900              Call 00526956
:00491E11 50                           push eax
:00491E12 E8CB23F7FF              call 004041E2
:00491E17 83C404                    add esp, 00000004
:00491E1A 85C0                       test eax, eax
:00491E1C 7459                       je 00491E77
:00491E1E 8B4DFC                    mov ecx, dword ptr [ebp-04]
:00491E21 81C178010000           add ecx, 00000178
:00491E27 51                           push ecx
:00491E28 8BD4                       mov edx, esp
:00491E2A 8965F4                     mov dword ptr [ebp-0C], esp
:00491E2D 51                           push ecx
:00491E2E 8BCA                       mov ecx, edx
...
Ну, что, давайте ещё раз попробуем зарегистрироваться... "Thank you for purchasing WinCAM 2000." Нас просят перезагрузиться и... ОПЯТЬ Nag!


Так, посмотрим, что происходит в процедуре по адресу 00491E12:


* Referenced by a CALL at Addresses:
|:0049178C   , :00491E12   , :004BCB76
|
:004041E2 E929061000              jmp 00504810
:004041E7 E944F70300              jmp 00443930
...
Аж, три вызова: 0049178C, 00491E12, 004BCB76. Идём по первому адресу:


* Reference To: ADVAPI32.RegQueryValueExA, Ord:017Bh
|
:00491777 FF158C3C5F00            Call dword ptr [005F3C8C]
:0049177D 3BF4                         cmp esi, esp

* Reference To: MSVCRTD._chkesp, Ord:00C8h
|
:0049177F E896660900              Call 00527E1A
:00491784 85C0                        test eax, eax
:00491786 7540                        jne 004917C8
:00491788 8B45F8                     mov eax, dword ptr [ebp-08]
:0049178B 50                           push eax
:0049178C E8512AF7FF              call 004041E2
:00491791 83C404                     add esp, 00000004
:00491794 85C0                        test eax, eax
:00491796 7430                        je 004917C8
:00491798 8BF4                        mov esi, esp
:0049179A 8B4DFC                    mov ecx, dword ptr [ebp-04]
:0049179D 51                           push ecx

* Reference To: ADVAPI32.RegCloseKey, Ord:015Bh
                                  |
:0049179E FF15883C5F00            Call dword ptr [005F3C88]
:004917A4 3BF4                         cmp esi, esp
...
Видно, что здесь идёт проверка значения из реестра. И если оно неверно, то, по адресу 00491796, происходит прыжок на ошибку (т.е. выводит Nag).


Поэтому, внесём следующие изменения:


* Reference To: MSVCRTD._chkesp, Ord:00C8h
|
:0049177F E896660900              Call 00527E1A
:00491784 85C0                       test eax, eax
:00491786 7540                       jne 004917C8
:00491788 8B45F8                    mov eax, dword ptr [ebp-08]
:0049178B 50                          push eax
:0049178C E8512AF7FF             call 004041E2
:00491791 83C404                    add esp, 00000004
:00491794 33C0                       xor eax,eax
:00491796 40                          inc eax
:00491797 90                          nop
:00491798 8BF4                      mov esi, esp
:0049179A 8B4DFC                  mov ecx, dword ptr [ebp-04]
:0049179D 51                         push ecx
...
Всё!!! Nag пропал, менюхи с просьбой о регистрации тоже, а в About'е "Thank you for purchasing WinCAM 2000 Professional Edition!!!" Т.е. всё rules!!! Удачи.


Этот материал опубликован в целях самообразования, за последствия которого Автор ответственности не несёт!


Материалы находятся на сайте http://cracklab.narod.ru/doc/






Hosted by uCoz