Unpacking binaries

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Визначення упакованих бінарних файлів

  • Відсутність рядків: Часто зустрічається, що упаковані бінарні файли майже не мають жодних рядків.

  • Багато невикористаних рядків: Також, коли шкідливе ПЗ використовує якийсь комерційний упаковувач, часто зустрічається багато рядків без перехресних посилань. Навіть якщо ці рядки існують, це не означає, що бінарний файл не упакований.

  • Ви також можете використовувати деякі інструменти, щоб спробувати знайти, який упаковувач був використаний для упакування бінарного файлу:

Основні рекомендації

  • Почніть аналізу упакованого бінарного файлу знизу в IDA та рухайтеся вгору. Розпаковувачі виходять, коли вихідний код виходить, тому малоймовірно, що розпаковувач передасть виконання розпакованому коду на початку.

  • Шукайте JMP або CALLs до регістрів або областей пам'яті. Також шукайте функції, які викладають аргументи та адресу напрямку, а потім викликають retn, оскільки повернення функції у цьому випадку може викликати адресу, що тільки що була витолкнута в стек перед її викликом.

  • Встановіть точку зупинки на VirtualAlloc, оскільки це виділяє простір у пам'яті, де програма може записати розпакований код. "Виконати до коду користувача" або використовуйте F8, щоб отримати значення всередині EAX після виконання функції та "слідуйте за цією адресою в дампі". Ніколи не знаєте, чи саме тут буде збережено розпакований код.

  • VirtualAlloc зі значенням "40" як аргумент означає Read+Write+Execute (деякий код, який потребує виконання, буде скопійовано сюди).

  • Під час розпакування коду зазвичай зустрічаються кілька викликів до арифметичних операцій та функцій, таких як memcopy або VirtualAlloc. Якщо ви опинилися в функції, яка, схоже, виконує лише арифметичні операції та можливо деякий memcopy, рекомендація полягає в тому, щоб знайти кінець функції (можливо, JMP або виклик до якогось регістру) або принаймні викликати останню функцію та виконати її, оскільки код не цікавий.

  • Під час розпакування коду звертайте увагу, коли ви змінюєте область пам'яті, оскільки зміна області пам'яті може вказувати на початок розпаковування коду. Ви можете легко вивантажити область пам'яті за допомогою Process Hacker (процес --> властивості --> пам'ять).

  • Під час спроби розпакувати код хорошим способом знати, чи ви вже працюєте з розпакованим кодом (таким чином ви можете просто вивантажити його), є перевірка рядків бінарного файлу. Якщо ви в певний момент робите стрибок (можливо, змінюючи область пам'яті) і помічаєте, що було додано набагато більше рядків, то ви можете знати, що працюєте з розпакованим кодом. Однак, якщо упаковувач вже містить багато рядків, ви можете побачити, скільки рядків містить слово "http" і перевірити, чи це число збільшується.

  • Коли ви вивантажуєте виконуваний файл з області пам'яті, ви можете виправити деякі заголовки за допомогою PE-bear.

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Last updated