Сейчас на форуме: _MBK_ (+7 невидимых)

 eXeL@B —› Основной форум —› Помогите разобраться с генерацией SN, который не содержится в памяти в явном виде
Посл.ответ Сообщение

Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 июня 2007 23:41 · Поправил: DivisionByZero
· Личное сообщение · #1

Помогите разобраться с генерацией SN, который не содержится в памяти в явном виде

Собственно говоря, мне нужен не взлом программы, а
прошу я помощи, чтобы разобраться с алгоритмом генерации SN,
который не содержится в памяти в явном виде. Но всё по-порядку.
Сам я скачивал эту прогу отсюда -
www.videocharge.com/download/VideoChargeFull_Install.exe
Весит она 22,5 МВ. Trial работает 20 дней, но этот этап мной
уже пройден - сбросить trial я теперь могу сам, и мне захотелось
добить эту прогу. Тут я должен немного отвлечься, чтобы было
понятнее. Вначале, как и положено ничего не понимающему в крэкинге
чайнику, я искал кейгены к вышеуказанной программе по всему
инету, и находил, но вот какую удивительную вещь обнаружил:
нет ни одного кейгена, соответствующего какой-нибудь из скачаных
версий ехе-файла. Допустим, с указанного URL я скачивал как
версию Full 3.8, а после инсталляции оказалось, что версия
ехе-файла 3.8.1.1. А до этого мной была предпринята масса
попыток скачать определенную версию и к ней же кейген, но
каждый раз результат был один и тот же: после установки
оказывалось, что версия хоть на одну циферку отличается, и
кейген уже не работает! Я подумал, что это и есть способ
защиты от создания универсального кейгена. Это меня так
заинтересовало, что я решил присоединится к сообществу
крэкинга...
Итак, я начал исследовать эту программу и довольно
быстро нашел способ сбросить trial, как я уже говорил, а вот
дальше дела пошли хуже. Мне не удается ни пропатчить прогу,
ни, тем более, написать кейген к ней. Она, кстати, ничем не
упакована, а написана на Microsoft Visual C++ 7.0. SoftIce
не работает у меня даже с официальными патчами от Numega,
поэтому использую Ollydbg. Вот чего мне удалось добиться:
Допустим, если в строке:

004060F4 . 74 1B JE SHORT VideoCha.00406111

поменять JE на JNZ, то появится красивое окошко с сообщением:
"Congratulations! You have succesfully activated..." Но это
только надпись, зарегеной она себя считать не будет. Я попытался
ещё продвинуться в этом направлении - находил и менял ещё
несколько условных переходов -, появлялись надписи типа:
"Licensed version" и т.д., но результата (желаемого) так и не
добился - прога упорно не регистрируется. Тогда я попытался
разобраться с алгоритмом генерации и проверки кода, но и тут
застрял, и без посторонней помощи, похоже, не выберусь. Как я
уже говорил нужный мне код не содержится в памяти в явном
виде. Вообще, чтобы "открыть" программу, нужно иметь три "ключа":
1. Код инсталляции (Instalation Code), который генерируется,
насколько я понял, при инсталляции и зависит от конкретного
компьютера. Его искать не надо;
2. Серийный номер (Serial Namber), который предоставляется
компанией за определенную плату;
3. Ключ активации (Activation Key), который сообщается
компанией после предоставления ей первых двух ключей.
Вот участок программы, где последовательно проверяются
все три ключа:

0040318B |. 57 PUSH EDI
0040318C |. 8D8E 10040000 LEA ECX,DWORD PTR DS:[ESI+410]
00403192 |. 8945 74 MOV DWORD PTR SS:[EBP+74],EAX
00403195 |. E8 6DFCFFFF CALL VideoCha.00402E07
0040319A |. 57 PUSH EDI
0040319B |. 8D8E 0C040000 LEA ECX,DWORD PTR DS:[ESI+40C]
004031A1 |. 8BD8 MOV EBX,EAX
004031A3 |. E8 5FFCFFFF CALL VideoCha.00402E07
004031A8 |. 57 PUSH EDI
004031A9 |. 8D8E F4050000 LEA ECX,DWORD PTR DS:[ESI+5F4]
004031AF |. 8945 04 MOV DWORD PTR SS:[EBP+4],EAX
004031B2 |. E8 50FCFFFF CALL VideoCha.00402E07

как видим, три раза вызывается подпрограмма по адресу 00402E07.
Перед этим в ECX заносится адрес памяти, по этому адресу и
находится проверяемый ключ. Вот сама процедура проверки:

00402E07 /$ 56 PUSH ESI
00402E08 |. 8BF1 MOV ESI,ECX
00402E0A |. 8B06 MOV EAX,DWORD PTR DS:[ESI]
00402E0C |. 33C9 XOR ECX,ECX
00402E0E |. 83E8 10 SUB EAX,10
00402E11 |. 41 INC ECX
00402E12 |. 2B48 0C SUB ECX,DWORD PTR DS:[EAX+C]
00402E15 |. 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
00402E18 |. 2B4424 08 SUB EAX,DWORD PTR SS:[ESP+8]
00402E1C |. 0BC8 OR ECX,EAX
00402E1E |. 7D 0B JGE SHORT VideoCha.00402E2B
00402E20 |. FF7424 08 PUSH DWORD PTR SS:[ESP+8]
00402E24 |. 8BCE MOV ECX,ESI
00402E26 |. E8 B1FEFFFF CALL VideoCha.00402CDC
00402E2B |> 8B06 MOV EAX,DWORD PTR DS:[ESI]
00402E2D |. 5E POP ESI
00402E2E \. C2 0400 RETN 4

в ней, как я понял, идет сначала предварительная проверка, и
если всё хорошо, то вызывается процедура более детальной
проверки по адресу 00402CDC:

00402CDC /$ 8B01 MOV EAX,DWORD PTR DS:[ECX]
00402CDE |. 8B50 F4 MOV EDX,DWORD PTR DS:[EAX-C]
00402CE1 |. 83E8 10 SUB EAX,10
00402CE4 |. 56 PUSH ESI
00402CE5 |. 8B7424 08 MOV ESI,DWORD PTR SS:[ESP+8]
00402CE9 |. 3BD6 CMP EDX,ESI
00402CEB |. 7E 02 JLE SHORT VideoCha.00402CEF
00402CED |. 8BF2 MOV ESI,EDX
00402CEF |> 8378 0C 01 CMP DWORD PTR DS:[EAX+C],1
00402CF3 |. 7E 08 JLE SHORT VideoCha.00402CFD
00402CF5 |. 56 PUSH ESI
00402CF6 |. E8 D2ECFFFF CALL VideoCha.004019CD
00402CFB |. EB 22 JMP SHORT VideoCha.00402D1F
00402CFD |> 8B40 08 MOV EAX,DWORD PTR DS:[EAX+8]
00402D00 |. 3BC6 CMP EAX,ESI
00402D02 |. 7D 1B JGE SHORT VideoCha.00402D1F
00402D04 |. BA 00040000 MOV EDX,400
00402D09 |. 3BC2 CMP EAX,EDX
00402D0B |. 7E 04 JLE SHORT VideoCha.00402D11
00402D0D |. 03C2 ADD EAX,EDX
00402D0F |. EB 02 JMP SHORT VideoCha.00402D13
00402D11 |> 03C0 ADD EAX,EAX
00402D13 |> 3BC6 CMP EAX,ESI
00402D15 |. 7D 02 JGE SHORT VideoCha.00402D19
00402D17 |. 8BC6 MOV EAX,ESI
00402D19 |> 50 PUSH EAX
00402D1A |. E8 15EDFFFF CALL VideoCha.00401A34
00402D1F |> 5E POP ESI
00402D20 \. C2 0400 RETN 4

Вот с алгоритмами этих процедур я и не могу разобраться. в
первой всё время идет считывание из памяти, не могу найти,
когда и как эти данные туда заносятся, чему они должны
соответствовать? Вторую процедуру тоже бы хотелось разложить
по полочкам, у меня никак не получается.
Я в этом деле новичок, поэтому даже не знаю, насколько
глупые вопросы я задаю. Но если кто-нибудь заинтересовался,
то помогите, пожалуйста!



Ранг: 18.3 (новичок)
Активность: 0.010
Статус: Участник

Создано: 20 июня 2007 08:20
· Личное сообщение · #2

Ничего практически полезного в приведенном коде не вижу. Покажи лучше дамп около перехода 004060F4 . 74 1B JE SHORT VideoCha.00406111



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 июня 2007 15:55
· Личное сообщение · #3

Wild_One

Вот код программы этого участка:

004060C2 > 53 PUSH EBX
004060C3 . 33DB XOR EBX,EBX
004060C5 . 3BC3 CMP EAX,EBX
004060C7 . 7D 06 JGE SHORT VideoCha.004060CF
004060C9 . 899E F4070000 MOV DWORD PTR DS:[ESI+7F4],EBX
004060CF > 8B86 F4070000 MOV EAX,DWORD PTR DS:[ESI+7F4]
004060D5 . 83F8 03 CMP EAX,3
004060D8 . 0F85 8E000000 JNZ VideoCha.0040616C
004060DE . 6A 01 PUSH 1
004060E0 . 8D8E 30040000 LEA ECX,DWORD PTR DS:[ESI+430]
004060E6 . E8 846F0600 CALL VideoCha.0046D06F
004060EB . 8BCE MOV ECX,ESI
004060ED . E8 82D0FFFF CALL VideoCha.00403174
004060F2 . 85C0 TEST EAX,EAX
004060F4 74 1B JE SHORT VideoCha.00406111
004060F6 . 53 PUSH EBX
004060F7 . 8D8E F4050000 LEA ECX,DWORD PTR DS:[ESI+5F4]
004060FD . E8 05CDFFFF CALL VideoCha.00402E07
00406102 . 68 84284800 PUSH VideoCha.00482884 ; ASCII "ActivationKeyFull"
00406107 . 50 PUSH EAX
00406108 . E8 E7B6FFFF CALL VideoCha.004017F4

вызывается процедура по адресу 00403174, которую я привел выше,
затем TEST EAX,EAX, если 0, то перепрыгиваем на нехорошее сообщение:
"Invalid Activation Key. Please verify your serial number and
activation key", а если не 0, то идем дальше и CALL VideoCha.004017F4,
а это и есть процедура вывода "хорошего" сообщения.
А в памяти можно найти только код инсталляции, который и так всегда доступен, и введеные мною
неправильные ключи. Правильных нет.



Ранг: 29.2 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 20 июня 2007 18:51
· Личное сообщение · #4

DivisionByZero пишет:
www.videocharge.com/download/VideoChargeFull_Install.exe
Весит она 22,5 МВ
...спасибо, конечно за заботу, можно было бы что-нить вымутить из дистра, чтоб около метра-двух да выложить, а так хер его знает, да и ->

DivisionByZero пишет:
CALL VideoCha.004017F4
<- о чем может поведать, что там, видеоканал али защита там...
...с уважением ...



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 июня 2007 21:52
· Личное сообщение · #5

drunk_master
Могу залить рабочий ехешник (1,38 МВ), подскажите, куда и как?




Ранг: 500.6 (!), 7thx
Активность: 0.260
Статус: Участник

Создано: 20 июня 2007 22:02
· Личное сообщение · #6

DivisionByZero пишет:
Могу залить рабочий ехешник


Нужно чтобы он ещё и запускался на другой машине.



Ранг: 174.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 20 июня 2007 22:02
· Личное сообщение · #7

DivisionByZero пишет:
Могу залить рабочий ехешник (1,38 МВ), подскажите, куда и как?

Куда - RapidShare http://www.rapidshare.com/ , WebFile http://www.webfile.ru/ , вестимо. А как - ну, руками, наверное Там всё интуитивно понятно.



Ранг: 18.3 (новичок)
Активность: 0.010
Статус: Участник

Создано: 20 июня 2007 22:21
· Личное сообщение · #8

Так и правда "хер его знает". Хоть ответь на следующие вопросы:
Что происходит при срабатывании перехода:
004060D5 . 83F8 03 CMP EAX,3
004060D8 . 0F85 8E000000 JNZ VideoCha.0040616C // если [ESI+7F4]<>3, то переходим куда-то

0040318B |. 57 PUSH EDI // а что в edi? значение часто используется

что содержится в Eax и [eax] при выполнении инструкции по адресу 00402E0A? (нужен дамп близлежащей памяти [eax])

Трасса программы (какие переходы исполняются) ?

Исследование лучше всего начинать не с начала проверки ключа, а с конца. Нам нужно значение eax на выходе из процедуры проверки. Его и отлавливаем.
В данном случае основная проверка должна быть
00402D1A |. E8 15EDFFFF CALL VideoCha.00401A34
или
00402D1A |. E8 15EDFFFF CALL VideoCha.00401A34

Какова длина ключей и какие они (из кейгенов других версий)?

Теперь насчет того, что вывод хорошего сообщения не ведет к нужным последствиям. Тут либо при основной проверке результат дополнительно сохраняется в глобальных переменных либо после вывода сообщения дополнительная проверка. Отследить можно через аппаратные брякпоинты. В окне памяти Ольки выделяешь нужный байт далее ПКМ ->Breakpoint->Hardware, on access-> Byte или DWORD
Когда программа обратится к указанному байту, олька остановится.
Отследи таким все обращения к памяти, где содержится введенны тобой ключ.
А экзешник отдельно от других файлов из папки запускается?



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 июня 2007 22:35 · Поправил: DivisionByZero
· Личное сообщение · #9

Ехешник тута http://rapidshare.com/files/38382277/VideoCharge.exe.html , у меня он запускался
даже после удаления программы и всех её ключей из реестра.



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 20 июня 2007 23:14
· Личное сообщение · #10

DivisionByZero
Ну что тебе сказать если терпения хватит тогда сможешь разобраться:
Вот функция проверки: (начало)

00403174 /$ 55 PUSH EBP
00403175 |. 8D6C24 88 LEA EBP,DWORD PTR SS:[ESP-78]
00403179 |. 81EC 14020000 SUB ESP,214
0040317F |. A1 00E94900 MOV EAX,DWORD PTR DS:[49E900]
00403184 |. 53 PUSH EBX
00403185 |. 56 PUSH ESI
00403186 |. 57 PUSH EDI
00403187 |. 8BF1 MOV ESI,ECX
00403189 |. 33FF XOR EDI,EDI
0040318B |. 57 PUSH EDI
0040318C |. 8D8E 10040000 LEA ECX,DWORD PTR DS:[ESI+410]
00403192 |. 8945 74 MOV DWORD PTR SS:[EBP+74],EAX
00403195 |. E8 6DFCFFFF CALL VideoCha.00402E07 -> Переводим в числа SN
0040319A |. 57 PUSH EDI
0040319B |. 8D8E 0C040000 LEA ECX,DWORD PTR DS:[ESI+40C]
004031A1 |. 8BD8 MOV EBX,EAX
004031A3 |. E8 5FFCFFFF CALL VideoCha.00402E07 -> Переводим в числа ID
004031A8 |. 57 PUSH EDI
004031A9 |. 8D8E F4050000 LEA ECX,DWORD PTR DS:[ESI+5F4]
004031AF |. 8945 04 MOV DWORD PTR SS:[EBP+4],EAX
004031B2 |. E8 50FCFFFF CALL VideoCha.00402E07 -> Переводим Актив. ключ
004031B7 |. 8945 24 MOV DWORD PTR SS:[EBP+24],EAX
004031BA |. 33F6 XOR ESI,ESI
004031BC |. 8D45 54 LEA EAX,DWORD PTR SS:[EBP+54]
004031BF |. 53 PUSH EBX
004031C0 |. 46 INC ESI
004031C1 |. 50 PUSH EAX
004031C2 |. 8975 30 MOV DWORD PTR SS:[EBP+30],ESI -> заносим в память 1
004031C5 |. E8 73E6FFFF CALL VideoCha.0040183D
004031CA |. 84C0 TEST AL,AL
004031CC |. 59 POP ECX
004031CD |. 59 POP ECX
004031CE |. 75 03 JNZ SHORT VideoCha.004031D3

Дальше идет туева хуча проверок, с кучей математических действий ( прям как шифрование )

И вот конец функции:

00405997 |. 0BC2 OR EAX,EDX
00405999 |. 0BC1 OR EAX,ECX
0040599B |. 3BC6 CMP EAX,ESI
0040599D |. 5E POP ESI
0040599E |. 5B POP EBX
0040599F |. 74 04 JE SHORT VideoCha.004059A5
004059A1 |. 8365 30 00 AND DWORD PTR SS:[EBP+30],0
004059A5 |> 8B4D 74 MOV ECX,DWORD PTR SS:[EBP+74]
004059A8 |. 8B45 30 MOV EAX,DWORD PTR SS:[EBP+30] < - EAX = [EBP+30]
004059AB |. E8 294B0500 CALL VideoCha.0045A4D9
004059B0 |. 83C5 78 ADD EBP,78
004059B3 |. C9 LEAVE
004059B4 \. C3 RETN

Одним словом бери трассируй и делай так чтобы после всех проверок у тебя в [ebp+30] осталась 1 это и будет правильная регистрация



Ранг: 18.3 (новичок)
Активность: 0.010
Статус: Участник

Создано: 21 июня 2007 00:06
· Личное сообщение · #11

Нет, так не катит.RSI мне показалось или результат тот же: при запуске прога считает себя незарегенной.
Там же пишут, что программу нужно перезапустить (считай проверка кода при запуске программы). По адресу 00402AB1 считывается значение ключей из реестра. Далее переходим на 2 retn вверх и там проверка полученных значений. Писать кейген на это нерентабельно. Лечение геморроя обойдется дороже
Но можешь там поковыряться на предмет патчинга.

DivisionByZero, тебе же просто нужно чтобы прога не домогалась этим окошком при запуске? Тогда можно заставить диалоговое окно закрываться, до его появления и запускать программу. Дилог создается CreateDialogIndirectParam.



Ранг: 284.8 (наставник), 6thx
Активность: 0.150
Статус: Участник

Создано: 21 июня 2007 11:55
· Личное сообщение · #12

Wild_One
Епть я тока показал функцию проверки! Если подберешь по ней ключ он будет работать...

А так ищи по сигнатуре похожую дублирующую функцию проверки, тогда не будет нага!



Ранг: 4.0 (гость)
Активность: 0=0
Статус: Участник

Создано: 28 июня 2007 21:13
· Личное сообщение · #13

Да уж, разобраться с подпрограммой проверки кода, текст которой занимает 53(!) страницы, конечно
можно, но уж очень это хлопотно . Обойти процедуру вывода первого диалога пока тоже не
получается, да оно мне и не мешает. Похоже, проще будет просто сбрасывать trial каждые 20 дней -
это 5-7 минут.
Спасибо всем, кто откликнулся!
Тема закрыта.


 eXeL@B —› Основной форум —› Помогите разобраться с генерацией SN, который не содержится в памяти в явном виде
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати