#debugging #dll #reverse-engineering #windbg
Вопрос:
Новый вопрос здесь. Я искал решение пару дней, но ничего не нашел. Использование предварительного просмотра windbg.
Существует процесс, который загружает библиотеку dll, и я хочу увидеть разборку адресов, которые вызываются из библиотеки dll. Символы недоступны, потому что это третья сторона. Я могу найти точку входа и прервать ее, но после этого я не могу войти в библиотеку dll. Я знаю, что мне нужно загрузить dll в windbg, но я не могу указать ее в аргументах при запуске exe, потому что я знаю точку входа только после загрузки модуля. Если я использую .загрузите мою библиотеку dll и установите точку останова при вводе, она тоже не работает. Кто-нибудь делал это раньше и может сказать мне, что мне нужно сделать, чтобы войти в сборку dll?
редактировать: В windbg я запустил исполняемый файл (.exe) и хочу просмотреть адреса и операции внутри .dll, которые вызываются во время определенной операции в программе.
Комментарии:
1. поскольку вы отметили этот windbg, используйте функцию wt command bp в вашей следующей инструкции exe bp, также проверьте включения и исключения, если обычная wt занимает слишком много времени
2. Это сторонняя библиотека dll, поэтому у меня нет никаких символов для exe или dll-файла. попробовал wt, но он не показывает мне никаких вызванных смещений. только имя библиотеки dll вместо расположения функций
Ответ №1:
Сначала простые вещи: .load
это для загрузки плагинов WinDbg в процесс WinDbg. Это не то, чего ты хочешь.
Я предполагаю, что вы хотите больше заниматься обратным проектированием, чем отладкой. WinDbg не идеально подходит для этой задачи. Безусловно, есть инструменты получше, такие как IDA.
Анализ без выполнения
Но в любом случае, давайте перейдем к делу. Я выберу произвольную библиотеку DLL для этого примера. Это библиотека DLL, поставляемая с драйвером дисплея AMD, C:AMDPSP DriverWTx64amdtee_api32.dll
и я понятия не имею об этом.
- Открыть предварительный просмотр WinDbg
- Перейдите в раздел «Открыть файл дампа» (это не совсем интуитивно понятно, но это будет работать).
- В диалоговом окне открытия файла введите
*
, чтобы отображались библиотеки DLL (по умолчанию они ограничены файлами DMP). - Выберите библиотеку DLL для загрузки
В этот момент он скажет:
Microsoft (R) Windows Debugger Version 10.0.21349.1004 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Loading Dump File [C:AMDPSP DriverWTx64amdtee_api32.dll]
Теперь вы можете работать с библиотекой DLL теми же командами, что и во время сеанса отладки в реальном времени.
0:000> lm
start end module name
10000000 10055000 amdtee_api32 (export symbols) amdtee_api32.dll
Поэтому у меня нет доступного файла PDB, просто экспортируйте символы, так как они есть:
0:000> x *!*
7ffe0300 SharedUserData!SystemCallStub = <no type information>
10001050 amdtee_api32!TEEC_InitializeContext (<no parameter info>)
[...]
И мы можем разобрать функцию:
0:000> uf amdtee_api32!TEEC_InitializeContext
amdtee_api32!TEEC_InitializeContext:
10001050 55 push ebp
10001051 8bec mov ebp,esp
10001053 83ec08 sub esp,8
10001056 c745f801000000 mov dword ptr [ebp-8],1
1000105d 837d0c00 cmp dword ptr [ebp 0Ch],0
10001061 750a jne amdtee_api32!TEEC_InitializeContext 0x1d (1000106d) Branch
[...]
Вы даже можете получить доступ к памяти, в которую загружена библиотека DLL
0:000> db amdtee_api32
10000000 4d 5a 90 00 03 00 00 00-04 00 00 00 ff ff 00 00 MZ..............
10000010 b8 00 00 00 00 00 00 00-40 00 00 00 00 00 00 00 ........@.......
10000020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
10000030 00 00 00 00 00 00 00 00-00 00 00 00 10 01 00 00 ................
10000040 0e 1f ba 0e 00 b4 09 cd-21 b8 01 4c cd 21 54 68 ........!..L.!Th
10000050 69 73 20 70 72 6f 67 72-61 6d 20 63 61 6e 6e 6f is program canno
10000060 74 20 62 65 20 72 75 6e-20 69 6e 20 44 4f 53 20 t be run in DOS
10000070 6d 6f 64 65 2e 0d 0d 0a-24 00 00 00 00 00 00 00 mode....$.......
Комментарии:
1. Спасибо! Я уже пытался найти соответствующие функции в ghidra, но библиотека dll относительно огромна. Поэтому я хотел посмотреть, какие адреса в dll вызываются процессом во время соответствующих программных операций. нет ли способа войти в библиотеку dll, когда я достигаю точки останова ввода при отладке в реальном времени?
2. @d8613r: итак, у вас уже есть EXE-файл, который загружает DLL и запускает ее?
3. да, это так. exe загружает dll, когда я запускаю программу, но она используется для многих операций в программе. Я ищу только некоторые функции внутри библиотеки dll, которые используются в определенной операции exe. я могу сломаться, когда они доберутся до входа в библиотеку dll, но тогда я не знаю, как сделать эти конкретные адреса библиотеки dll видимыми