- •Отчёт по снир
- •Оглавление.
- •Глава 1. Введение. Понятие
- •Виды «Обратной разработки»
- •Что можно получить?
- •Глава 2. Фундаментальные знания для обратной инженерии.
- •2.1 Архитектура
- •Представление знака в числах.
- •Порядок байт (Endianness)
- •Виды памяти.
- •Предсказатели переходов.
- •Глава 3. Основная часть
- •3.1.1 Поиск в коде того, что нужно.
- •Идентификация исполняемых файлов
- •Часто используемые функции Windows api
- •Расширение триального периода
- •Tracer: Перехват всех функций в отдельном модуле
- •Текстовые строки
- •Сообщения об ошибках и отладочные сообщения
- •Константы
- •Системные вызовы (syscall-ы)
- •3.1.2 Пример: игра Windows xp «Сапёр».
- •3.4 Основные способы защиты программ
- •3.5 Методы противодействия.
- •Особенности анализа оверлейных программ
- •Особенности анализа графических программ Windows
- •Защита программ от анализа
- •Динамическое изменение кода программы
- •Искусственное усложнение структуры программы
- •Глава 4. Основные программы для обратной инженерии
- •4.1 Отладчик debug
- •Глава 5. Вывод.
- •Глава 8. Литература.
Часто используемые функции Windows api
Это функции которые можно увидеть в числе импортируемых. Немалая часть может вызываться из библиотечных функций и CRT-кода.
Многие функции могут иметь суффикс -A для ASCII-версии и -W для Unicode-версии.
• Работа с реестром (advapi32.dll): RegEnumKeyEx, RegEnumValue, RegGetValue, RegOpenKeyEx, RegQueryValueEx.
• Работа с текстовыми .ini-файлами (kernel32.dll): GetPrivateProfileString.
• Диалоговые окна (user32.dll): MessageBox, MessageBoxEx, CreateDialog, SetDlgItemText, GetDlgItemText.
• Работа с ресурсами: (user32.dll): LoadMenu.
• Работа с TCP/IP-сетью (ws2_32.dll): WSARecv, WSASend.
• Работа с файлами (kernel32.dll): CreateFile, ReadFile, ReadFileEx, WriteFile, WriteFileEx.
• Высокоуровневая работа с Internet (wininet.dll): WinHttpOpen.
• Проверка цифровой подписи исполняемого файла (wintrust.dll): WinVerifyTrust.
• Стандартная библиотека MSVC (в случае динамического связывания)(msvcr*.dll): assert, itoa, ltoa, open, printf, read, strcmp, atol, atoi, fopen, fread, fwrite, memcmp, rand, strlen, strstr, strchr.
Расширение триального периода
Функции доступа к реестру это частая цель тех, кто пытается расширить триальный период ПО, которое может сохранять дату/время инсталляции в реестре.
Другая популярная цель это функции GetLocalTime() и GetSystemTime(): триальное ПО, при каждом запуске, должно как-то проверять текущую дату/время.
Tracer: Перехват всех функций в отдельном модуле
В tracer есть поддержка точек останова INT3, хотя и срабатывающие только один раз, но зато их можно установить на все сразу функции в некоей DLL.
−−one−time−INT3−bp:somedll.dll!.*
Либо, поставим INT3-прерывание на все функции, имена которых начинаются с префикса xml :
−−one−time−INT3−bp:somedll.dll!xml.*
В качестве обратной стороны медали, такие прерывания срабатывают только один раз. Tracer покажет вызов какой-либо функции, если он случится, но только один раз. Еще один недостаток — увидеть аргументы функции также нельзя. Тем не менее, эта возможность очень удобна для тех ситуаций, когда вы знаете что некая программа использует некую DLL, но не знаете какие именно функции в этой DLL. И функций много.
Например, узнаем, что использует cygwin-утилита uptime:
tracer −l:uptime.exe −−one−time−INT3−bp:cygwin1.dll!.*
Так мы можем увидеть все функции из библиотеки cygwin1.dll, которые были вызваны хотя бы один раз, и откуда:
One−time INT3 breakpoint: cygwin1.dll!__main (called from uptime.exe!OEP+0x6d (0x40106d))
One−time INT3 breakpoint: cygwin1.dll!_geteuid32 (called from uptime.exe!OEP+0xba3 (0x401ba3))
One−time INT3 breakpoint: cygwin1.dll!_getuid32 (called from uptime.exe!OEP+0xbaa (0x401baa))
One−time INT3 breakpoint: cygwin1.dll!_getegid32 (called from uptime.exe!OEP+0xcb7 (0x401cb7))
One−time INT3 breakpoint: cygwin1.dll!_getgid32 (called from uptime.exe!OEP+0xcbe (0x401cbe))
One−time INT3 breakpoint: cygwin1.dll!sysconf (called from uptime.exe!OEP+0x735 (0x401735))
One−time INT3 breakpoint: cygwin1.dll!setlocale (called from uptime.exe!OEP+0x7b2 (0x4017b2))
One−time INT3 breakpoint: cygwin1.dll!_open64 (called from uptime.exe!OEP+0x994 (0x401994))
One−time INT3 breakpoint: cygwin1.dll!_lseek64 (called from uptime.exe!OEP+0x7ea (0x4017ea))
One−time INT3 breakpoint: cygwin1.dll!read (called from uptime.exe!OEP+0x809 (0x401809))
One−time INT3 breakpoint: cygwin1.dll!sscanf (called from uptime.exe!OEP+0x839 (0x401839))
One−time INT3 breakpoint: cygwin1.dll!uname (called from uptime.exe!OEP+0x139 (0x401139))
One−time INT3 breakpoint: cygwin1.dll!time (called from uptime.exe!OEP+0x22e (0x40122e))
One−time INT3 breakpoint: cygwin1.dll!localtime (called from uptime.exe!OEP+0x236 (0x401236))
One−time INT3 breakpoint: cygwin1.dll!sprintf (called from uptime.exe!OEP+0x25a (0x40125a))
One−time INT3 breakpoint: cygwin1.dll!setutent (called from uptime.exe!OEP+0x3b1 (0x4013b1))
One−time INT3 breakpoint: cygwin1.dll!getutent (called from uptime.exe!OEP+0x3c5 (0x4013c5))
One−time INT3 breakpoint: cygwin1.dll!endutent (called from uptime.exe!OEP+0x3e6 (0x4013e6))
One−time INT3 breakpoint: cygwin1.dll!puts (called from uptime.exe!OEP+0x4c3 (0x4014c3))
