如何解决如何使用IDA调试Windows驱动程序并使用其对应的IDB?
我熟悉使用windbg或IDA进行远程内核调试,但是现在我已经从可执行文件中提取了一个内核驱动程序,并对其IDB进行了静态分析并重命名了许多变量,这是最简单的方法使用我的IDB文件在可执行文件加载远程调试对象上时调试驱动程序?
我知道如何使用IDA附加到远程内核,但是我如何使用当前的IDB文件,并在其某些功能上放置断点,以便在加载驱动程序时会遇到中断? (我没有用于驱动程序的相应pdb文件,因此我不能将符号用于断点)
解决方法
这是在任何DriverInit上都中断的有效答案
一旦DriverInit中断,您可以在所有MajorFunctions上查找并设置bp
假设您的kd连接正常
使用sxe -ibp; .reboot重启目标
重新连接时,目标会很早地破裂,如下所示
kd> sxe ibp;.reboot
Shutdown occurred at (Sun Oct 18 02:58:09.077 2020 )...unloading all symbol tables.
Waiting to reconnect...
Connected to Windows 7 7601 x86 compatible target at (xxx),ptr64 FALSE
Kernel Debugger connection established. (Initial Breakpoint requested)
一旦损坏,在nt!IopLoadDriver上设置一个断点
在此函数内搜索间接调用 调用_DRIVER_OBJECT-> DriverInit
kd> ?? #FIELD_OFFSET(nt!_DRIVER_OBJECT,DriverInit)
long 0x2c
喜欢
nt!IopLoadDriver+0x7ea:
829d5355 ff562c call dword ptr[esi+2Ch] ds:84f2928c={cdrom!FxDriverEntry (87eb53cf)}
在此处设置一个断点
现在您已设置为输入几乎所有已加载的驱动程序 一旦您进入任何驾驶员的入口 使用DriverObject(DriverEntry接受的参数) 并在每个MAJORFunction上设置断点
kd> bp . "du poi(@esi+1c+4);gc"
kd> bl
0 e Disable Clear 829d4b6a 0001 (0001) nt!IopLoadDriver
1 e Disable Clear 829d5355 0001 (0001) nt!IopLoadDriver+0x7ea "du poi(@esi+1c+4);gc"
kd> bd 0
kd> bl
0 d Enable Clear 829d4b6a 0001 (0001) nt!IopLoadDriver
1 e Disable Clear 829d5355 0001 (0001) nt!IopLoadDriver+0x7ea "du poi(@esi+1c+4);gc"
kd> g
841bd1d0 "\Driver\Null.Ѕ捁印䍁䥐停偎〰〰"
84f18718 "\Driver\Beep.Б浍摌䂈蓶䈸蓶...."
84eef210 "\Driver\VgaSave"
84eb2860 "\Driver\RDPCDDᛛ..В浍慃憠褎.蓫菌蓲"
84e903c0 "\Driver\RDPENCDD..浍摌읨蓤潤獷獜獹整.尲牤癩牥"
84e90400 "屳摲数据摤献獹"
84ef15c0 "\Driver\RDPREFMP..牉..蓧"
84ef4a78 "\FileSystem\Msfs.В浍慃冀褘蝴蓳荤蓶"
84f191f0 "\FileSystem\Npfs.З獍䑆.°"
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。