2020.03.02-2020.03.08
IDA
四个快捷键
添加注释:冒号或分号
跳转到某个地址(16进制):‘G’;返回(后退):‘Esc’;前进:‘Ctrl+Enter’
交叉参考
可以知道指令代码相互调用的关系
'↑j’中j表示跳转,o表示偏移量,p表示子程序,双击或按回车可以跳到调用该处的地方
在‘loc_xxxxx’上按’x’打开交叉参考窗口
参考重命名
可把所有 loc_xxxxxx 重命名
标签
打开标记当前位置功能:‘jump’->‘mark position’ 快捷键:‘Alt+M’
标记后在其他位置可以跳转到标记时光标的位置,快捷键:‘Ctrl+M’
格式化指令操作数
把常量转换为十六、十、八、二进制
函数的操作
代码和数据转换
IDA可能无法正确区分数据字节和代码字节,有些程序利用这一点对抗静态反汇编
用户可以将某段数据指定为代码或数据
方法:‘Edit’->‘Code’/‘Data’(快捷键’C’/‘D’),'D’会将数据类型在db,dw,dd之间转换
按’U’取消定义后得到一些可以重新定义的字节,按’P’将某段代码定义为子程序
—>
字符串
编程语言的不同造成字符串格式不同
c语言字符串以0结尾,dos字符串以$结尾,其他可见于’Edit’->‘string’
按’A’生成一个变量名,按’U’恢复,在’View’->‘Open subviews’->'Names’可以看到字符串变量
数组
可以将数据按数组的形式显示
‘Edit’->‘Array’或’ * '打开数组排列调整窗口
结构体
对一些常见的文件类型,IDA会自动加载相应的类型库,这些类型库中有相应的结构体。
‘Shift+F11’打开加载类型库窗口(Loaded Type Libarries),右键’Load Type Libarary’,'Insert’添加类型库
1 | /******************************************************* |
如[esi+18h]调用了结构体中的数据,可用有意义的名字代替
先把结构体数据中的数据重新定义
打开结构体窗口,insert一个结构类型。按’d’添加数据/切换数据类型,按’a’切换为字符串,按’n’修改结构体成员的名字
将光标定位在相应地址处,'Edit->‘Struct var’选择相应结构体类型
按’T’,在操作数类型中重新定义现有数据:
选择一片代码后可以批量进行替换:
lea:
lea bx,data
lea是load effective address 的缩写,是取源操作数的偏移地址,并将其传送到目的操作数单元。类似于C语言的取地址符&。
lea eax,[eax+2eax]的效果是eax = eax + eax * 2*
mov edx,[ebp+16]的效果是edx=(dword)(ebp+16).