Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Symantec pcAnywhere v9.0.0 build 133. Защита в DLL.

Обсудить статью на форуме

Хорошая подборка видеоуроков, инструментов крэкера, книг и статей - здесь.

Эта программа, которой я пользуюсь уже давно, предназначена для связи, обмена файлами и удаленного управления между компьютерами практически по любому соединению и протоколу. Скопировать pcAnywhere можно на сайте фирмы Symantec.

Программа является trial-версией, работает только 30 дней, окон регистрации у нее нет. После окончания 30-ти дневного периода работы все попытки вернуть работоспособность программы с помощью перевода системного времени заканчиваются неудачей.

Итак, перед нами стоит задача избавиться от 30-ти дневного ограничения времени , и попутно убрать диалоговое окно, возникающее при запусмке программы, и сообщающее о том, что это trial-версия.

Открываем файл Winaw32.exe в WinDASM. Попытки найти что-нибудь, имеющее отношение к проверкам времени, ни к чему ни приведут. Тогда давайте нажмем на кнопочку "Imported Functions" (импортируемые функции), и посмотрим появившийся список. Лично меня очень заинтриговала следующая функция: TimeBombCheck(). Название навевает интересные мысли… Дважды нажав на эту надпись, мы попадем в то место, откуда эта функция вызывается:

:00406112 FF1524814500		Call dword ptr [00458124]
 :00406118 85C0			test eax, eax
 :0040611A 7509			jne 00406125
 :0040611C 5F			pop edi
 :0040611D 5E			pop esi
 :0040611E 81C498000000		add esp, 00000098
 :00406124 C3			ret

Теперь загрузим программу в SoftICE, поставим контрольную точку на строчку, где вызывается функция (bpx 00406112), и запустим программу. Попав в SoftICE, щелкнем мышью на строчку ниже (test eax,eax), и нажмем F7. Мы увидим уже знакомое нам окно, и, после нажатия в нем кнопки, возвращаемся в SoftICE. Обратите внимание на содержимое регистра ЕАХ – если срок работы программы еще не вышел, оно отлично от нуля. Казалось бы чего проще – поменять JNE на JMP – и все. Попробуйте…

Программа запустится, да вот только при попытке задействовать какой-нибудь вид связи, если она уже у Вас просроченная, выведет окно с надписью, что время кончилось, и программа завершиться. То есть проверок времени в модуле несколько.

Правильнее будет посмотреть в Awcomm32.dll, и заставить эту функцию всегда возвращать в регистре ЕАХ единицу. К тому-же в этой же процедуре находятся и вызовы окон об окончании периода работы и т.д., от которых тоже было бы неплохо избавиться – лично мне они очень мешают.

Опять берем WinDASM, и загружаем в него Awcomm32.dll. Находим эту функцию:

Exported fn(): _TimeBombCheck@4 - Ord:00CCh
 :67EA3800 81EC08020000		sub esp, 00000208
 :67EA3806 53			push ebx
 :67EA3807 55			push ebp
 :67EA3808 56			push esi
 :67EA3809 57			push edi
  ...	  ...			...

Протрассировав ее выполнение, я обратил внимание на следующий участок:

* Reference To: ISCUSTOM.?TimebombVer@CTBombCache@@QAEXAAG0@Z, Ord:0011h
 				|
 :67EA3A42 FF15E400EB67		Call dword ptr [67EB00E4]
 :67EA3A48 33C0			xor eax, eax
 :67EA3A4A 8B4C2434		mov ecx, dword ptr [esp+34]
 :67EA3A4E 8B542418		mov edx, dword ptr [esp+18]
 :67EA3A52 66A1EE8EEB67		mov ax, word ptr [67EB8EEE]
 :67EA3A58 81E1FFFF0000		and ecx, 0000FFFF
 :67EA3A5E 51			push ecx
 :67EA3A5F 81E2FFFF0000		and edx, 0000FFFF
 :67EA3A65 33C9			xor ecx, ecx
 :67EA3A67 52			push edx
 :67EA3A68 668B0DEC8EEB67 	mov cx, word ptr [67EB8EEC]
 :67EA3A6F 50			push eax
 :67EA3A70 51			push ecx
 :67EA3A71 E82AFCFFFF		call 67EA36A0
 :67EA3A76 83F8FF		cmp eax, FFFFFFFF
 :67EA3A79 0F8492010000		je 67EA3C11
 :67EA3A7F 85C0			test eax, eax
 :67EA3A81 745A			je 67EA3ADD
 :67EA3A83 83F801		cmp eax, 00000001
 :67EA3A86 7427			je 67EA3AAF

В выделенной части видно, что содержимое регистра ЕАХ сравнивается с нулем и единицей. Можете отследить выполнение проверок, начиная с этого места, и изменяя значение регистра ЕАХ – и Вы убедитесь, что, если содержимое регистра ЕАХ равно единице, то программа не только прекрасно работает, но и перестает показывать мешающее окно при запуске.

Почему именно это место? Если внимательно просмотреть выполнение этой функции, то мы увидим, что в ней идет двойная проверка: сначала делается проверка "легальности" и времени, и, если программа "зарегистрированна", то значение ЕАХ будет равно единице, и, после сравнения в вышеуказанном месте, происходит простой переход на конец проверки. Если же это trial-программа, то в регистре ЕАХ будет ноль, и происходит переход на вторую ветвь, в которой осуществляется еще одна проверка времени, и либо закрытие программы, либо продолжение выполнения.

Итак, наши изменения сводятся к следующему:

test eax,eax
 je 67EA3ADD
заменяем на
xor eax,eax	- обнуление регистра ЕАХ (на всякий случай)
 mov al,01	- запись в ЕАХ единицы (используется регистр AL для соблюдения
 		  количества байт)

Изменяем и запускаем… Все прекрасно работает, никаких мешающих окон и временных ограничений.

Это не первая версия pcAnywhere, которую я исследую. Честно говоря, я думал, что Symantec придумает что-нибудь посерьезнее (взять хотя бы их TalkWorks – солидная защита). А здесь на лицо элементарные ошибки: нельзя защиту помещать в DLL – тогла ее отключить намного проще, чем защиту, включенную в сам исполняемый файл, потому что явно виден результат работы вызываемой функции проверки.

Кстати, снятие временных ограничений предыдущих версий программы производится точно так же – даже название функции точно такое же. Не проще ли было сделать эту программу просто бесплатной, чем вписывать в нее "бумажного тигра"? (комментарий Bad_guy: Нет, не проще. Ведь как ответил мне один автор взломанной мной программы: "я не собираюсь менять алгоритм, потому что все мои пользователи являются законопослушными людьми..." - пускай верят в это пока мы ломаем их долбаные программы в сотни раз быстрее, чем они их пишут :-/ )



Обсуждение статьи: Symantec pcAnywhere v9.0.0 build 133. Защита в DLL. >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS