# IDA
ida 插件环境:
1. 至少 Python3.8
2. 多个使用 IDA 目录下的 idaplyswitch.exe
插件:
直接把 xxx.py 放到目录的 plugins 目录
KeyPatch (修改汇编)
依赖安装:pip install keystone-engine
LazyIDA (提取,批量修改)
至于用 64 还是 32,可以用查壳软件直接看
在 linux 下也可以使用 file 命令
但是实际上可以试错,不是直接打不开然后提醒,就是反汇编时会提醒
# function 窗口
按 G 可以地址导航,按 TAB 显示伪代码
在该窗口中使用 Ctrl+F 就可以用关键字查找
这里包含了分析出的所有函数
IDAview
图形窗口
会显示控制流,按空格切换为文本模式,这是按照线性地址
分析一般从 main 开始,但是万一 main 函数名字没有识别到
可以根据输出的内容来定位地址(去字符串窗口找),然后定位函数
# 字符串窗口
shift+12
在该窗口中使用 Ctrl+F 也可以用关键字查找(其实所有表格窗口都可以)
它包括了所有已识别的字符串
选中按 U 取消已定义的标识符,按 A 重建,按 X 显示所有引用选中的字符串的地方
# hex view
动态调试时显示内存数据,正常是显示静态数据
# imports/exports
导入导出表
显示引用的 api,使用里面的函数
分析动态链接库时,同时要看导出的函数
程序入口会被 ida 当成一个叫做 start 的导出函数
在运行时 start 先被初始化,然后调用 main 函数
# 其他玩意儿
# 重命名函数:
ida 反编译的有时名字不太对,为了方便看,所以建议重命名
(自己要猜一猜可能是什么库函数)
选中,然后按 N
# IDA 动态调试
作用:
验证静态分析结果
观察程序运行时数据
# 支持的特性:
# 1. 软件 / 硬件 / 条件 / 脚本断点
设置断点,点前面,或者选中按 F2
在伪代码设断点,可能会导致有些没执行(断点会在函数传参时)
软件:IDA 在地址上设置断点(0xCC), 到达后在恢复
硬件断点:通过 CPU 抛出错误来断点
条件断点:到达后执行特定脚本,并返回真表示被命中
脚本断点:基本和上面一样,但是返回值永远是假
# 2. 步入 / 步过 / 步出 / 执行到光标位置 /
步入:进入 call 函数(F7)
步过:直接到 call 函数的返回地址(F8)
步出:中断函数回到其调用者(执行到返回)(Ctrl+F7)
执行到光标位置:直接执行到选中位值(实际上是设置临时断点)(F4)
设置代码执行位置:用于跳过不想执行的代码(Ctrl+N)
注意 scanf 会强行暂停等待输入
# 3. 汇编级 / 伪代码 / 源码 / 调试代码级支持
IDA 会在存在源代码时自动导入,但是不如直接用 VS 之类的集成开发软件
# 4. 寄存器 / 内存读写
不是很方便,建议装上面插件
# 5. 启动进程 / 附加调试
启动调试可以每一步调试,也可以调试初始化代码(如果没有反调试)
附加调试不能调试初始化代码,但是有些程序是子程序,不附加环境不一样
也用来调试动态库以及绕过一些反调试
注:附加可以用 Ctrl+F 快速查找要附加到的程序
# 6. 内存窗口
在窗口中按 G 跳转到特定地址(自己提前复制)
按 F2 修改内存(无插件时),可以输入十六进制数字,再按 F2 保存修改
用 LazyIDA 时,进入编辑模式时右键可以选 pastedata,这样可以用 ascll 模式
但是这玩意儿不会自己不 00,所以还要自己加
# 7. 模块窗口
显示模块列表
Debuger-->Debuger Windows-->Modules
在 Windows 上是 dll,Linux 上是 so
# 远程调试
安装环境:
在安装目录下的 debugsrv 目录,选择对应系统的 sever,复制到目标环境运行(子系统必须是 wsl2)
为了方便可以加到 path 里
echo $PATH
//调试目录就是执行目录
配置:
Debuger-->process options
Host 填 Linux 地址(wsl 会自动填回环地址)
Port 就填 Linux 上显示的监听端口
其他不要填
如果修改的代码,记得删掉重新上传