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

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


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

Исследование CamStudio 1.1

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

Очень удобно, когда все крэкерские инструменты, книги и статьи в одном месте. Используйте сборник от EXELAB - вот тут.

Автор: claus_crk <clauscrk@mail.ru>

Вступление.

Когда я решил заниматься revers’om я усиленно читал статьи по взлому программ, а также искал ShareWare и запихивал их на свой Винт. И вот как-то на днях отыскал прогу, лимит времени у которой давно истек и она просила регистрации. Эту прогу я пытался ломать когда был еще совсем неопытным и поэтому ничего не вышло. Но на этот раз она сдалась (я сломал ее где-то за час).

О программе.

Программа Camtasia Studio 1.1 (www.techsmith.com/products/studio/default2.asp) - программа для захвата видео и звука в любом приложении Windows, есть возможность редактирования видео. Включает в себя Recorder, Producer, Effects, MenuMaker, Player. Взял я ее с диска журнала “Хаккер”. Вроде бы неплохая прога.


Инструменты.

OllyDbg 1.09
WinDasm 8.93
Вроде все.


Исследование.

Начнем с внешнего осмотра. Прога работает 30 дней, потом просит регистрации или закрывается к чертовой матери. Регистрация стандартная – Name, Serial. При неправильном коде выдает сообщение : “ you must enter a valid software key “. Причем все программы можно запускать отдельно от главного загрузчика и везде есть nag с регистрацией, но об этом позже.

Первый этап.
Грузим CamRecorder в WinDasm, заходим в StringReferences и ищем “ you must …”. Находятся две строчки :


* Possible Reference to Dialog: DialogID_00FF
|
:004558F0 6AFF push FFFFFFFF
:004558F2 6A00 push 00000000
:004558F4 7414 je 0045590A <= прыжок на сообщение.

* Possible Reference to String Resource ID=10305: \"Unfortunately, your current Software Key will not work with \"
|
:004558F6 6841280000 push 00002841

* Reference To: MFC70.Ordinal:03F5, Ord:03F5h
|
:004558FB E8802A0300 Call 00488380
:00455900 5F pop edi
:00455901 668BC3 mov ax, bx
:00455904 5B pop ebx
:00455905 5E pop esi
:00455906 5D pop ebp
:00455907 C20C00 ret 000C



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

* Possible Reference to String Resource ID=10301: \"You must enter a valid software key.\"
|
:0045590A 683D280000 push 0000283D

* Reference To: MFC70.Ordinal:03F5, Ord:03F5h
|
:0045590F E86C2A0300 Call 00488380
:00455914 5F pop edi
:00455915 668BC3 mov ax, bx
:00455918 5B pop ebx
:00455919 5E pop esi
:0045591A 5D pop ebp
:0045591B C20C00 ret 000C



* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:0045585D(C), :00455874(C) <= еще два перехода на сообщение.
|

* Possible Reference to Dialog: DialogID_00FF
|
:0045591E 6AFF push FFFFFFFF
:00455920 6A00 push 00000000

* Possible Reference to String Resource ID=10301: \"You must enter a valid software key.\"
|
:00455922 683D280000 push 0000283D

* Reference To: MFC70.Ordinal:03F5, Ord:03F5h
|
:00455927 E8542A0300 Call 00488380
:0045592C 5F pop edi
:0045592D 5B pop ebx
:0045592E 5E pop esi
:0045592F 6633C0 xor ax, ax
:00455932 5D pop ebp
:00455933 C20C00 ret 000C

Так вот зачем мы дизассемблировали CamRecorder, потому-что у меня главный EXE файл CamtasiaStudio не загрузился через OllyDbg, может быть у вас получится или попробуйте другой файл (не Recorder), ну или SoftIce .

Второй этап.
Загружаем CamRecorder в Olly и ставим брейки на условные переходы .Вписываем имя, серийник и жмем OK. Срабатывает брейк, заходим в Olly и видм :

:00455855 8B07 mov eax, dword ptr [edi]
:00455857 8B58F4 mov ebx, dword ptr [eax-0C]
:0045585A 83FB0E cmp ebx, 0000000E <= сравнивается длина нашего кода
:0045585D 0F8CBB000000 jl 0045591E <= не должны прыгнуть
:00455863 68A0054A00 push 004A05A0
:00455868 50 push eax

* Reference To: MSVCR70.strspn, Ord:0314h
|
:00455869 FF15CC1E4900 Call dword ptr [00491ECC]
:0045586F 83C408 add esp, 00000008
:00455872 3BC3 cmp eax, ebx <= опять что-то сравнивается
:00455874 0F85A4000000 jne 0045591E <= не должны прыгнуть
:0045587A 6870234900 push 00492370
:0045587F 689C054A00 push 004A059C
:00455884 8BCF mov ecx, edi
:00455886 E845E4FBFF call 00413CD0
:0045588B 8B07 mov eax, dword ptr [edi]
:0045588D 8B4D00 mov ecx, dword ptr [ebp+00]
:00455890 8B16 mov edx, dword ptr [esi]
:00455892 50 push eax
:00455893 51 push ecx
:00455894 8BCE mov ecx, esi
:00455896 FF5218 call [edx+18] <= интересная процедура
:00455899 8BCE mov ecx, esi
:0045589B 8BD8 mov ebx, eax
:0045589D 80FB01 cmp bl, 01
:004558A0 7546 jne 004558E8
:004558A2 C7463001000000 mov [esi+30], 00000001
:004558A9 C786B800000000000000 mov dword ptr [esi+000000B8], 00000000
:004558B3 8B07 mov eax, dword ptr [edi]
:004558B5 50 push eax
:004558B6 6850054A00 push 004A0550
:004558BB E8D0E9FFFF call 00454290
:004558C0 8B4D00 mov ecx, dword ptr [ebp+00]
:004558C3 51 push ecx
:004558C4 6860054A00 push 004A0560
:004558C9 8BCE mov ecx, esi
:004558CB E8C0E9FFFF call 00454290
:004558D0 8B542414 mov edx, dword ptr [esp+14]
:004558D4 57 push edi
:004558D5 55 push ebp
:004558D6 52 push edx
:004558D7 8BCE mov ecx, esi
:004558D9 E8B2FDFFFF call 00455690
:004558DE 5F pop edi
:004558DF 668BC3 mov ax, bx
:004558E2 5B pop ebx
:004558E3 5E pop esi
:004558E4 5D pop ebp
:004558E5 C20C00 ret 000C

Первый условный переход срабатывает, если длина нашего кода меньше 0Е = 14. Со вторым условным переходом я не разбирался т.к. он у меня никогда не срабатывал (если хотите можете разобраться). Идем дальше, попадаем на интересную процедуру, после которой идет сравнение и условный переход, который нас кидает на еще одну проверку нашего кода и кодов прошлых версий, что нам совсем не нужно, значит будем смотреть процедуру по адресу 00455896.
Снова пытаемся зарегистрироваться, учтя длину кода, и заходим в процедуру.Сначала там будет какая-то хрень (нужно прокрутить вниз и поставить брейк на начале “нормального ассемблерного кода”) затем F9 и снова трассировать в ручную пока не увидим такой код :

:004668BF 8D542428 lea edx, dword ptr [esp+28]
:004668C3 52 push edx
:004668C4 8D44243C lea eax, dword ptr [esp+3C]
:004668C8 50 push eax
:004668C9 E832FC0000 call 00476500 <= интересная процедура
:004668CE 83C408 add esp, 00000008
:004668D1 85C0 test eax, eax
:004668D3 7507 jne 004668DC <= нужно прыгнуть
:004668D5 C64424130A mov [esp+13], 0A
:004668DA EB37 jmp 00466913

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004668D3(C)
|
:004668DC 8B442414 mov eax, dword ptr [esp+14]
:004668E0 8378F40E cmp dword ptr [eax-0C], 0000000E <= проверка длины кода
:004668E4 7C28 jl 0046690E
:004668E6 83C00C add eax, 0000000C
:004668E9 6A02 push 00000002
:004668EB 50 push eax
:004668EC E89FFB0000 call 00476490
:004668F1 83C408 add esp, 00000008
:004668F4 83F841 cmp eax, 00000041
:004668F7 7304 jnb 004668FD
:004668F9 33C0 xor eax, eax
:004668FB EB03 jmp 00466900

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004668F7(C)
|
:004668FD 83E841 sub eax, 00000041

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004668FB(U)
|
:00466900 C1E804 shr eax, 04
:00466903 3BC3 cmp eax, ebx
:00466905 730E jnb 00466915
:00466907 C64424130B mov [esp+13], 0B
:0046690C EB05 jmp 00466913

Итак по адресу 004668С9 происходит какая-то проверка и на следующем за ней условном переходе (если код неправильный мы не прыгаем и прыгаем на jmp’e, который перепрыгивает через несколько процедур). Ну ясно заходим в эту процедуру. Идем, пока не увидим следующее :

:004765AF AB stosd
:004765B0 83C440 add esp, 00000040
:004765B3 66AB stosw
:004765B5 33C9 xor ecx, ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004765E1(C)
|
:004765B7 0FB7D1 movzx edx, cx
:004765BA 8BC2 mov eax, edx
:004765BC D1E8 shr eax, 1
:004765BE 8A0418 mov al, byte ptr [eax+ebx]
:004765C1 E8AAFEFFFF call 00476470
:004765C6 0FB6541420 movzx edx, byte ptr [esp+edx+20]
:004765CB 83E20F and edx, 0000000F
:004765CE 0FBE541410 movsx edx, byte ptr [esp+edx+10] <= запись элемента
:004765D3 0FB6C0 movzx eax, al <= запись нашего элемента
:004765D6 3BD0 cmp edx, eax <= сравнение элементов кода
:004765D8 7515 jne 004765EF
:004765DA 83C102 add ecx, 00000002
:004765DD 6683F910 cmp cx, 0010
:004765E1 72D4 jb 004765B7
:004765E3 5F pop edi
:004765E4 5E pop esi
:004765E5 B801000000 mov eax, 00000001
:004765EA 5B pop ebx
:004765EB 83C47C add esp, 0000007C
:004765EE C3 ret



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004765D8(C)
|
:004765EF 5F pop edi
:004765F0 5E pop esi
:004765F1 33C0 xor eax, eax
:004765F3 5B pop ebx
:004765F4 83C47C add esp, 0000007C
:004765F7 C3 ret

По адресу 004765B7 начинается процесс генерации и проверки кода. В регистры EAX и EDX записываются элементы кодов : нашего и сгенеренного. Причем сравнение идет только восьми первых элементов. Дальше в регистр EAX записывается 1 (если код правильный) и следует возврат из процедуры. По адресу 004668E0 происходит проверка длины кода, но уже без четырех последних элементов и снова с 0Е = 14.Т.е. код должен быть длиной 14 + 4 = 18 элементов.
Теперь осталось только ввести нужное количество символов, попасть в процедуру генерации и проверки кода, записать первые восемь правильных элементов кода, ну и запомнить или записать оставшиеся десять элементов. Именно по последним десяти элементам и генерятся первые восемь, т.е. правильный серийник. Имя никакой роли не играет.
Вводим правильный код и все программа зарегистрирована.


P.S. Подобную защиту мне приходилось встречать в программе GreenBrowser – браузер Интернета, регистрация там довольно мнимая т.к. программа работает без ограничений и никакие наги не выскакивают, но можно поддержать разработчика в виде пожертвования – регистрации. Там также серийник генерится, но только по первым пяти элементам.

Статья носит ИСКЛЮЧИТЕЛЬНО ОБРАЗОВАТЕЛЬНЫЙ ХАРАКТЕР.

Если возникли какие–то вопросы, мыльте на ящик.

clauscrk@mail.ru


Обсуждение статьи: Исследование CamStudio 1.1 >>>


Комментарии к статье: Исследование CamStudio 1.1

Mafia32/[TLRH] 10.06.2004 23:30:59
Claus, извини (хоть ник твой и похож на Klaus), но статья выполнена (INHO) неважно. Я ее не читал, но с виду - абсолютный кошмар. Ассемблерные вставк и - 95% текста. Так нельзя. Даже если написано нормально, читать это невожможно. Извини, если обидел.
---
KLAUS 11.06.2004 10:32:12
Эт не я!
---
Mafia32/[TLRH] 12.06.2004 18:11:47
2KLAUS:
Ну я и говорю! Что его не спасет от критики даже похожесть на твой ник! :-)))
---
Вован 12.06.2004 18:19:55
А чё прикольно.
---
Dracula 15.06.2004 21:46:25
Ваще реально!
---
SLV 22.06.2004 12:01:38
Листинги слишком большие
---
claus_crk 22.06.2004 16:42:03
Всем спасибо. Все учтем.
---
Kastet 28.06.2004 14:06:11
Надо вдарить еще пивка и писать еще каких-нибудь статей. Это относится и к Вовану.
---

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



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


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