
Relocation-Based Predicate — врём в IDA по-новому
farvend 1 минуту назад Relocation-Based Predicate — врём в IDA по-новому Средний 8 мин 0 Информационная безопасность * Реверс-инжиниринг * Windows * Assembler * Туториал Из песочницы ВведениеПредставьте ситуацию: вы...
GPT-5.6 31 Temmuz 2026'da yayınlanacak mı?
Вот важная новость с фронта ИИ: farvend 1 минуту назад Relocation-Based Predicate — врём в IDA по-новому Средний 8 мин 0 Информационная безопасность * Реверс-инжиниринг * Windows * Assembler * Туториал Из песочницы ВведениеПредставьте ситуацию: вы открываете программу в IDA, видите в графе потока управления две ветки, но декомпилятор показывает лишь одну и вообще без условия. Резонно думаете: «ну, Ида‑то умная, за меня обфускацию решила». Но при запуске процессор почему‑то выполняет совершенно другую ветку кода.
И делает он это не потому, что код сам себя модифицирует в памяти, а потому, что мы заставили штатные механизмы Windows работать против аналитика. В этой статье я покажу концепт новой техники анти‑анализа. До меня её публично никто не описывал.
Технические детали
Мы возьмём таблицу релокаций и ASLR — технологии, созданные для защиты и корректной загрузки программ — и превратим их в инструмент, который ломает популярные статические анализаторы. Как статические анализаторы видят кодЛюбой статический анализатор работает с PE-файлом так, как он лежит на диске. Он парсит заголовки, находит точку входа, строит граф потока управления и пытается определить, какие ветки условных переходов могут быть достигнуты.
Рассмотрим простой фрагмент:mov eax, 0xDEADC0DE mov ecx, 0xDEADC0DE xor eax, ecx test eax, eax jnz real_path jz dead_pathЧто видит анализатор? Два одинаковых значения загружаются в регистры, XOR даёт ноль, test eax, eax устанавливает ZF=1, jnz не срабатывает, jz ведёт в dead_path. Анализатор (и реверсер, который ему доверяет) пойдёт разбирать dead_path, где мы можем разместить мусорный код, ложные строки, фейковые вызовы API — всё, что угодно, чтобы увести анализ в сторону.
Но что, если к моменту исполнения один из операндов 0xDEADC0DE магическим образом изменится? Таблица релокацийОтступление: ASLRПредположим, мы придумали как заставить программу выполнять наш код. Если бы мы знали по какому адресу находятся требуемые нам данные, то можно было бы просто их прочитать по захардкоженному адресу.
Отраслевые последствия
Microsoft просекли это уже очень давно и придумали ASLR — технологию, которая рандомизирует базовый адрес, тем самым даже если каким‑то образом у нас выйдет заставить выполнить программу наш код, то мы просто не будем знать адреса нужных нам данных (да, есть способы даже в этих условиях прочитать что надо, но не суть). Однако эта штука делает буквально невозможным хранение глобальных адресов в коде (например глобальных переменных), для чего была придумана таблица релокаций. Пример проблемыПредставьте глобальный указатель:const char* g_message = "Hello, World!
";Компилятор размещает строку "Hello, World! rdata, а указатель g_message в секции . Значение этого указателя — это абсолютный виртуальный адрес строки.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





