| Сейчас на форуме: _MBK_ (+7 невидимых) |
| eXeL@B —› Основной форум —› Помогите разобраться с генерацией SN, который не содержится в памяти в явном виде |
| Посл.ответ | Сообщение |
|
|
Создано: 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 Вот с алгоритмами этих процедур я и не могу разобраться. в первой всё время идет считывание из памяти, не могу найти, когда и как эти данные туда заносятся, чему они должны соответствовать? Вторую процедуру тоже бы хотелось разложить по полочкам, у меня никак не получается. Я в этом деле новичок, поэтому даже не знаю, насколько глупые вопросы я задаю. Но если кто-нибудь заинтересовался, то помогите, пожалуйста! ![]() |
|
|
Создано: 20 июня 2007 08:20 · Личное сообщение · #2 |
|
|
Создано: 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, а это и есть процедура вывода "хорошего" сообщения. А в памяти можно найти только код инсталляции, который и так всегда доступен, и введеные мною неправильные ключи. Правильных нет. ![]() |
|
|
Создано: 20 июня 2007 18:51 · Личное сообщение · #4 DivisionByZero пишет: www.videocharge.com/download/VideoChargeFull_Install.exe Весит она 22,5 МВ ...спасибо, конечно за заботу, можно было бы что-нить вымутить из дистра, чтоб около метра-двух да выложить, а так хер его знает, да и -> DivisionByZero пишет: CALL VideoCha.004017F4 <- о чем может поведать, что там, видеоканал али защита там... ...с уважением ... ![]() |
|
|
Создано: 20 июня 2007 21:52 · Личное сообщение · #5 |
|
|
Создано: 20 июня 2007 22:02 · Личное сообщение · #6 |
|
|
Создано: 20 июня 2007 22:02 · Личное сообщение · #7 |
|
|
Создано: 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 Когда программа обратится к указанному байту, олька остановится. Отследи таким все обращения к памяти, где содержится введенны тобой ключ. А экзешник отдельно от других файлов из папки запускается? ![]() |
|
|
Создано: 20 июня 2007 22:35 · Поправил: DivisionByZero · Личное сообщение · #9 |
|
|
Создано: 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 это и будет правильная регистрация
![]() |
|
|
Создано: 21 июня 2007 00:06 · Личное сообщение · #11 Нет, так не катит.RSI мне показалось или результат тот же: при запуске прога считает себя незарегенной. Там же пишут, что программу нужно перезапустить (считай проверка кода при запуске программы). По адресу 00402AB1 считывается значение ключей из реестра. Далее переходим на 2 retn вверх и там проверка полученных значений. Писать кейген на это нерентабельно. Лечение геморроя обойдется дороже
Но можешь там поковыряться на предмет патчинга. DivisionByZero, тебе же просто нужно чтобы прога не домогалась этим окошком при запуске? Тогда можно заставить диалоговое окно закрываться, до его появления и запускать программу. Дилог создается CreateDialogIndirectParam. ![]() |
|
|
Создано: 21 июня 2007 11:55 · Личное сообщение · #12 |
|
|
Создано: 28 июня 2007 21:13 · Личное сообщение · #13 Да уж, разобраться с подпрограммой проверки кода, текст которой занимает 53(!) страницы, конечно можно, но уж очень это хлопотно . Обойти процедуру вывода первого диалога пока тоже не
получается, да оно мне и не мешает. Похоже, проще будет просто сбрасывать trial каждые 20 дней - это 5-7 минут. Спасибо всем, кто откликнулся! Тема закрыта. ![]() |
| eXeL@B —› Основной форум —› Помогите разобраться с генерацией SN, который не содержится в памяти в явном виде |
| Эта тема закрыта. Ответы больше не принимаются. |







Там всё интуитивно понятно.

. Обойти процедуру вывода первого диалога пока тоже не
Для печати