# 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 上显示的监听端口

其他不要填

如果修改的代码,记得删掉重新上传