DLL调试(第38课)

使用OD调试动态库时有两种打开方式,第一种比较简单,直接将dll文件拖入OD即可,OD自身会自动识别出来当前文件是动态库文件,然后启用loadll.exe来加载此动态库文件。OD调试动态库

 

另一种方法是通过OD打开rundll32.exe,传入动态库文件的路径作为参数来进行调试。rundll32.exe

 

上面两种是比较直接的方式,但是有的dll文件会在od载入并断下来时,就已经执行完了恶意代码,遇到这种情况,就需要下面介绍的另一种调试技巧。

 

1、选择菜单栏的Options->Debugging options。Options->Debugging options

 

2、在弹出的窗口中选择Events,勾选Break on new module(dll).然后点击OK。Break on new module(dll)

 

这样的话,在新模块载入的时候,OD会断下来。此时注意Executable modules窗口的变化,这里会显示动态库加载的内存地址。Executable modules

 

如图所示,我们的目标动态库的基地址是0x10000000。然后使用IDA打开目标文件,找到想要下断点的地址,以下图为例:目标动态库的基地址是0x10000000

 

假如我们想要在sub_1000824C处设置断点,直接在OD中,定位到这个地址,然后设置断点即可。如果在IDA中显示的地址是0x2000824C,那么我们在OD中的0x2000824C地址处是找不到对应的代码的。这时需要计算代码的偏移,很明显,我们可以知道这个地址的RVA是824C,然后在OD中,将这个偏移加上OD加载的基地址0x10000000即可得到对应代码的绝对地址。然后设置断点运行程序即可(此时可以取消先前设置的Break on new module断点了)。

头像
  • ¥ 298.0元
  • 市场价:498.0元
  • ¥ 199.0元
  • 市场价:199.0元
  • ¥ 999.0元
  • 市场价:1599.0元
  • ¥ 99.9元
  • 市场价:299元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: