скрыть

скрыть

  Форум  

Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Google  
 

Исследование RegSnap v 2.8



Оформил: DeeCo
Автор: http://www.cracklab.narod.ru

Захотелось мне как-то поисследовать программку на VB :)
и напоролся я на эту вот вешь. Она умеет делать снапшоты регистра форточек и чего-то там ещё, вобщем неважно. Приступим...

Первым делом я поглядел на программку:
1) Огромный NAG при старте с некоторой задержкой при запуске;
2) Напоминательное окно с 3 батонами;
3) Проверка CRC (на изменение кода программы);
4) во-всю юзает (M)ada(F)u(C)ka(42).dll;

Начнём с конца, т.е. отключим проверку CRC:
- Любым HEX-редактором изменим пару байт в программе и запустим её:
мы увидим сообщение "Program corupted" (messagebox)
- Ставим бряк на messageboxA:
bpx MessageboxA
и опять запускаем прогу, при этом мы вывалимся где-то в системной библиотеке, а чтобы из неё выйти и опять попасть в модуль regsnap нужно нажать F12 4 раза, и когда мы это сделаем, то окажемся вот в этом месте:
:00406848 FF1588774100            Call dword ptr [00417788] <--вызов процедуры проверки CRC (в eax 0, если CRC нарушен и 1 - если всё ОК).
:0040684E A1F4494200              mov eax, dword ptr [004249F4]
:00406853 83C408                  add esp, 00000008
:00406856 3BC7                    cmp eax, edi <-- проверяем EAX
:00406858 7520                    jne 0040687A <-- ЕСЛИ всё ОК - прыгаем
:0040685A 6AFF                    push FFFFFFFF
:0040685C 57                      push edi
:00406862 E8DBDA0000              Call 00414342 <-- Вызов сообщения о нарушенном CRC
:00406867 33C0                    xor eax, eax <-- вот тут мы остановились
:00406869 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:0040686C 64890D00000000          mov dword ptr fs:[00000000], ecx
:00406873 5F                      pop edi
:00406874 5E                      pop esi
:00406875 5B                      pop ebx
:00406876 8BE5                    mov esp, ebp
:00406878 5D                      pop ebp
:00406879 C3                      ret
Как видите, по адресу 00406856 проверяют EAX, я предлягаю записать вместо этой команды mov eax,01 чтоюы для последующих проверок, если такие будут, всё было нормально, а вместо команды jne 0040687A вписать jmp 0040687A, чтобы в любом случае перепрыгивать ненужное окно и процедуру закрытия программы. ВНИМАНИЕ!!! команда mov eax,01 сожрёт 5 байт, в то время как cmp eax, edi всего 2 байта, поэтому будет использованы байты, выделенные под процедуру вывода сообщения об ошибке и процедуры закрытия программы, всё равно ведь мы эту процедуру перепрыгиваем и больше никогда использовать не будем!!! Итак, если вы всё сделали как я сказал, то больше программа не будет ругаться на то, что её кто-то изменял.
И ещё, в программе реализован полиморфизм, т.е. при обнаружении CRC ошибки, она сама затирает некоторые куски кода другими опкодами, что делает все краки нерабочими, поэтому при внесении изменений, рекомендую делать эти изменения в абсолютно "чистой" версии regsnap.exe.

2)Лирическое отступление:
Программа записывает в реестре в ключе:
HKEY_CURRENT_USER\Software\Vitas\regsnap\main
в параметре количество дней оставшегося триала. Для начала уберём Огромный NAG-screen при запуске:
- ставим бряк на CreateWindowExA
- запускаем прогу и почти сразу вываливаемся в айсе
- Жмём F12 ровно 12 раз (какое совпадение :) пока не вернёмся в модуль regsnap.exe и оказываемся тут:
:0040687A E893DD0000              Call 00414612 <-- проверяет наличие OLE
:0040687F 85C0                    test eax, eax
:00406881 751D                    jne 004068A0 <-- если нет таких - прыгаем на выход из проги
...............
...Поскипано...
...............
:004068BA E841DD0000              Call 00414600 <-- проверяет необходимость NAG'a
:004068BF 397D90                  cmp dword ptr [ebp-70], edi
:004068C2 740C                    je 004068D0 <-- если не надо - перепрыгиваем его
:004068C4 397DE8                  cmp dword ptr [ebp-18], edi
:004068C7 7507                    jne 004068D0 <-- то же самое
:004068C9 B801000000              mov eax, 00000001
:004068CE EB02                    jmp 004068D2 <-- а если надо - то прыгаем на наг
Здесь предлагаю вместо
je 004068D0
написать
jmp 004068D0
чтобы сразу перепрыгивать NAG и он нас больше не мучал :)
Осталось разобраться с напоминающим окном "Trial Period"...
3) после
:004068C2 jmp 004068D0
скролим то тех пор, пока не появится окно напоминания, это произойдёт в этом месте:
:00406D5D E856D20000              Call 00413FB8 <-- вызываем напоминающее окно
:00406D62 83F801                  cmp eax, 00000001 <-- смотрим: какую кнопку ты нажал
:00406D65 7449                    je 00406DB0 <-- если это кнопка "Try" - прыгаем
здесь я поменял Call 00413FB8 на jmp 00406DB0, т.е. без вызова окна напоминания дал понять программе, что нажата кнопка "Try". Теперь больше не будет этого окна-напоминания и при старте будет сразу открываться главное окно!
Последние штрихи...
4) Это необязательная, но самая приятная часть исследования - уберём все признаки незарегистрированности, т.е. надписи типа "This soft UnRgIsTred"
Я зашёл в WDasm'e в String Reference и нашёл там строку "Registred to %S" кликнул на неё и оказался тут:
:00404616 6818E34100              push 0041E318
:0040461B 56                      push esi
поднялся чуть выше , вот сюда:
* Referenced by a CALL at Addresses:
|:0040148F   , :004051DD   , :004113F7   
|
:004045D0 A188044200              mov eax, dword ptr [00420488] 
:004045D5 81EC00010000            sub esp, 00000100
:004045DB 85C0                    test eax, eax <-- проверяеи зарегистрированны ли мы 
:004045DD 56                      push esi
:004045DE 7452                    je 00404632 <-- если нет - прыгаем
:004045E0 8BB42408010000          mov esi, dword ptr [esp+00000108]
:004045E7 85F6                    test esi, esi
:004045E9 743A                    je 00404625 <-- если нет - прыгаем
:004045EB 83C01D                  add eax, 0000001D
здесь я вместо mov eax, dword ptr [00420488] написал ret ( с тем соображением, что программа выйдет из процедуры присваивания имени ни с чем и будет надпись "Registred to: " и всё), но оказалось ещё круче: Появилась надпись "Registred to: Vitas Ramanchauskas" а в окне "О программе" как я и предполагал Вместо надписи "Registred to" ничего нет.
//Можно написать вместо ret что-то типа mov eax,eax
//тогда адрес строки с именем будет случайный, а т.к. программа проверяет
//имя владельца лицензии после каждой операции, то наше имя будет меняться
//каждый раз, причем имя будет иметь вид "№;%№;%№;%"№;%%::ВАПп" Прикольно!!!
Осталось ещё убрать надпись "Trial" внизу программы: ищем эту надпись в HEX-редакторе и затираем её пробелами или например "fuck".
ВсЁ!

Ну и как всегда, готовый Крак:
-----------вырезать тут-----------
RegSnap v 2.8 Crack by vallkor//PTDS

REmoves All Nag's and limits!!!
regsnap.exe
00006856: 3B B8
00006857: C7 01
00006858: 75 00
00006859: 20 00
0000685A: 6A 00
0000685B: FF EB
0000685C: 57 1D
000068C2: 74 EB
00006D5D: E8 EB
00006D5E: 56 51
000045D0: A1 C3
0001E4B8: 54 46
0001E4B9: 72 75
0001E4BA: 69 63
0001E4BB: 61 6B
0001E4BC: 6C 20
-----------вырезать тут------------
Как всегда, с вами беседовал
vallkor //PTDS
e-mail: vallkor@chat.ru
page: http://vallkor.chat.ru






Copyright © 2004-2016 "Delphi Sources". Delphi World FAQ




Группа ВКонтакте   Ссылка на Twitter   Группа на Facebook