_ __________ _ ______ __________ _ __________ __/ _______________ _ __/ ___ \/ ________ _ ---------. _ ___ _/__/ _____) __________ \ / \zACK | / ___/_________ __/ _______/_______\/ \ | / / / /_____ / \___ / .......... ........... /______ / __ _ /_________/ /___.::::::::::: ::::::::::::: /_________/ /_________/ __::::::_____ :::' | ::::::...... .:::' : · T · E · A · M · 5 · 3 · `:::::::::::: ..:::::::: | ::: ::: `--------------------------->> >> >> .:::::: ::: .:::::: ::: TUTORiALS.PACK.NUMBER.ELEVEN ::::::: ::: ::::::: ::: ::::::::::::: ::::::::::::: `::::::::::' `::::::::::' Советы по взлому различных простых защит. Авторы.: CrackZ, Cruehead, CbD, TORN@DO, Predator NLS Перевод: всего-навсего один NightCat Ограниченное количество запусков (CrackZ) ----------------------------------------- Итак, мы ограниченны в количестве запусков (например 25 раз) программы перед тем, как она сама себя заблокирует. Давайте запустим прогу и запомним то сообщение, которое вежливо информирует нас о том, сколько запусков мы уже произвели. Запустим программу пару раз... просто так, чтобы чувство использования осталось. =) Дзенский аспект состоит в том, что вам необходимо почувствовать как это может быть исполнено в программе (19h = 25 dec). Можно поискать с HEX-редактором что-то похожее - но всё равно, самый лучший инструмент в данной ситуации - дизассемблер. Вы должны с лёгкость найти что-то подобное во W32DASM: CMP BYTE PTR [004628D4],00 <-- проверка первого запуска JZ 0045B7D9 <-- прыгаем на первый запуск CMP DWORD PTR [004628D8],1A <-- проверка кол-ва запусков (1A = 26dec) JGE 0045B72A <-- прыгаем на плохое сообщение Как вы видите в 004628D4 проверяется, первый ли это запуск, а 004628D8 показывает сколько запусков было сделано. Вы должны видеть массу вариантов обхода данной проверки, например можно увеличить 1A (26) на, например, FF (255), это довольно слабо, но может помочь вам полностью испытать программу. А можно занопить JGE 0045B72A, что позволит наплевать на истечение срока, еще можно поправить JZ 0045B7D9 на JMP. Так же некоторые программы могут увеличивать на 1 счётчик спрятанный в самом файле программы, или DLL). ----------------------------------------- 30-тидневное ограничение (Cruehead) ----------------------------------- Множество программ работают в течение фиксированного периода времени (обычно 30 дней = 1 месяц), но в течение этого периода программа полностью функциональна. В данном случаем вам нужно найти где количество прошедших дней сравнивается с "30" и модифицировать. Выглядеть это может вот так: mov ecx,1E ; записываем 1E hex (30 dec) в ecx mov eax,[esp+10] ; записываем кол-во прошедших дней в eax cmp eax,ecx ; сравниваем eax с ecx (30) jl ... ; если eax < 30, тогда программа работает дальше. Самый простой способ это обойти - заменить "mov eax,[esp+10]" на "mov eax,1" или что-то такое. Тогда программа всегда будет думать, что испытательный период еще не закончен. А еще можно сменить джамп на противоположный. ----------------------------------- "Испытательный период окончен" (CbD) ------------------------------------ Если программа говорит вам, что испытательный срок окончен, то вам может быть полезно покопаться в реестре в ветке CURRENT_USER и LOCAL_MACHINE. Посмотрите, быть может там есть записи вашей программы. Тогда вам скорее всего нужно лишь удалить эти записи и ваш испытательный срок продолжится... ------------------------------------ Проверка от Ленивых Программистов (CrackZ) ------------------------------------------ Итак, ваша программа работает 30 дней, так давайте подумаем, как ленивый программист мог бы это проверить и как это может выглядеть в асме, возможно вот так: CMP DWORD PTR register, 1E <-- 1E - это, конечно, 30 дней JLE/JGE address <-- скорее всего такие джампы Теперь подумаем опкодами =), 83 - это CMP, всего пара опций регистра, затем 1E - 30 дней, после 7E (JLE) и 7D (JGE) - это джамп. Давайте-ка возьмём HEX-редактор и поищем это. Вы можете наткнуться на это несколько раз. Но вы должны чувствовать код, должны сразу увидеть, он ли отвечает за проверку. Мне даже проверять не нужно. Давайте изменим JLE (7E 33), который мы нашли, на безусловный переход (EB 33), я уверен, что программа больше никогда не будет вас беспокоить сообщениями о завершении триала (но всегда проверяйте - на всякий случай). ------------------------------------------ Ограничение по дням (используем W32DASM) (TORN@DO) -------------------------------------------------- Выставьте системную дату вперёд, чтобы программа посчитала будто триальный срок вышел. Если есть сообщение об истекшем триале, то запишите/запомните его и запустите W32DASM. Если при старте сообщение не вылазит, то уж попытайтесь его как-нибудь спровоцировать. =) Теперь ищите ваше сообщение в "string references". Ну а дальше всё просто. :) -------------------------------------------------- Фальшивые-Demo (CbD) -------------------- Хорошим началом для исследования фальшивых-демо версий программ будет MessageBox[A] или DialogBox[A], которые чаще всего используются для вызова окошек с сообщением о том, что какай-то функция в демо-версии не доступна. Поищите в дебаггере или дизассемблере сообщение, которое вам показывается. А там уже ищите CALL, который вам нужно обойти. -------------------- Splash Screens(NAG) (Predator NLS) ---------------------------------- Самый быстрый способ "выключения" NAG-окон - использование Hex-редактора и ваших глаз. Запустите программу и подождите пока появится NAG. Запомните заголовок окна и первые слова сообщения. Откройте свой EXE (или DLL) и ищите те самые слова. Если вы их нашли, то скрольте вверх в поисках 4 байт: FF FF FF 80... и если вы их нашли, то замените 80h на 90h. После этого программа больше никогда не покажет вам этот NAG. Иногда на НАГе нужно нажать кнопку, чтобы перейти к программе, тогда нужно использовать отладчик! ----------------------------------