- •Методы защиты программного обеспечения и способы их обхода.
- •Классификация систем защиты программного обеспечения. Классификация по методу установки, по используемым механизмам защиты, по принципу функционирования.
- •Упаковщики/шифраторы. Достоинства и недостатки.
- •Форматы исполняемых файлов. Формат Portable Executable. Relative Virtual Address.
- •Форматы исполняемых файлов. Формат Portable Executable. Поле ImageBase структуры image_optional_header. Настройка адресов. Секция .Reloc.
- •Стандартный механизм импорта
- •Форматы исполняемых файлов. Формат Portable Executable. Секция .Export. Как работает механизм экспортируемых функций?
- •Виды точек останова в отладчике. Алгоритм работы точек останова.
- •Антиотладочные приёмы. Использование функции IsDebuggerPresent и защита от неё.
- •Антиотладочные приёмы. Использование функции FindWindow и защита от неё.
- •Антиотладочные приёмы. Использование функций Proccess32First и Process32Next и защита от них.
- •Антиотладочные приёмы. Обнаружение отладчика по имени процесса и защита от данного приёма.
Антиотладочные приёмы. Использование функций Proccess32First и Process32Next и защита от них.
Proccess32First
Получает информацию о первом процессе, встречающихся в снимке системы.
Синтаксис
BOOL WINAPI Process32First (
__in HANDLE hSnapshot,
__inout LPPROCESSENTRY32 lppe
);
Параметры
hSnapshot [в]
Дескриптор снимка вернувшегося из предыдущего вызова функции CreateToolhelp32Snapshot.
lppe [в, из]
Указатель на PROCESSENTRY32 структуру. Он содержит информацию о процессах, таких как имя исполняемого файла, идентификатор процесса, и идентификатор родительского процесса.
Возвращаемое значение
Возвращает TRUE, если первая запись из списка процессов была скопирована в буфер или FALSE в противном случае. Значение ERROR_NO_MORE_FILES ошибки, возвращаемый функцией GetLastError, если не существует процессов или снимок не содержит информации о процессе.
Замечания
Чтобы получить информацию о других процессах, записанные в тот же снимок, используйте Process32Next функции. Те же параметры и возвращаемые значения что и у Proccess32First.
Антиотладочные приёмы. Обнаружение отладчика по имени процесса и защита от данного приёма.
Производится с помощью ToolHlp API, функций CreateToolhelp32Snapshot, Process32First и Process32Next, которые перечисляют все доступные процессы и получают для них структуру PROCESSENTRY32, содержащую полезную информацию о процессе. Получив список можно, например, закрыть непонравившийся процесс (скажем, если его имя равно имени процесса какого-нибудь известного отладчика). Еще есть параноидальная проверка у ACProtect: он считает допустимым свой запуск только от explorer.exe и еще пары учтенных программ. Проверка работает элементарно. В структуре PROCESSENTRY32 есть поле DWORD th32ParentProcessID, в котором указан PID процесса-родителя. Если вдруг это поле равно идентификатору неучтенного протектором процесса, то защита просто-напросто убивает своего родителя (печальная история, особенно когда хочешь запустить программу из-под какого-нибудь не очень популярного файлового менеджера).
Хорошо, что авторы ACProtect все-таки образумились и в последних версиях такую проверку убрали, однако ACPR - не единственный протектор, в котором она была :). Обход - переименовать отладчик, к примеру, OllyDbg.exe в explorer.exe. Правда, тут возникает одна проблемка: плагины будут искать именно OllyDbg.exe, так как там находятся функции, которые они импортируют, поэтому в папке должен остаться OllyDbg.exe, будем переименовывать и запускать его копию.