mirror of
https://github.com/carlospolop/hacktricks
synced 2024-11-26 06:30:37 +00:00
6.4 KiB
6.4 KiB
{% hint style="success" %}
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Support HackTricks
- Check the subscription plans!
- Join the 💬 Discord group or the telegram group or follow us on Twitter 🐦 @hacktricks_live.
- Share hacking tricks by submitting PRs to the HackTricks and HackTricks Cloud github repos.
Визначення упакованих бінарних файлів
- відсутність рядків: Зазвичай упаковані бінарні файли майже не містять рядків
- Багато невикористаних рядків: Також, коли шкідливе ПЗ використовує якийсь комерційний пакувальник, зазвичай можна знайти багато рядків без перехресних посилань. Навіть якщо ці рядки існують, це не означає, що бінарний файл не упакований.
- Ви також можете використовувати деякі інструменти, щоб спробувати визначити, який пакувальник був використаний для упаковки бінарного файлу:
- PEiD
- Exeinfo PE
- Language 2000
Основні рекомендації
- Почніть аналізувати упакований бінарний файл знизу в IDA і рухайтеся вгору. Розпаковувачі виходять, коли розпакований код виходить, тому малоймовірно, що розпаковувач передасть виконання розпакованому коду на початку.
- Шукайте JMP або CALL до реєстрів або областей пам'яті. Також шукайте функції, що передають аргументи та адресу, а потім викликають
retn
, оскільки повернення функції в цьому випадку може викликати адресу, яка тільки що була передана в стек. - Поставте точку зупинки на
VirtualAlloc
, оскільки це виділяє місце в пам'яті, де програма може записувати розпакований код. "Запустіть до коду користувача" або використовуйте F8, щоб отримати значення в EAX після виконання функції та "слідкуйте за цією адресою в дампі". Ви ніколи не знаєте, чи це область, де буде збережено розпакований код. VirtualAlloc
зі значенням "40" як аргумент означає Читання+Запис+Виконання (деякий код, який потребує виконання, буде скопійовано сюди).- Під час розпакування коду нормально знаходити кілька викликів до арифметичних операцій та функцій, таких як
memcopy
абоVirtual
Alloc
. Якщо ви опинитеся в функції, яка, здається, виконує лише арифметичні операції і, можливо, деякийmemcopy
, рекомендація полягає в тому, щоб спробувати знайти кінець функції (можливо, JMP або виклик до якогось реєстру) або принаймні виклик до останньої функції і запустити до неї, оскільки код не є цікавим. - Під час розпакування коду звертайте увагу на те, коли ви змінюєте область пам'яті, оскільки зміна області пам'яті може вказувати на початок розпакування коду. Ви можете легко скинути область пам'яті, використовуючи Process Hacker (процес --> властивості --> пам'ять).
- Під час спроби розпакувати код хороший спосіб знати, чи ви вже працюєте з розпакованим кодом (щоб ви могли просто скинути його) - це перевірити рядки бінарного файлу. Якщо в якийсь момент ви виконуєте стрибок (можливо, змінюючи область пам'яті) і помічаєте, що додано набагато більше рядків, тоді ви можете знати, що працюєте з розпакованим кодом.
Однак, якщо пакувальник вже містить багато рядків, ви можете подивитися, скільки рядків містить слово "http" і перевірити, чи це число зростає. - Коли ви скидаєте виконуваний файл з області пам'яті, ви можете виправити деякі заголовки, використовуючи PE-bear.