windbg: переход в библиотеку dll процесса

#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 и я понятия не имею об этом.

  1. Открыть предварительный просмотр WinDbg
  2. Перейдите в раздел «Открыть файл дампа» (это не совсем интуитивно понятно, но это будет работать).
  3. В диалоговом окне открытия файла введите * , чтобы отображались библиотеки DLL (по умолчанию они ограничены файлами DMP).
  4. Выберите библиотеку 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 видимыми