• XSS.stack #1 – первый литературный журнал от юзеров форума

Помощь с распаковкой

coree

(L2) cache
Пользователь
Регистрация
27.12.2021
Сообщения
303
Решения
1
Реакции
116
Гарант сделки
1
Депозит
0.0006
Доброго дня. Вкратце: у меня есть малварь, которую мне надо разреверсить. Сама малварь прям хорошо защищена, просто загружая файл в иду - результата нету, ида не воспринимает его как валидный PE. Естественно прога напичкана антиотладкой, причем такой заковыристой, что связка titanhide+scyllahia вообще почти ни чем не помогает.
Как я понял код полиморфно расшифровывает сам себя по ходу выполнения, при попытке поставить бряк (и аппаратный тоже) происходит обнаружение. Также код постоянно проверяет свою целостность и пропатчить что то просто невозможно.
Софт запускайте сам себя с доп параметрами и если попытаться приаттачиться к во второму новому процессу - получаю мгновенный NtTerminateProcess на этот процесс.
Я уже пытался в windbg поставить бряк на NtTerminateProcess чтобы по коллстеку посмотреть откуда ноги растут, но NtTerminateProcess отрабатывает каким то образом раньше.
В результате получаем то, что нереально найти место каких либо проверок потому что бряки - детект, а сам код ~40Кб размером.
Что можете посоветовать?
 
Пожалуйста, обратите внимание, что пользователь заблокирован
но NtTerminateProcess отрабатывает каким то образом раньше.
может он отрабатывает через прямой syscall? или прыжок идет куда-то внутрь NtTerminateProcess (не на первую инструкцию).
Поставь бряки на весь NtTerminateProcess
Поищи все syscall'ы в exe.

Есть конечно вариант, что он делает прыжок на syscall+ret из другой какой-нибудь функции, тогда всё что я написал выше не будет актуально.
при попытке поставить бряк (и аппаратный тоже) происходит обнаружение.
Ну просто бряки он детектит, потому что
код постоянно проверяет свою целостность и пропатчить что то просто невозможно.
то есть нельзя впихнуть 0xCC.
На сколько я знаю аппаратные бряки можно детектить только через исключения. Создается обработчик, тригерится исключение и проверяются DR регистры.
Посмотри какие обработчики создаются, поставь аппаратные бряки на функции, которые регистрируют эти обработчики. (не вспонмю мат часть, но вроде можно даже эти обработчики ставить без вызова соответствующих функций)

В твоем случае лучше разобраться со статичексим анализом. С ним будет гораздо проще потом в динамику.
+если ида не хавает, попробуй в гидру залить

Лучше бы ты бинарник тоже прикрепил бы, а то гадать тяжело.
 
В твоем случае лучше разобраться со статичексим анализом. С ним будет гораздо проще потом в динамику.
Если бы все было так просто. Как я писал выше:
Как я понял код полиморфно расшифровывает сам себя по ходу выполнения
И расшифровать это в статике - уйдет очень и очень много времени.
Посмотри какие обработчики создаются
Это можно где то в отладчике увидеть? Или придется степ-овером весь код протыкать вручную.
А что говорит о файле DiE?
Протектор: VMProtect(2.XX-3.XX)[-]
Однако судя по всему это коллизия сигнатур, потому что в моей PE-шке есть две секции с 1 и 0 в конце. Больше никаких сигнатур нету.
На сколько я знаю аппаратные бряки можно детектить только через исключения
А что мешает просто спушить на стек dr0? Так еще и можно через GetThreadContext получить их.
К сожалению не могу прикрепить бинарь по некоторым личным причинам.
 
По VMProtect, недавно поднакидали материала: /threads/119612/. Какие строки вытягивает из exe, strings Руссиновича?
По строкам там ничего нету почти, все пошифровано. Тут в другом дело, это 100% не VMP, потому что entrypoint выглядит так (ну либо я отстал от жизни и Vmp настолько продвинулся):
1723998492090.png
 
Пожалуйста, обратите внимание, что пользователь заблокирован
А что мешает просто спушить на стек dr0?
нельзя
Так еще и можно через GetThreadContext получить их.
без приостановки потока получишь херню
Это можно где то в отладчике увидеть? Или придется степ-овером весь код протыкать вручную.
x64dbg -> сверху вкладочка "SEH". Но они там появятся после установки
И расшифровать это в статике - уйдет очень и очень много времени.
не надо расшифровывать в статике. В статике нужно найти то, что мешает анализу в динамике и пропатчить.
 
Да. Малварь экспортирует некоторые функции, которые ида считает за переменные из-за того что они зашифрованы. При запуске малварь запускает саму себя как DLL с одной из этих функций.
 
Вот в этом и проблема, не могу никак найти момент когда выделяется память и копируется PE без бряков)
 
Если бы все было так просто. Как я писал выше:

И расшифровать это в статике - уйдет очень и очень много времени.

Это можно где то в отладчике увидеть? Или придется степ-овером весь код протыкать вручную.

Протектор: VMProtect(2.XX-3.XX)[-]
Однако судя по всему это коллизия сигнатур, потому что в моей PE-шке есть две секции с 1 и 0 в конце. Больше никаких сигнатур нету.

А что мешает просто спушить на стек dr0? Так еще и можно через GetThreadContext получить их.
К сожалению не могу прикрепить бинарь по некоторым личным причинам.
DIE может фолсить доверять нельзя смотреть только через отладчик
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх