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))