快捷搜索: 王者荣耀 脱发

IDA与windbg分析.dll库文件

IDA与windbg分析.dll库文件

    IDA打开.dll库文件 用windbg attach到指定某一进程(File->attach to a process),打开进程后会可在(Debug->modules)看到该进程用了那些.dll库文件 IDA:修改基址让.dll库的地址与windbg保持同步(IDA:Edit->segments->Rebase program,Windbg:Debug->modules查看地址) IDA:可以选择隐藏函数中变量类型,使得函数看起来更简洁。 左侧IDA, 右侧windbg Windbg:Debug->Event Fliter选择忽略运行调试中的指定错误。

定位

    当我们需要在某个地方设置断点,让windbg停在某个地址,我们有如下方法 用IDA的查找字符串功能,找到windbg对应地址
  1. 比如要定位读取某个文件的代码
  2. IDA: 在view->open subviews ->strings 打开string窗口,Alt+T查找字符型,Ctrl+T查找下一个。
  3. 寻找函数中的循环,找到读取RouteLR.dst的位置
  4. 搜索命令s -a 000007ffd002d0000 Lfffffff "ERROR: Invalid"(000007ffd002d0000是模块librdi_device首地址,Lfffffff是搜索偏移量)
  5. 可以使用上文堆栈信息 (bp address 设置断点) (bl 查看断点) 条件断点:执行多少次中断 r $t0 = 0 bp XXX+0x2B8553 “r t 0 = @ t0=@ t0=@t0+1;.printf “times: %d ”,@ t 0 ; . e c h o ; . i f ( @ t0;.echo;.if(@ t0;.echo;.if(@t0 == 0x10){}.else{gc}”
  6. 定位中断后,命令ba r8 00007ffd`01746aa8 设置读数据断点,在进程中执行特定命令触发中断
  7. windbg命令d + address显示内存信息,下面的命令可以用于打印有用的内存log信息。 .logopen C:UsersAdministratorDesktopvivadolog.txt d 000001f5ebe3fa10 000001f5ebe40400 .logclose
经验分享 程序员 微信小程序 职场和发展