Как трассировать dll в дебаггере IDA?

  • Автор темы Автор темы koekaker
  • Дата начала Дата начала

koekaker

One Level
29.08.2024
15
0
Открываю в IDA dll-файл, в Application пишу rundll32.exe, в Parameters dll-файл и вызываемую функцию, ставлю брэкпоинты в точке входа и в функции, но в эту функцию никогда не попадаю. Проваливается куда-то в ntdll.dll и в конце концов вылетает с ошибкой.
 
В x64dbg для запуска DLL есть собственный загрузчик, цепляться ни к чему не надо, просто выбрать нужный файл.

Если в DLL есть антиотладка, то под отладчиком может не запуститься, но это уже другая тема.
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    4,9 КБ · Просмотры: 57
И все же запускать процесс на виртуалке, а отлаживать на основной машине, в x64dbg нельзя?
 
И все же запускать процесс на виртуалке, а отлаживать на основной машине, в x64dbg нельзя?

Это не ядерный виндебаг, где две машины нужны. Это юзер отладчики, обычное приложение, которое управляет дочерним. И там непонятный ассемблер :)
 
В эту же строчку мне надо дописать полный путь к моему dll и вызываемую функцию
Ничего не надо дописывать. Просто File+Open и выбираете DLL. Отладчик остановится на её EP, а дальше уже решайте, как продолжать.

И все же запускать процесс на виртуалке, а отлаживать на основной машине, в x64dbg нельзя?
Зачем такие сложности? Что мешает скопировать отладчик на виртуалку и всё делать там?
 
Распространение зловредных файлов как бы не приветствуется, я полагаю. Подобных зловредов полно. Просто антивирус выловил и мне любопытно, интересует методика исследования.
ну тогда разбирайся сам т к без бинаря помочь не могу

Ты если что можешь кинуть под паролем infected
 
Изучаешь архитектуру, базовый isa Intel® 64 and IA-32 Architectures Software Developer Manuals

Заодно системную архитектуру. Затем смотришь в диз и понимаешь чего там написано и как это работает. Но есть плохая новость - поезд уехал и его не догнать.)
 
ну тогда разбирайся сам т к без бинаря помочь не могу

Ты если что можешь кинуть под паролем infected
Кинул в личку.

Собственно, провалиться в функцию dll получается нормально, проверил на обычном файле. Здесь же, судя по экспортируемым функциям (которые вроде легальны?), зловред прячется где-то глубже?
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    23,5 КБ · Просмотры: 51
но в эту функцию никогда не попадаю. Проваливается куда-то в ntdll.dll и в конце концов вылетает с ошибкой.
Любая DLL содержит в себе N-функций (процедур), которые являются статическими, т.е. не исполняются сами по себе, пока родитель EXE не вызовет их явно. Динам.частью можно считать лишь необязательную процедуру на точке-входа DllEntryPoint(), в которую системный загрузчик в нёдрах Ntdll.dll передаёт три параметра - это база dll в памяти (hinstDll), причина вызова (fdwReason=Attach/Detach), и третий в резерве. Мы можем игнорировать все эти параметры лоадера, но обязательно должны вернуть ему EAX=1. Собственно поэтому DllEntryPoint() (DllMain) и считается необязательной, кроме EAX=1.

Теперь если вы загрузите просто либу в любой отладчик, то попадёте в её точку-входа, где как правило будет mov eax,1 --> ret, что отфутболит обратно в загрузчик Ntdll.dll (инит либы ещё не окончен). Таким образом чистую DLL вы не сможете отладить, хотя можно стат.анализом в том-же дебагере просто просмотреть содержимое функций. Для этого загрузите DLL в x64dbg как обычно через Open, и не делая ни шага перейдите на вкладку "Отладочные символы". Далее находите свою dll в списке, и получаете все её эксп.функции (двойной клик = окно кода). При этом в стеке (после адреса-возврата) найдёте три параметра системного лоадера: hinsDll, fdwReason, Reserved (если х64 то в rcx,rdx,r8).

То-есть дебагер здесь вам ничем не поможет, а только IDA в статике. Если хотите динамически трассировать, то или через родное приложение, или писать свой EXE, который будет по очереди вызывать все функи из этой dll. Иначе никак.
 
  • Нравится
Реакции: koekaker
Спасибо за подробный ответ!

Я взял простенькую dll, где в статике видны все ее функции. В IDA в поле "Application" заменил на "c:\windows\syswow64\rundll32.exe". В "Parametres" написал путь к dll, имя функции и через пробел параметры функции. Успешно проваливается.
Но, судя по всему, в большинстве случаев так легко не получится. В этой зловредной dll вообще не пойму, какие функции, там указатели на лету строятся. Да, заходит в DLLMain c Reason Attach, какие-то непонятные действия, Reason меняется на Detach и до свидания.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Курс AD

Популярный контент