IDA\Windbg调试

IDA静态反汇编技巧

一、通过添加类型库

二、添加结构

  在Structures窗口中显示当前可用结构信息,可手工添加结构,也可导入结构,有二种方法导入:

  A、通过定义一个c语言的头文件,将结构定义写在头文件中,然后通过菜单Load File->Parse c header file导入文件中定义的结构

  B、在Structures窗口中,按INS键添加结构,这时弹出对话框底部有个按钮Add stndard structure,点此按钮,在弹出的类型库中选择结构导入

 

IDA\Windbg动态调试

一、查看模块信息

kd>lm  //查看当前已加载模块信息,包括起始地址及长度

kd>lvDvm+模块名  //查看指定模块信息 

kd>x modulename!functionname   //查看模块内函数地址信息,函数名可使用通配符* x:examine,

kd>u  modulename!functionname  //查看函数汇编

kd>uf  modulename!functionname  //查看函数全部汇编代码

 二、根据模块信息及函数来设备断点

kd>bp 函数地址/函数符号名

 

 

 

一、内存查看:d (db,dd,dw,dq分别以不同字节数来查看内存)

kd>dd memoryaddress

 二、k命令:

 .reload -f强制加载符号

 

如何在驱动入口函数(DriverEntry)中断点:

kd>sxe ld:hookport.sys

kd>g

重新启动电脑或程序,当模块hookport.sys被加载时,就会触发了一个异常而中断,此时可获取hookport模块的基地址

kd>lmvm hookport

再接合IDA查看DriverEntry函数的偏移量,可得到DriverEntry函数的加载地址:

  funaddress=base+offset

kd>bp funaddress

 

IDA调试

IDA中集成Python,在Out Window窗口的底部,选择Python按钮,即使用相关对象,注意:Python中命令是大小写敏感的

查询Python函数:

Python>dir()  //列出相关函数对象

列出太多的函数,可通过Alt+T查找关键字筛选,Ctrl+T查询下一个

Python>SendDbgCommand('')  //通过Windbg获取信息

Python>SendDbgCommand('idtr')  //获取idt信息,信息为字符串,需要转换为整数

kd>r idtr          //直接通过WinDbg获取idtr信息

 

IDAPYTHON

很多函数的用法可利用下面的网址:

https://www.programcreek.com/python/example/102513/idc.MakeFunction中查看相关函数的用法,查询用google+site来做,因为该网站查询不管用

IDC:

MakeFunction(EA):在EA地址创建函数

MakeFunction(EA,flags):在EA地址创建函数,并加上标签

调试:

add_bpt(EA):在EA处设置断点

del_bpt(EA):删除EA外断点

 

 

我的IDAPYTHON脚本:

一个在指定模块相对偏移位置创建函数的示例:

1 base=get_first_module()    #idc函数获取全局中第一个模块地址
2 while get_module_name(base)!='\SystemRoot\system32\DRIVERS\mutenx.sys':    #递归查找mutenx.sys模块名,这里使用全路径,系统刚启动时为短名
3     base=get_next_module(base)
4     
5 base+=0x3308  #指定函数相对模块起始地址的偏移,具体可静态分析模块文件得到
6 MakeFunction(base)  #创建函数
7 print(hex(base))

 

posted @ 2018-10-31 10:17  平凡人  阅读(...)  评论(...编辑  收藏