Сейчас на форуме: _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, который не содержится в памяти в явном виде |
Эта тема закрыта. Ответы больше не принимаются. |