ACProtect

eXeL@B DVD

Материал из Справочник исследователя программ

Перейти к: навигация, поиск

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.

Главные функции

  1. RSA-1024 - c системой ключей RSA, взломщик программной защиты не может написать Keygen для вашей программы без главного ключа RSA, который имеется только у автора .Так же Вы можете блокировать определённый участок кода,который не будет расшифрован без наличия валидного ключевого файла (key.dat).
  2. Polymorph (полиморф) - код защищающий Вашу программу постоянно видоизменяется для дополнительной защиты Вашего приложения.
  3. Embedded cryptor (внедрённый криптор) - Вы можете определить место в вашем приложении для внедрения внутреннего криптора. С внедренным криптором, взломщик не сможет распаковать Вашу программу, даже если он знает оригинальную точку входа (OEP) и правильно восстановит таблицу импорта.
  4. Mutual Communication (Взаимная коммуникация) - Система АПИ взаимодействующая между приложением и загрузчиком.Загрузчик может вызвать часть экспортной функции приложения.
  5. Anti patch/loader (анти патч/лоадер) - Защищает ваши файлы против внесения исправлений/модификаций и дизассемблирования.
  6. Anti-Soft Ice - Обнаружение Numega Softice и Frogsice.
  7. Анти-отладка,дамп,трейсинг - Обнаруживает такие крякерские утилиты как: W32Dasm, SoftIce, TRW 2000, Turbo Debugger, Sourcer, Filemon, ExeSpy, ResSpy, Regmon и т.д.
  8. Возможность привязки ключа к компьютеру.
  9. Ограничение работы Вашего приложения по: числу запусков, количеству дней и дате истечения.

Антиотладка

Вызов АПИ, проверка байта 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 даёт возможность "затриалить" Вашу программу по следующим параметрам:

  1. По числу запусков
  2. По количеству дней
  3. По истечению определённой даты

Список "враждебных" утилит для 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 существует два варианта:

  • Использовать специальные утилиты:
  1. PEiD
  2. Detect It Easy
  3. Exeinfo PE
  • Ручной способ:
  1. Посмотреть секции файла. Если программа защищена этим протектором, то помимо обычных секций (CODE, DATA, .idata, .reloc и т.д) Вы обнаружите секцию .perplex. Эту секцию добавляет только этот протектор
  2. Запустить программу в отладчике, поставить брейкпоинт на 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

Автоматические распаковщики

В настоящее время для данного протектора в природе общедоступно всего лишь два автораспаковщика:

  1. ACProtect Stripper (By Lunar_Dust) - для версии ACProtect 1.09
  2. ACKiller (By HoBleen) - для версий ACProtect 1.06-2.0

Что почитать?

Следующие статьи, возможно помогут Вам в изучении работы ACProtect

  1. Unpacking ACProtect1.09 (by haggar)
  2. UnPacking ACProtector 1.41 (by Sina_DiR)
  3. Unpacking ACProtect1.09 (by TallfaZ)

Знаете ли Вы, что...

  • За всё время развития ACProtect сменил множество домашних страниц. На данный момент найти работающую домашнюю страницу протектора в интернете весьма затруднительно
  • Сбросить триальный период в ACProtect можно без применения специальных утилит. Нужно всго лишь найти в корне диска, куда установлена операционная система, файл у которого расширение состоит из трёх абсолютно произвольных символов. Пример такого файла носит название - sgwtxz.ohl
  • Протектор был создан китайскими разработчиками
  • При сжатии файла протектор использует библиотеку сжатия Jcalg. Точно такую же, какую использует известный упаковщик PECompact

См. также

Протектор

Упаковщик

Распаковка

ASProtect

Armadillo

Code Virtualizer

Enigma

Obsidium

VMProtect

Themida/WinLicense

Источник — «https://exelab.ru/faq/ACProtect»