From c9930ebfcb719df815133ae9ad6af70de9b8eaf1 Mon Sep 17 00:00:00 2001 From: unknown <2239888030@qq.com> Date: Wed, 19 Jul 2023 20:23:54 +0800 Subject: [PATCH] =?UTF-8?q?update:=20=E8=AE=A1=E7=AE=97=E6=9C=BA=E5=AE=89?= =?UTF-8?q?=E5=85=A8=E2=80=94=E2=80=94=E5=9F=BA=E7=A1=80=E5=B7=A5=E5=85=B7?= =?UTF-8?q?=E4=BD=BF=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../6.2.1基础工具的使用.md | 302 +++++++++++++++++- 1 file changed, 296 insertions(+), 6 deletions(-) diff --git a/6.计算机安全/6.2.1基础工具的使用.md b/6.计算机安全/6.2.1基础工具的使用.md index 0524324..28f87bd 100644 --- a/6.计算机安全/6.2.1基础工具的使用.md +++ b/6.计算机安全/6.2.1基础工具的使用.md @@ -1,12 +1,302 @@ # 基础工具的使用 -# IDA pro - IDA pro (交互式反编译器专业版)是二进制安全研究人员必备的反汇编、反编译工具,功能繁多而强大,反编译结果清晰明了。 -## 安装 +IDA pro 是收费软件,价格极其昂贵,一套完全版人民币 10W 左右,因此可以到各大网站下载破解版,注意到一些知名网站下载,比如吾爱破解等,防止下载的软件包含病毒。在编写此文时,IDA pro 更新到了 8.3,网上能找到的最新的版本为 7.7。本文由于版权原因,不提供下载链接。 -IDA pro 是收费软件,价格极其昂贵,一般人买不起,因此可以到各大网站下载破解版,注意到一些知名网站下载,比如吾爱破解等,防止下载的软件包含病毒。在编写此文时,IDA pro 更新到了 8.0,网上能找到的最新的版本为 7.7。本文由于版权原因,不提供下载链接。 +# 简易使用方法 + +> 本文档仅作快速入门,更加细节的内容还请读者查阅其他资料以及多加实践。 +> +> 另外在任何使用上操作的问题,都可以在群里提问! + +## 0x00 IDA 简单介绍 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809113855166.png) + +IDA是一款交互式反汇编和反编译工具,其支持文件类型和文件平台丰富。 + +可静态分析也可动态调试,可以说是二进制手的吃饭工具了 + +## 0x01 启动界面 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809114834244.png) + +``` +NEW:打开IDA同时弹出对话框选择要打开的文件 +Go:单独打开ida,打开界面将文件拖入 +Previous,或者下面的列表项:快速打开之前的的文件 +``` + +这里选择Go键,打开以后,将文件拖入 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809124156697.png) + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809124408179.png) + +这里按我们的默认选项点击OK即可 + +## 0x02 关闭界面 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809125554853.png) + +``` +第一个选项:就是不打包数据包文件,那么这些数据库文件就会分开这放。 +第二个选项及图中选项:就是把这几个数据库文件打包为1个(如.i64文件),下次打开我们分析的文件的时候,打开这个文件即可。 +第三个选项:不会删掉数据库文件,而是打包压缩到存储的文件里面去了。 +下面两个选项 +第一个选项:回收垃圾,如果打包文件太大了,可以选用这个选项,清理不必要的内存 +最后一个选项:当分析时候写错了,选中最后一个,最后一次打开的操作不保留了。(解决错误操作) +``` + +## 0x03 主界面- IDA View&Pseudocode + +反汇编代码的图表窗口 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809130857159.png) + + 按**空格键**切换成文本结构的反汇编 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809130940294.png) + + 按**F5**进行反编译跳转至`Pseudocode`(伪代码)界面 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809131038284.png) + +然后就可以分析代码逻辑了 + +直接点击函数名可以进入到对应函数内部查看函数逻辑 + +## 0x04 主界面- Hex View + +十六进制窗口(不太常用) + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809132027773.png) + +## 0x05 主界面-Structures + +结构体窗口 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809132130778.png) + +## 0x06 主界面-Enums + +枚举类型界面 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809132242739.png) + +## 0x07 主界面-Imports + +导入表 + +可以查看当前模块用了哪些模块的哪些函数 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809132327043.png) + +## 0x08 主界面-Exports + +导出表 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809151050575.png) + +## 0x09 主界面-Strings + +按`Shift+F12`转到`String`界面,该操作会搜索程序中的字符串数据并展示 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809153126737.png) + +按`Ctrl+F`后输入想要检索的字符可以快速搜索字符串 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809153408536.png) + +## 0x0a 其他界面-Functions + +罗列了程序中用到的所有函数,包括底层调用的库的函数 + +其中一般来说`main`是程序的主要函数 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809151328885.png) + +## 0x0b 其他界面-Output + +程序的输出信息都会展示在这里 + +其中包括插件的加载信息、插件/脚本运行时的输出等 + +另外还可以直接在下面输入python语句,方便在ida使用过程中简单的数据处理 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809151536894.png) + +## 0x0c 其他界面-导航栏 + +一个二进制文件包括不同的区块,这里显示程序的不同类型数据,不同的颜色代表二进制文件中不同的块 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/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://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809154742462.png) + +可以参考这篇文章了解常用的接口 + +[IDA Python 常用函数 | 4nsw3r's Blog](https://4nsw3r.top/2022/02/11/IDA Python 常用函数/) + +## 0x11 IDA 动态调试 + +> 暂时只对Windows和Linux下的文件调试做介绍,Mac和Android下的文件调试有待读者后续探索 + +### 调试Windows下的文件 + +可以先在汇编代码或伪代码界面下断点,然后`F9`选择调试器,这里直接选`Local Windows Debugger` + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809160044665.png) + +之后就可以用F7(单步不跳过执行)/F8(单步跳过执行)/F9(继续执行,遇到断点停止)进行调试 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809163138453.png) + +### 调试Linux下的文件 + +可以先在汇编代码或伪代码界面下断点 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809155352920.png) + +由于Linux下文件调试比较特殊,需要远程起一个服务器运行服务端,这里可以使用**Vmware**或者**WSL2(Windows subsystem Linux)**进行调试 + +因篇幅有限,在这里直接贴篇链接供大家学习并选择调试方式 + +- Vmware 调试 [IDA动态调试ELF](https://bbs.pediy.com/thread-247830.htm) +- WSL 调试 (安装好WSL直接运行ida dbgsrv目录下linux_server文件即可以) + +后面是一样的调试步骤 + +## 0x12 一个简单程序的分析 + +#### 源代码 + +```c +#include +#include + +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://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809173439491.png) + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809173548998.png) + +##### F5分析查看伪代码 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809173627488.png) + +发现有`change`和`check`的自定义函数 + +按`n`修改一下变量名 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809174001600.png) + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809174015603.png) + +分别进入里面查看函数逻辑 + +##### 查看函数逻辑 + +change函数 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809174035800.png) + +check函数 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809174058831.png) + +###### 静态分析逻辑 + +change函数是对输入字符串的每一个字节进行修改 + +然后在check函数进行比较 + +###### 动态分析逻辑 + +在change函数进入前下好断点 + +随意的进行一些输入 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809174913326.png) + +然后断下来 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809174957987.png) + +F7进入函数进行单步不跳过调试 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809175413448.png) + +遇到类似`strlen`等库函数可以F8单步调试跳过 + +![](https://blog-t0hka.oss-cn-hangzhou.aliyuncs.com/img/image-20220809175459668.png) + +可以发现输入字符串的每一个字节的Ascii值都减小了1 + +##### 脚本编写 + +试试写一个脚本解出这道题吧! -## 简易使用方法 -待更新~