Files
fzu-product/技术资源汇总(杭电支持版)/6.计算机安全/6.2.1基础工具的使用.md
2024-08-10 19:46:55 +08:00

304 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 基础工具的使用
IDA pro交互式反编译器专业版是二进制安全研究人员必备的反汇编、反编译工具功能繁多而强大反编译结果清晰明了。
IDA pro 是收费软件,价格极其昂贵,一套完全版人民币 10W 左右因此可以到各大网站下载破解版注意到一些知名网站下载比如吾爱破解等防止下载的软件包含病毒。在编写此文时IDA pro 更新到了 8.3,网上能找到的最新的版本为 7.7。本文由于版权原因,不提供下载链接。
## 简易使用方法
> 本文档仅作快速入门,更加细节的内容还请读者查阅其他资料以及多加实践。
>
> 另外在任何使用上操作的问题,都可以在群里提问!
### 0x00 IDA 简单介绍
![](https://cdn.xyxsw.site/image-20220809113855166.png)
IDA 是一款交互式反汇编和反编译工具,其支持文件类型和文件平台丰富。
可静态分析也可动态调试,可以说是二进制手的吃饭工具了
### 0x01 启动界面
![](https://cdn.xyxsw.site/image-20220809114834244.png)
```txt
NEW打开 IDA 同时弹出对话框选择要打开的文件
Go单独打开 ida打开界面将文件拖入
Previous或者下面的列表项快速打开之前的的文件
```
这里选择 Go 键,打开以后,将文件拖入
![](https://cdn.xyxsw.site/image-20220809124156697.png)
![](https://cdn.xyxsw.site/image-20220809124408179.png)
这里按我们的默认选项点击 OK 即可
### 0x02 关闭界面
![](https://cdn.xyxsw.site/image-20220809125554853.png)
:::tip
第一个选项:就是不打包数据包文件,那么这些数据库文件就会分开这放。
第二个选项及图中选项:就是把这几个数据库文件打包为 1 个 (如.i64 文件),下次打开我们分析的文件的时候,打开这个文件即可。
第三个选项:不会删掉数据库文件,而是打包压缩到存储的文件里面去了。
下面两个选项
第一个选项:回收垃圾,如果打包文件太大了,可以选用这个选项,清理不必要的内存
最后一个选项:当分析时候写错了,选中最后一个,最后一次打开的操作不保留了。(解决错误操作)
:::
### 0x03 主界面 - IDA View&Pseudocode
反汇编代码的图表窗口
![](https://cdn.xyxsw.site/image-20220809130857159.png)
按**空格键**切换成文本结构的反汇编
![](https://cdn.xyxsw.site/image-20220809130940294.png)
按**F5**进行反编译跳转至`Pseudocode`(伪代码) 界面
![](https://cdn.xyxsw.site/image-20220809131038284.png)
然后就可以分析代码逻辑了
直接点击函数名可以进入到对应函数内部查看函数逻辑
### 0x04 主界面 - Hex View
十六进制窗口 (不太常用)
![](https://cdn.xyxsw.site/image-20220809132027773.png)
### 0x05 主界面-Structures
结构体窗口
![](https://cdn.xyxsw.site/image-20220809132130778.png)
### 0x06 主界面-Enums
枚举类型界面
![](https://cdn.xyxsw.site/image-20220809132242739.png)
### 0x07 主界面-Imports
导入表
可以查看当前模块用了哪些模块的哪些函数
![](https://cdn.xyxsw.site/image-20220809132327043.png)
### 0x08 主界面-Exports
导出表
![](https://cdn.xyxsw.site/image-20220809151050575.png)
### 0x09 主界面-Strings
`Shift+F12`转到`String`界面,该操作会搜索程序中的字符串数据并展示
![](https://cdn.xyxsw.site/image-20220809153126737.png)
`Ctrl+F`后输入想要检索的字符可以快速搜索字符串
![](https://cdn.xyxsw.site/image-20220809153408536.png)
### 0x0a 其他界面-Functions
罗列了程序中用到的所有函数,包括底层调用的库的函数
其中一般来说`main`是程序的主要函数
![](https://cdn.xyxsw.site/image-20220809151328885.png)
### 0x0b 其他界面-Output
程序的输出信息都会展示在这里
其中包括插件的加载信息、插件/脚本运行时的输出等
另外还可以直接在下面输入 python 语句,方便在 ida 使用过程中简单的数据处理
![](https://cdn.xyxsw.site/image-20220809151536894.png)
### 0x0c 其他界面 - 导航栏
一个二进制文件包括不同的区块,这里显示程序的不同类型数据,不同的颜色代表二进制文件中不同的块
![](https://cdn.xyxsw.site/image-20220809151815243.png)
### 0x0d 常用快捷键
> 边用边记,多打打就会记住了!
>
> 只记录了部分
- `;` 为当前指令添加注释
- `/` 在伪代码中添加注释
- `g` 跳转到任意地址
- `Esc` 返回到跳转前的位置
- `n` 定义或修改名称,常用来修改函数和变量的名字
- `A` 按照 ASCII 显示数据
- `D` 分别按字节、字、双字来显示数据
- `F5`反编译汇编代码,得到 C 伪代码
- `Shift+F12` 搜索程序中的字符串
- `Alt+t` 搜索程序中的指令
- `Ctrl+x` 查看变量和函数的引用
- `Y` 修改变量/函数类型
- `F2`快速下断点
### 0x0e 常用插件
> 具体安装和使用不在此展开了
- [Find Crypt](https://github.com/polymorf/findcrypt-yara) -- 寻找常用加密算法中的常数(需要安装 [yara-python](https://github.com/VirusTotal/yara-python)
- [Keypatch](https://github.com/keystone-engine/keypatch) -- 基于 Keystone 的 Patch 二进制文件插件
- [LazyIDA: Make your IDA Lazy!](https://github.com/P4nda0s/LazyIDA) -- 快速 Dump 内存数据
- [Finger](https://github.com/aliyunav/Finger) -- 函数签名识别插件
- [D810](https://gitlab.com/eshard/d810) -- 去混淆插件
## 0x10 IDA Python
IDA 提供可与其交互的 IDA Python 接口,可以使用 Python 做很多的辅助操作
![](https://cdn.xyxsw.site/image-20220809154742462.png)
可以参考这篇文章了解常用的接口
[IDA Python 常用函数 | 4nsw3r's Blog](https://4nsw3r.top/2022/02/11/IDA%20Python%20%E5%B8%B8%E7%94%A8%E5%87%BD%E6%95%B0/)
## 0x11 IDA 动态调试
> 暂时只对 Windows 和 Linux 下的文件调试做介绍Mac 和 Android 下的文件调试有待读者后续探索
### 调试 Windows 下的文件
可以先在汇编代码或伪代码界面下断点,然后`F9`选择调试器,这里直接选`Local Windows Debugger`
![](https://cdn.xyxsw.site/image-20220809160044665.png)
之后就可以用 F7(单步不跳过执行)/F8(单步跳过执行)/F9(继续执行,遇到断点停止) 进行调试
![](https://cdn.xyxsw.site/image-20220809163138453.png)
### 调试 Linux 下的文件
可以先在汇编代码或伪代码界面下断点
![](https://cdn.xyxsw.site/image-20220809155352920.png)
由于 Linux 下文件调试比较特殊,需要远程起一个服务器运行服务端,这里可以使用**Vmware**或者**WSL2(Windows subsystem Linux)**进行调试
因篇幅有限,在这里直接贴篇链接供大家学习并选择调试方式
- Vmware 调试 [IDA 动态调试 ELF](https://bbs.kanxue.com/thread-247830.htm)
- WSL 调试(安装好 WSL 直接运行 ida dbgsrv 目录下 linux_server 文件即可以)
后面是一样的调试步骤
## 0x12 一个简单程序的分析
### 源代码
```c
#include <stdio.h>
#include <string.h>
void change(char* str) {
for (int i = 0; i < strlen(str) ; i++) {
str[i] = str[i] - 1;
}
}
int check(char* str){
return strcmp(str, "ek`fzHC@^0r^m/s^b/lo0dw2c|") == 0;
}
int main() {
char input[100];
scanf("%100s", input);
change(input);
if (check(input)) {
printf("You are right\n");
}
else {
printf("You are wrong\n");
}
}
```
#### 分析历程
##### 将程序拖入 IDA
![](https://cdn.xyxsw.site/image-20220809173439491.png)
![](https://cdn.xyxsw.site/image-20220809173548998.png)
##### F5 分析查看伪代码
![](https://cdn.xyxsw.site/image-20220809173627488.png)
发现有`change``check`的自定义函数
`n`修改一下变量名
![](https://cdn.xyxsw.site/image-20220809174001600.png)
![](https://cdn.xyxsw.site/image-20220809174015603.png)
分别进入里面查看函数逻辑
##### 查看函数逻辑
change 函数
![](https://cdn.xyxsw.site/image-20220809174035800.png)
check 函数
![](https://cdn.xyxsw.site/image-20220809174058831.png)
###### 静态分析逻辑
change 函数是对输入字符串的每一个字节进行修改
然后在 check 函数进行比较
###### 动态分析逻辑
在 change 函数进入前下好断点
随意的进行一些输入
![](https://cdn.xyxsw.site/image-20220809174913326.png)
然后断下来
![](https://cdn.xyxsw.site/image-20220809174957987.png)
F7 进入函数进行单步不跳过调试
![](https://cdn.xyxsw.site/image-20220809175413448.png)
遇到类似`strlen`等库函数可以 F8 单步调试跳过
![](https://cdn.xyxsw.site/image-20220809175459668.png)
可以发现输入字符串的每一个字节的 Ascii 值都减小了 1
##### 脚本编写
试试写一个脚本解出这道题吧!