Сейчас на форуме: Magister Yoda (+5 невидимых) |
eXeL@B —› Основной форум —› Создание кейгена к продуктам Невософт |
Посл.ответ | Сообщение |
|
Создано: 03 октября 2006 02:27 · Личное сообщение · #1 Я начинающий "ломальщик", поэтому строго не судите если много писанины и не втему. Или может недописал чего... Както лазил я по инету. Наткнулся на интересную игрушку, называлась "Секрет ДаВинчи" (http://nevosoft.ru). Ну чтож. весит немного, решил поиграть. Скачал, запускаю, а там... Срок работы игрушки составляет всего час без регистрации!!! Поиграл я час, захотелось больше. Платить не очень то хотелось, тем более с мобильного через СМС (хотя стоит игруха всего 2,5 бакса). Как оказалось программа не была упакована даже UPX. Это интересно. Может стоит поламать. Взялся я значит, открыл OllyDbg, посмотрел вызов API функции USER32.MessageBoxA. Вызывается всего один раз! это меня обрадовало. Может здесь какраз собака зарыта. Ставлю бряк. Запускаю, ввожу левые цифры в окне регистрации. Секунда и срабатывает брейкпоинт. Дохожу до конца процедуры, получаю сообщение о неправильном регкоде и оказываюсь там где мне нужно: 00401E22 . 68 E8030000 PUSH 3E8 ; /Timeout = 1000. ms 00401E27 . FF15 A4904100 CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep 00401E2D . E8 8EFDFFFF CALL davinci_.00401BC0 00401E32 . 84C0 TEST AL,AL 00401E34 . 6A 40 PUSH 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL 00401E36 . 74 3E JE SHORT davinci_.00401E76 ; | 00401E38 . 8B15 78E44100 MOV EDX,DWORD PTR DS:[41E478] ; | 00401E3E . 68 A0934100 PUSH davinci_.004193A0 ; |Title = "Well done" 00401E43 . 68 6C934100 PUSH davinci_.0041936C ; |Text = "Регистрация прошла успешно! Спасибо за покупку! " 00401E48 . 52 PUSH EDX ; |hOwner => NULL 00401E49 . FF15 74914100 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 00401E4F . E8 CCF9FFFF CALL davinci_.00401820 00401E54 . 8B4424 7C MOV EAX,DWORD PTR SS:[ESP+7C] 00401E58 . 6A FF PUSH -1 ; /Result = FFFFFFFF (-1.) 00401E5A . 50 PUSH EAX ; |hWnd 00401E5B . FF15 78914100 CALL DWORD PTR DS:[<&USER32.EndDialog>] ; \EndDialog 00401E61 . B8 01000000 MOV EAX,1 00401E66 . 5E POP ESI 00401E67 . 8B4C24 70 MOV ECX,DWORD PTR SS:[ESP+70] 00401E6B . E8 74DA0000 CALL davinci_.0040F8E4 00401E70 . 83C4 74 ADD ESP,74 00401E73 . C2 1000 RETN 10 00401E76 > 8B0D 78E44100 MOV ECX,DWORD PTR DS:[41E478] ; | 00401E7C . 68 5C934100 PUSH davinci_.0041935C ; |Title = "Неверный ключ!" 00401E81 . 68 00DF4100 PUSH davinci_.0041DF00 ; |Text = " Попробуйте выполнить следующие действия: 1. Проверьте правильность введенного ключа. Ключ не должен содержать пробелы! 2. Проверьте правильность установки даты и времени на вашем компьютере (регистрационный ключ активен"... 00401E86 . 51 PUSH ECX ; |hOwner => NULL 00401E87 . FF15 74914100 CALL DWORD PTR DS:[<&USER32.MessageBoxA>>; \MessageBoxA 00401E8D > B8 01000000 MOV EAX,1 ; - мы оказались тут Мда. не ожидал что так все просто будет. увидел строку 00401E32 . 84C0 TEST AL,AL а перед ней 00401E2D . E8 8EFDFFFF CALL davinci_.00401BC0 значит проверка правильности введенного ключа лежит именно в процедуре davinci_.00401BC0. Поставил на ней брейкпоинт. Входим, идем в конец и видим 00401BFA |. E8 91F5FFFF CALL davinci_.00401190 в параметрах функции передается наш код. значит роверка находится тут. заходим в функцию, видим преобразование тектового значения нашего номера в числовой, а далее видим интересное действие: 004011B0 |> 8BF2 /MOV ESI,EDX 004011B2 |. D3E6 |SHL ESI,CL 004011B4 |. 0FAFF1 |IMUL ESI,ECX 004011B7 |. 33F0 |XOR ESI,EAX 004011B9 |. 81E6 FFFFFF7F |AND ESI,7FFFFFFF 004011BF |. 83E9 03 |SUB ECX,3 004011C2 |. 8BC6 |MOV EAX,ESI 004011C4 |.^79 EA \JNS SHORT davinci_.004011B0 004011C6 |. 8BC8 MOV ECX,EAX 004011C8 |. 81E1 FFFF0000 AND ECX,0FFFF 004011CE |. C1E8 10 SHR EAX,10 004011D1 |. 3BC8 CMP ECX,EAX тоесть некоторое преобразование введенного нами числа, передача расширенной части результата EAX в ECX и сравнение. Что это за преобразование мне не хотелось узнавать, поэтому, вспомнив что если c = a xor b, то a = c xor b. Делаю обратное преобразование. Хотя нет, рановато еще. Иду немного дальше по коду, вижу вторую проверку: 004011D6 |. A1 E8DD4100 MOV EAX,DWORD PTR DS:[41DDE8] 004011DB |. 2BC1 SUB EAX,ECX 004011DD |. 83F8 02 CMP EAX,2 004011E0 |. 7F 08 JG SHORT davinci_.004011EA видим что сравнение тоже, но теперь EAX берется из какого-то DS:[41DDE8]. Хм. смотрим по этому адресу, обнаружили 2 байта. Вот тут то и делаем обратное преобразование. Раскидываем эти 2 байта по EAX, получаем регистрационный код, вводим - РАБОТАЕТ! Но это еще не все. Вспоминаем сообщение о неправильном коде "2. Проверьте правильность установки даты и времени на вашем компьютере (регистрационный ключ активен"... Вот тут то мне и закралось сомнение по поводу валидности ключа на следующий день. Ведь он может оказаться недействительным. Снесем ветку реестра с ключем [HKEY_CURRENT_USER\Software\nevosoft\wrapper\product9233]. Вспоминаем о davinci_.00401BC0. Я умышленно сразу перешел в конец. теперь разберем ее поподробней, а именно нам понадобиться вот это: 00401BD7 |. 50 PUSH EAX 00401BD8 |. E8 5FD30000 CALL davinci_.0040EF3C 00401BDD |. 8B4C24 04 MOV ECX,DWORD PTR SS:[ESP+4] 00401BE1 |. B8 07452EC2 MOV EAX,C22E4507 00401BE6 |. F7E9 IMUL ECX 00401BE8 |. 03D1 ADD EDX,ECX 00401BEA |. C1FA 10 SAR EDX,10 00401BED |. 8BCA MOV ECX,EDX 00401BEF |. C1E9 1F SHR ECX,1F 00401BF2 |. 03CA ADD ECX,EDX 00401BF4 |. 890D E8DD4100 MOV DWORD PTR DS:[41DDE8],ECX 00401BFA |. E8 91F5FFFF CALL davinci_.00401190 Ставим бряк тут: 00401BD8 |. E8 5FD30000 CALL davinci_.0040EF3C, входим. Сразу что нам бросается в глаза так это: 0040EF44 |. 50 PUSH EAX ; /pFileTime 0040EF45 |. FF15 D0904100 CALL DWORD PTR DS:[<&KERNEL32.GetSystemT>; \GetSystemTimeAsFileTime Вот она функция получения сегодняшней даты! Идем дальше по коду, видим всего одну функцию. По параметрам функции передается наше время, и еще какие-то константы, одна равна нулю, а другая - 989680h. Это, видимо и есть получение этого самого DS:[41DDE8], с которым сравниваемся в конце. Ну чтож, вот все у нас и готово для получения своего кейгена к этой программе. |
|
Создано: 03 октября 2006 06:26 · Личное сообщение · #2 |
|
Создано: 03 октября 2006 06:27 · Личное сообщение · #3 |
|
Создано: 03 октября 2006 07:22 · Личное сообщение · #4 |
|
Создано: 14 ноября 2006 14:59 · Личное сообщение · #5 |
|
Создано: 14 ноября 2006 15:37 · Личное сообщение · #6 все подходит... Проверял сам... Сам в эти игрушки играю... если код для регистрации в 6 цифр, и кейген не работает (кейген Nitrogen'а) Возьмите первые 4 цифры и сгенерируй по ним. Будет работать. В своем кейгене я это учел, и просто отбрасывал 2 последние, которые ненужны. Если у кого всеже не получится заставить работать тот кейген могу выложить 100% рабочий, только скажите куда... |
|
Создано: 14 ноября 2006 16:17 · Личное сообщение · #7 |
|
Создано: 14 ноября 2006 19:24 · Поправил: Nitrogen · Личное сообщение · #8 |
|
Создано: 15 ноября 2006 03:52 · Поправил: FrEeDaY · Личное сообщение · #9 Z0oMiK А можно исходники Nitrogen'овского кейгена одним глазком глянуть? Nitrogen Мне просто попалась игрушка с 6-значным кодом сразу... "Секрет ДаВинчи" З.Ы. Кстати похоже что Невософт ворует. Взять даже игрушку Танчики - ведь кто видел игрушку Tank-o-Box поймет меня. При этом ни одного копирайта "предыдущих" создателей. Надеюсь перевод хоть они делали сами. |
|
Создано: 15 ноября 2006 07:20 · Личное сообщение · #10 FrEeDaY круто ты придумал - спрашивать мои исходники у Z0oMiK-а примерно так: invoke GetDlgItemTextA, _hwnd, IDC_EDIT1, addr _username, 5
_huy - эта та шняга что получается после _time одно маленькое отличие от твоего кейгена - мои серийники работают даже через два дня после создания, а в твоем кейгене - нет. ну я думаю ты сам в курсе почему |
|
Создано: 15 ноября 2006 11:06 · Личное сообщение · #11 |
|
Создано: 15 ноября 2006 13:41 · Поправил: FrEeDaY · Личное сообщение · #12 Nitrogen В курсе, вот только помню в свой кейген я отнимал 2 дня... и поидее ключ должен работать сегодня и завтра... function CodeGen(code: Integer):Integer; var x: integer; pDTime: _FILETIME; label lb; begin GetSystemTimeAsFileTime(pDTime); asm push ebx push esi mov ecx, 989680h mov eax, pDTime.dwHighDateTime adc eax, 0FE624E21h xor edx, edx div ecx mov ebx, eax mov eax, pDTime.dwLowDateTime add eax, 2AC18000h div ecx mov edx,ebx mov ecx, eax mov eax, 0C22E4507h imul ecx add edx, ecx sar edx, 10h mov ecx, edx shr ecx, 1Fh add ecx, edx sub ecx, 2 <-- вот вроде та двойка... mov ax, cx shl eax, 16 mov ax, cx xor ecx, ecx mov edx, code lb: mov esi, edx shl esi, cl imul esi, ecx xor eax, esi and eax, 7FFFFFFFh add ecx, 3 cmp ecx, 27 jle lb mov x, eax pop esi pop ebx end; CodeGen := x; end; Строго не судите, возможно можно было половину из этого выкинуть, но вот только обломно было разбираться что именно... Soft_Ice Каждую игрушку будешь распаковывать и восстанавливать?? Тем более кейген всеже как ни крути самый лучший вариант в крякинге... |
|
Создано: 16 ноября 2006 00:52 · Личное сообщение · #13 |
|
Создано: 16 ноября 2006 00:58 · Личное сообщение · #14 |
|
Создано: 16 ноября 2006 01:25 · Личное сообщение · #15 |
|
Создано: 16 ноября 2006 02:07 · Поправил: PE_Kill · Личное сообщение · #16 |
|
Создано: 16 ноября 2006 02:31 · Личное сообщение · #17 |
|
Создано: 16 ноября 2006 02:36 · Личное сообщение · #18 |
|
Создано: 25 июля 2007 13:32 · Личное сообщение · #19 |
|
Создано: 01 марта 2009 15:42 · Личное сообщение · #20 Все игрушки от NevoSoft ломаются без каких либо кряков и кейгенов! 1)В старых игрушках: Запускаем игру, сворачиваем, заходим в дирикторию игры обычно C:\Program Files\Игры от NevoSoft\game name\game и перейминовиваем скрытую dll библиотеку smssrv~1.dll(Это и есть чистый ехе-шник без каких либо защит) в ехе. Запускаем его и наслаждаемся полной версией игры 2) Игрушки с новой защитой: Точно также только в дириктории игры C:\Игры от NevoSoft\game name\game будет *tmp вместо dll |
|
Создано: 01 марта 2009 16:04 · Личное сообщение · #21 |
|
Создано: 01 марта 2009 16:20 · Личное сообщение · #22 |
|
Создано: 01 марта 2009 16:39 · Личное сообщение · #23 |
|
Создано: 01 марта 2009 16:40 · Поправил: SemDJ · Личное сообщение · #24 |
|
Создано: 01 марта 2009 16:44 · Личное сообщение · #25 |
|
Создано: 01 марта 2009 16:56 · Личное сообщение · #26 |
|
Создано: 01 марта 2009 18:51 · Личное сообщение · #27 Isaev пишет: а где кейген то? так ты посмотри на дату поста его. Там кейген был полностью аналогичным Nitrogen'a, да и кейгенить-то там нечего было особо, несколько строк весь алго. Уже защита давно другая там, впрочем чел из группы моей уж давно делал кейген для защиты с SMS на 41.... ----- Программист SkyNet |
|
Создано: 01 марта 2009 23:15 · Личное сообщение · #28 |
eXeL@B —› Основной форум —› Создание кейгена к продуктам Невософт |
Эта тема закрыта. Ответы больше не принимаются. |