IDA使用笔记记录[长期笔记]

本文详细介绍了IDA Pro的高级使用技巧,包括转换单元、代码搜索、函数管理和调试辅助功能。通过掌握这些技巧,可以更高效地进行逆向工程和代码分析。内容涵盖ASCII转换、数据和代码操作、函数跳转、IDC脚本编写以及结构体管理等,对于编程和调试工作极具参考价值。
摘要由CSDN通过智能技术生成

a: 转成ASCII
d: 转成数据, 按一次是db,两次dw,三次dd
c: 转成代码
u: 编程未定义

G: 跳转指令, 跳转到指定地址
ALT+T: 搜索指令,搜索关键字
F5: 把汇编编程C语言, 想回到汇编直接选IDA View即可
N: 按下某个名字并且修改名字,全局有效

ESC: 返回上一个页面

F12: 显示代码的流程图

Shift+F2: IDC脚本窗口

Shift+F3: 弹出Functions窗口

Shift+F9: 弹出Struct窗口

Shift+- 是把IDA代码中的十六进制与十进制互换

Q: 显示操作步长, 比如movsx edx, [esp + 18h]就会变成movsx edx, dword ptr [esp + 18h]

K: 隐藏操作步长

Ctrl+K: 查看当前函数的栈

 按下Ctrl+K即可

进入在Structures栏里, 点击Edit选择添加结构体即可添加结构体
选择结构体名后按d后即可添加成员,再次按d几次与上面d操作一样
选择某一成员,按alt+q可以把该成员变成IDA内所有可识别的其他类型结构体, 这种方法在IDA View窗口内也可以使用
双击结构体名称即可 将其收缩成一行,点击改行选择Ctrl和+(小键盘)即可拓展开

按;可以写入注释, 但是这样会让其他地方跳转到此位置也会显式该注释
Shift+; 则没有上面那种困扰,仅仅是单纯的本行注释
选择函数名按;可以添加函数注释

交叉引用(即所有引用该函数的列表)

如果目标函数不在当前模块,如何找到该函数在哪里调用?

如果有多个对话框调用了多个OnInitDialog, 即可使用交叉引用获取调用该函数的列表:

选中函数名,View+Open subviews+Cross references, 或者右键选中List cross references to..

又或者直接Ctrl+X即可

IDC语法:

配置IDA默认编辑器: Options->General->Misc->Editor

Message输出函数(类似printf), Warning以及Fatal

变量: 全部auto类型(类似js里的var), 变量声明与复制必须在不同语句进行

语句: IDC不支持switch语句

如果反汇编窗口或者其他窗口不见了怎么调出来:

 让IDA显示机器码的方法:

 这样的效果如下图:

 如果想要IDA自动注释:

 想要重置IDA的GUI界面元素到其原来位置

 想跳转到对应的文件偏移:

 搜索功能:

1. Search->Next Code 移动光标到包含你所指定指令的下一个位置

2. Search->Text 在反汇编窗口中搜索一个指定字符串

3. Search->Sequence of Bytes 在16进制视图窗口中对特定字节序进行二进制搜索

 需要查看某个函数的所有交叉引用, 对数据也同样有效:

点击函数名后按下'X'键:

 函数无法识别的情况,按'P'键创建函数。

如果函数不是基于EBP的栈帧,这可能不是很容易理解。可以按下Alt+P。选择BP Based Frame然后指定4 Bytes for saved registers

工具栏可以显示高级模式,即有更多选项:

 

 结果入上,这里主要关注红框框出的交叉引用:

第一个选项会出现当前函数的流程图, 快捷键F12:

 第二个获取整个程序的调用图, 数量多的情况下有点凌乱:

 第三个显示当前函数被哪里调用了

 讲一个不易于理解的常量转换成易于理解的常量:

 

 如果有下面几条机器码:

mov eax, loc_410000
add ebx, eax 
mul ebx

 其中loc_410000被交叉引用。但实际上这只是一个数字罢了。可以点击它然后按下'O'键即可取消

如果某个标准的符号常量不显示。可能是符号表未加载。需要手动加载导入库:

一般mssdk和vc6win会被加载

 

设置数组结构:

在对应需要设置数据结构的函数内按下Ctrl+K就能查看该函数的所有堆栈元素。

 现在要把Buffer开始的512字节设置成一个数组。在起始地右击后选中Array

 

 将其数组大小设置成512个字节

 这样就成功设置了

IDA调试DLL时,如何手动确定载入起始位置,而非依靠ImageBase决定。

选中如下复选框代表手动载入。

 设定你要载入的位置后按下OK即可。
查找特定字符串:

如果我要查找一种简单xor加密,可是代码量太大该怎么办,可以直接利文本搜索来实现:

 查找所有xor出现过的地方, 很容易就发现一处可能的xor加密位置:

修改函数定义:

举一个例子, 我想修改这个函数的定义如何修改

 选中函数后按'Y'即可

选择入口点:

可能有一些程序有反调试功能,设立了tls回调, 普通的入口点无法查询

 按下Ctrl+E,选择对应的入口点即可

查找一个函数所有的call:

重新设定模块加载地址:

 

 

(完)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值