- IDA-python的使用:常用的api
get_bytes(address,count)从address处读取count个字节的内容
patch_bytes(address,buf),将adress地址处patch成buf的内容
Xrefsto(address,flags=0) 找到所有引用了adress的地址
byte(address) 获取address地址的一个字节的内容
一些IDA常用的快捷键:
- 跳转到特定地址 : G
- 查询交叉引用: X
- 查找字符串: alt + t
- 拍摄快照:ctrl+shift+w
- 重新定义变量数据类型 : y
- undefine一个 函数: u
- create 一个函数:p
ida反编译的一些技巧:
- 如果它函数反编译出来的变量很奇怪,可以将这个函数undefine掉然后再define,这样看的变量就会正常很多
- 如果反编译函数显示sp指针有问题,可以通过快捷键alt+k 在报错的地址修复sp指针
- 如果函数的结束地址正常,可以通过快捷键alt+p修改函数结束地址
- 可以变量转换数组,通过快捷键 y 将数据类型修改为 对应的类型的指针 例如 char *a1
- ida远程调试linux上的程序
先将ida文件夹下的linux_server64或者linux_server32拷到虚拟机去
然后给它执行权限,同时将要调试的文件和它放在同意文件夹,然后设置ida使用remote debugger 设置相关的路径,就可以开始调试了
ida 之定义一个结构体
在 edit 中选择 Add struct type 快捷键 是ins
设置struct的name,想要向结构体添加成员的话,点击 struct ends ,然后按D,就可以添加成员,再通过 N修改成员的名字,Y修改成员的类型
00000000 ; Ins/Del : create/delete structure
00000000 ; D/A/* : create structure member (data/ascii/array)
00000000 ; N : rename structure or structure member
00000000 ; U : delete structure member
00000000 ; [00000018 BYTES. COLLAPSED STRUCT Elf64_Sym. PRESS CTRL-NUMPAD+ TO EXPAND]
00000000 ; [00000018 BYTES. COLLAPSED STRUCT Elf64_Rela. PRESS CTRL-NUMPAD+ TO EXPAND]
00000000 ; [00000010 BYTES. COLLAPSED STRUCT Elf64_Dyn. PRESS CTRL-NUMPAD+ TO EXPAND]
00000000 ; ---------------------------------------------------------------------------
00000000
00000000 struc_1 struc ; (sizeof=0x128, mappedto_6)
00000000 name dq ? ; offset
00000008 age dq ?
00000010 description db 256 dup(?)
00000110 align dq ?
00000118 friends dq ? ; offset
00000120 flags dq ?
00000128 struc_1 ends
00000128
如果想修改变量为struct的类型 ,就用 Y快捷键修改