ACProtect
ACProtect (известен также, как UltraProtect или Anti-Crack Protection) - протектор, исполняемых файлов Windows (exe,dll), использующий общие алгоритмы кодирования ключей RSA для создания и проверки регистрационных ключей,с внедрением защиты против дампа и распаковки.Программа имеет несколько антиотладочных приёмов.
Содержание |
Что можно сделать с помощью ACProtect
- Защитить программу от взлома
- Затруднить взломщику отладку и анализ Вашего кода
- Использовать управление лицензированием на базе RSA-1024 без дополнительного программирования
- Сделать триальную версию программы и дать пользователю возможность использовать программу определенное количество дней или запусков
История развития
Начало развития данного протектора началось в 2000-2001 годах. Именно тогда вышла первая тестовая версия данного протектора, имеющая внутренюю версию 0.4 test. По причине неизвестности данного протектора эти "начальные" версии были незаметны и найти их в сети в данное время практически невозможно. Первую популярность протектор получил начиная с версии 1.03 release (тогда он назывался UltraProtect). Наибольшую же популярность протектор получил начиная с версии 1.09 (именно тогда он начал называться ACProtect- от слова Anti-Crack Protection). Протектор выпускается в виде двух изданий: Standard Edition и Professional Edition.
Главные функции
- RSA-1024 - c системой ключей RSA, взломщик программной защиты не может написать Keygen для вашей программы без главного ключа RSA, который имеется только у автора .Так же Вы можете блокировать определённый участок кода,который не будет расшифрован без наличия валидного ключевого файла (key.dat).
- Polymorph (полиморф) - код защищающий Вашу программу постоянно видоизменяется для дополнительной защиты Вашего приложения.
- Embedded cryptor (внедрённый криптор) - Вы можете определить место в вашем приложении для внедрения внутреннего криптора. С внедренным криптором, взломщик не сможет распаковать Вашу программу, даже если он знает оригинальную точку входа (OEP) и правильно восстановит таблицу импорта.
- Mutual Communication (Взаимная коммуникация) - Система АПИ взаимодействующая между приложением и загрузчиком.Загрузчик может вызвать часть экспортной функции приложения.
- Anti patch/loader (анти патч/лоадер) - Защищает ваши файлы против внесения исправлений/модификаций и дизассемблирования.
- Anti-Soft Ice - Обнаружение Numega Softice и Frogsice.
- Анти-отладка,дамп,трейсинг - Обнаруживает такие крякерские утилиты как: W32Dasm, SoftIce, TRW 2000, Turbo Debugger, Sourcer, Filemon, ExeSpy, ResSpy, Regmon и т.д.
- Возможность привязки ключа к компьютеру.
- Ограничение работы Вашего приложения по: числу запусков, количеству дней и дате истечения.
Антиотладка
Вызов АПИ, проверка байта CC (Int 3-установленный брейкпоинт), очистка hardware breakpoint, через обработчик исключений, поиск программ по названию и классу окна.Вот и вся антиотладка.Не сказать, что очень мощная, но всё же она есть.Стоит добавить, что АПИ вызываемые протектором следующие:
IsDebuggerPresent
API-функция IsDebuggerPresent показывает, находится ли процесс, который её вызывает, в контексте отладчика, то есть отлаживается ли он.Эта функция экспортируется из KERNEL32.dll, и если программа находится под отладкой, то возвращаемое значение равно единице, а если нет, то нулю.
CreateToolhelp32SnapShot
Что представляет из себя функция CreateToolhelp32SnapShot? Это не что иное,как моментальный снимок процессов.Т.е. ACProtect делает снимок всех запущенных в настоящее время процессов, далее функцией Process32First считывает название первого процесса (именно только первого!), ну и функцией Process32Next последующие процессы. Далее идёт проверка каждого процесса с названием "вражеских" утилит. Далее по Вашему усмотрению либо выход из отлаживаемой программы, либо предупреждающее окно.
FindWindowA
Находит pодительское окно веpхнего уpовня с совпадающими ClassName и WindowName. Не осуществляет поиск дочеpних окон
User Debug Register as Decode Register
Суть этой опции заключается в том, что защищаемое приложение использует так называемые отладочные регистры для самораспаковки (а точнее для расшифровки). Так вот для того, чтобы программа нормально распаковалась протектор ставит аппаратные брекпоинты (hardware breakpoint),затем останавливается на первом брекпоинте и расшифровывает часть программы.Потом запускается и тормозится на следующем брекпоинте и так до того момента пока программа не будет полностью распакована в памяти.Если программа была защищена с использованием этого механизма защиты, то для использования аппаратных брекпоинтов придётся немного помучиться.
Антидамп
Защита Оригинальной точки входа (OEP obfuscation)
С OEP крадутся инструкции,которые перед запуском программы отрабатываются в коде протектора.Вообще здесь у ACProtect возможности огромные.Крадёт он байтов много, включая даже инструкцию Call
Защита таблицы импорта (API Random Redirection)
Протектор вставляет переходники между вызовами WinAPI.Эти переходники примитивны и восстановить их не составляет никакого труда.
Пример импорта не запакованной программы:
............................................... 004011F4 - FF25 BC714500 JMP DWORD PTR DS:[<&kernel32.CloseHandle>; kernel32.CloseHandle 004011FA 8BC0 MOV EAX,EAX 004011FC - FF25 B8714500 JMP DWORD PTR DS:[<&kernel32.CreateFileA>; kernel32.CreateFileA 00401202 8BC0 MOV EAX,EAX 00401204 - FF25 B4714500 JMP DWORD PTR DS:[<&kernel32.GetFileType>; kernel32.GetFileType 0040120A 8BC0 MOV EAX,EAX 0040120C - FF25 B0714500 JMP DWORD PTR DS:[<&kernel32.GetFileSize>; kernel32.GetFileSize 00401212 8BC0 MOV EAX,EAX 00401214 - FF25 AC714500 JMP DWORD PTR DS:[<&kernel32.GetStdHandl>; kernel32.GetStdHandle 0040121A 8BC0 MOV EAX,EAX 0040121C - FF25 A8714500 JMP DWORD PTR DS:[<&kernel32.RaiseExcept>; kernel32.RaiseException ...............................................
Пример импорта программы после обработки ACProtect:
............................................... 00468225 68 C7170C7C PUSH 7C0C17C7 0046822A 813424 208C8C00 XOR DWORD PTR SS:[ESP],8C8C20 00468231 C3 RETN 00468232 68 0B03A97E PUSH 7EA9030B 00468237 813424 D0129100 XOR DWORD PTR SS:[ESP],9112D0 0046823E C3 RETN 0046823F 68 5070BB7E PUSH 7EBB7050 00468244 813424 58B98C00 XOR DWORD PTR SS:[ESP],8CB958 0046824B C3 RETN 0046824C 68 2DEACB00 PUSH 0CBEA2D 00468251 813424 60A28C00 XOR DWORD PTR SS:[ESP],8CA260 00468258 C3 RETN ...............................................
Code Replace
Для того, чтобы защитить Ваше приложение от дампа программами типа PE Tools или Lord PE, ACProtect предлагает Вам опцию Code Replace.Суть данной защиты состоит в том,что протектор перед запаковкой оригинальной программы анализирует код и выдирает некоторые команды.На их месте он ставит Call XXXXXXXX,который направляет нас в код протектора (а точнее в секцию perplex),там уже всё это разбавляется полиморфом и смешивается с фековыми байтами. Пример Оригинального кода:
00404214 55 PUSH EBP 00404215 8BEC MOV EBP,ESP 00404217 53 PUSH EBX 00404218 56 PUSH ESI 00404219 57 PUSH EDI 0040421A A1 3C664500 MOV EAX,DWORD PTR DS:[45663C] 0040421F 85C0 TEST EAX,EAX 00404221 74 4B JE SHORT 0040426E 00404223 8B30 MOV ESI,DWORD PTR DS:[EAX] 00404225 33DB XOR EBX,EBX 00404227 8B78 04 MOV EDI,DWORD PTR DS:[EAX+4] 0040422A 33D2 XOR EDX,EDX 0040422C 55 PUSH EBP 0040422D 68 5A424000 PUSH 0040425A 00404232 64:FF32 PUSH DWORD PTR FS:[EDX] 00404235 64:8922 MOV DWORD PTR FS:[EDX],ESP 00404238 3BF3 CMP ESI,EBX
Пример Code Replace:
00404214 55 PUSH EBP 00404215 8BEC MOV EBP,ESP 00404217 53 PUSH EBX 00404218 56 PUSH ESI 00404219 57 PUSH EDI 0040421A A1 3C664500 MOV EAX,DWORD PTR DS:[45663C] 0040421F 85C0 TEST EAX,EAX 00404221 74 4B JE SHORT 0040426E 00404223 8B30 MOV ESI,DWORD PTR DS:[EAX] 00404225 E8 E2510600 CALL 0046940C 0040422A 33D2 XOR EDX,EDX 0040422C 55 PUSH EBP 0040422D 68 5A424000 PUSH 0040425A 00404232 64:FF32 PUSH DWORD PTR FS:[EDX] 00404235 64:8922 MOV DWORD PTR FS:[EDX],ESP 00404238 3BF3 CMP ESI,EBX
Другие опции
- Integrity Check
Если Вы надумали сделать инлайн патч,то при установленной опции защиты под названием Integrity Check,Вы можете столкнуться с определёнными проблемами.Дело в том,что протектор перед запуском проверит свой код на наличие изменений (контрольная сумма СRC) и если найдёт их,то запишет по этому адресу кучу фейкового кода.Естественно при запуске приложения Вы получите ошибку.
- Strip .reloc section
Протектор перед защитой приложения вырезает не нужные для exe файла,так называемые релоки.Релоки нужны только для правильной работы dll,поэтому для исполняемых файлов это просто мусор.
- Embedded Protector
При выборе этой опции в ваше приложение при защите протектор добавляет свой метаморфный код.Как это работает:Вы перед защитой приложения в своей программе отмечаете участок кода который хотите защитить.Например для Delphi:
procedure TForm1.Button1Click(Sender: TObject); begin ваш код {$I ..\..\include\protect_begin.inc} //маркер начала защищаемого кода ваш код {$I ..\..\include\protect_end.inc} //маркер окончания защищаемого кода end;
После этого при компиляции приложения протектор оставит себе место для своего кода. Данная технология защиты весьма затрудняет анализ кода и после распаковки программы Вам нужно восстанавливать исходный код.
- Dynamic En\Decrypt
Аналог Embedded Protector, только производит расшифровку кода "на лету" и не требует восставновления в распакованной программе.
- RSA Key Lock Code
Помечаем в своей программе кусок кода, и он будет работать только при наличии валидного ключевого файла XXXXX.dat.Данная опция протектора даёт Вам гарантию того, что для полной распаковки программы придётся купить как минимум одну копию программы. Выглядит это примерно так (Delphi):
procedure TForm1.Button2Click(Sender: TObject); var KeyCorrect:boolean; //переменная begin KeyCorrect:=false; {$I ..\..\include\regonly_begin.inc} //начало RSA lock code KeyCorrect:=true; {$I ..\..\include\regonly_end.inc} //конец RSA lock code if keycorrect=true then //ключ верный,идём дальше else showmessage('Invalid user :-<'); //неверный,показываем сообщение end;
- Use RSA Registration Keys for key license
ACProtect даёт возможность нам сгенерировать ключевой файл под определённое имя.При желание и включённой опции Use ACProtect Defined GetMachineID.... (только в версии Professional) мы можем сгенерировать ключ не только под имя,но и под "железки" компьютера.Также протектор даёт нам возможность указать "забаненные" ключи и сделать кейген для программы.
- Привязка программы к железу компьютера
- Защита сервисного приложения
- API Call into Protection codes
Позволяет выполнять WinAPI в защищённом коде. Не намного усложняет распаковку и анализ программы. Только в версии Professional
- Trial Evaluation
ACProtect даёт возможность "затриалить" Вашу программу по следующим параметрам:
- По числу запусков
- По количеству дней
- По истечению определённой даты
Список "враждебных" утилит для ACProtect
ACProtect не даёт отлаживать программу при обнаружении следующих инструментов использующихся при реверсинге
EXESPY WXR95 REGMON REGMONEX RESSPY REGSNAP MEMSPY DEBUGVIEW PROCDUMP32 FROGSICE MEMORYMONITOR OllyDbg TRW2000 FILE MONITOR WINDOW DETECTIVE MEMORY DOCTOR ADVANCED REGISTRY TRACER -=CHINA CRACKING GROUP=- MEMORY EDITOR SMUWINSPECTOR MEMORY DUMPER NUMEGA SOFTICE LOADER URSOFT W32DASM WIBBLEWOBBLE SICE NTICE NTICE7871 NTICED052 TRWDEBUG TRW TRW2000 SUPERBPM ICEDUMP REGMON FILEMON REGVXD FILEVXD VKEYPROD BW2K SIWDEBUG
Как узнать, что программа защищена ACProtect?
Для того, чтобы узнать, что программа защищена именно протектором ACProtect существует два варианта:
- Использовать специальные утилиты:
- PEiD
- Detect It Easy
- Exeinfo PE
- Ручной способ:
- Посмотреть секции файла. Если программа защищена этим протектором, то помимо обычных секций (CODE, DATA, .idata, .reloc и т.д) Вы обнаружите секцию .perplex. Эту секцию добавляет только этот протектор
- Запустить программу в отладчике, поставить брейкпоинт на WinAPI CreateFileA и посмотреть не распаковывается ли при запуске файл perplex.dll
Пример:
0012FF60 005B9CAD /CALL to CreateFileA from ACProtec.005B9CA7 0012FF64 005B5457 |FileName = "C:\DOCUME~1\LOCALS~1\Temp\perplex.dll <-------------- 0012FF68 C0000000 |Access = GENERIC_READ|GENERIC_WRITE 0012FF6C 00000003 |ShareMode = FILE_SHARE_READ|FILE_SHARE_WRITE 0012FF70 00000000 |pSecurity = NULL 0012FF74 00000002 |Mode = CREATE_ALWAYS 0012FF78 00000020 |Attributes = ARCHIVE 0012FF7C 00000000 \hTemplateFile = NULL
Автоматические распаковщики
В настоящее время для данного протектора в природе общедоступно всего лишь два автораспаковщика:
- ACProtect Stripper (By Lunar_Dust) - для версии ACProtect 1.09
- ACKiller (By HoBleen) - для версий ACProtect 1.06-2.0
Что почитать?
Следующие статьи, возможно помогут Вам в изучении работы ACProtect
- Unpacking ACProtect1.09 (by haggar)
- UnPacking ACProtector 1.41 (by Sina_DiR)
- Unpacking ACProtect1.09 (by TallfaZ)
Знаете ли Вы, что...
- За всё время развития ACProtect сменил множество домашних страниц. На данный момент найти работающую домашнюю страницу протектора в интернете весьма затруднительно
- Сбросить триальный период в ACProtect можно без применения специальных утилит. Нужно всго лишь найти в корне диска, куда установлена операционная система, файл у которого расширение состоит из трёх абсолютно произвольных символов. Пример такого файла носит название - sgwtxz.ohl
- Протектор был создан китайскими разработчиками
- При сжатии файла протектор использует библиотеку сжатия Jcalg. Точно такую же, какую использует известный упаковщик PECompact