CTF 实践 25 二进制软件反向分析工具和实践
重要声明
该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关
今天我们来笼统的说一下二进制逆向分析的工具
工具
1. 静态分析工具-IDA
这个工具可能都是无人不知无人不晓了吧啊哈哈哈
下面呢是这个工具的中文区购买地址(当然,想支持正版的可以购买一个)
http://www.qast.com/product/1588.html
说这个工具之前呢先来说说做恶意代码分析的一些基本常识
第一,就是不要在物理机上分析恶意代码,除非你指定了一台专用的物理机专门用于分析
第二,就是虚拟机在运行恶意代码之前要做好备份和快照
第三,就是不要用什么所谓的吾x破解专用虚拟机啊等等所谓的专用虚拟机,因为有人在我博客下留言说恶意文件无法运行啊诸如此类的,我叫他换一个纯净版的系统就解决了
第四,那我们要用什么类型的虚拟机呢?最好的虚拟机就是原版的Windows系统
https://msdn.itellyou.cn/
从上面这个网站下载BT之后,下载镜像就可以了
然后自己网上找个小的激活软件,激活一下,记得激活之前要做快照,激活失败了直接回滚
虚拟化软件呢还是建议大家用VirtualBox,为什么不建议VMware呢?我这里没说VMware不好啊各位大佬
老实说,其实我一开始也是装VMware,虽然VMware WorkStation是号称收费的,但是网上一堆的激活码搜一下就有了
装VMware的一个大问题就是一堆的驱动就给你上了,然后加上各种开机启动的骚操作和不轻量级(这是我的理由)
制作好自己的分析镜像之后,我们就开始安装一些必要的软件,像IDA啊,OD啊等等的
好了我们继续回到IDA上
IDA图标是这样的
整体的界面是这样的
为什么说IDA是最好的静态分析工具呢,因为他会自动帮你标出各个入参的参数名字
就像上面的CreateFileA,第一个入参eax对应的是lpFileName,于是我们就可以在大脑中有这样一个函数调用
CreateFileA(eax, 100000h, 1, 0, 3, 0, 0)
这样,当然还有其他很多有用的丰富的功能
这里就不一一列举了
那说到了静态分析神器,肯定也少不了我们的动态分析神器啦
2. 动态分析工具-ollydbg
OllyDbg(以其作者Oleh Yuschuk命名)是一个当源代码不可用时非常有用时强调二进制代码分析的x86 调试器,
它跟踪寄存器,识别过程,API调用,开关,表,常量和字符串,以及从目标文件和库中定位例程。它具有用户友好的界面,其功能可以通过第三方插件进行扩展
版本1.10是最终的1.x版本。版本2.0于2010年6月发布,OllyDbg已在此版本中从头开始重写。该软件是免费的,但共享软件许可证要求用户向作者注册
这个工具也是在逆向界可能无人不知无人不晓的类型
静态分析呢就是不用电脑来帮你运行代码,而是你在大脑中自己运行
动态分析就是用计算机来帮你运行,一步一步的,你可以实时的看到程序的各寄存器的值和输入输出情况
ollydbg图标长这样
打开之后界面是这样的(原始版本)
当然你可以下载吾x版的,那个界面会好看一些
下面的是吾x版的
在这里,你可以实时的查看每个寄存器的值,和内存中的数据是多少,这对于一些比较难的比如加解密函数来说,是会提供很大的分析便利的
3. 其他工具
其他工具在正式的分析环境中就肯定包含很多了
这里列举几个CTF中常用的
PEiD
这是一个查壳的软件
LordPE
一个dump工具
ImportREC
输入表修复工具
介绍完工具,我们来说一下实战吧
实战
本来是想用一个CTF题目来演示,但是想想还是算了
实战就留在下节课上
没什么比实际操作更有学习意义的了
本文完
推荐阅读
-
35 岁实现财务*,腾讯程序员手握2300万提前退休?-1000万房产、1000万腾讯股票、加上300万的现金,一共2300万的财产。有网友算了一笔账,假设1000万的房产用于自住,剩下1300万资产按照平均税后20-50万不等进行计算,大约花上26-60年左右的时间才能赚到这笔钱。也就是说,普通人可能奋斗一辈子,才能赚到这笔钱。在很多人还在为中年危机而惶惶不可终日的时候,有的人的35岁,就已经安全着陆,试问哪个打工人不羡慕?但问题是有这样财富积累必然有像样的实力做靠山。没有人可以不劳而获。 看到这里,肯定有人说,那么对于普通人来说,卷可能真就成了唯一的出路。但是卷也有轻松的卷,“偷懒”的卷法,对于程序员而言,刨除掉一时无法改掉的开会传统占用的大部分时间,如何把有限的时间和精力放在真正重要的架构设计、需求设计上,而不是重复的造*,编码、改bug、手动测试。因此在科技改变生活的今天,学会使用AI工具成为程序员们的必备技能。 以全栈式全自动的软件开发工具飞算SoFlu软件机器人为例,作为全球首款面向微服务架构设计和最佳实践的软件机器人,SoFlu软件机器人改变了原来手工编码的作业模式,通过可视化拖拽方式以及参数配置就能实现等同于编写复杂代码的业务逻辑,在设计业务逻辑时就完成了微服务应用开发,做到“业务即图,图即代码”,实现“软件开发,十倍提效”。 而作为飞算SoFlu软件机器人的一个重要组成部分,FuncGPT(慧函数)支持所有类型函数创建。通过自然语言描述Java函数需求,实时生成高质量、高可读性的Java函数代码。生成代码可直接复制到IDEA,或一键导入Java全自动开发工具函数库。 FuncGPT(慧函数)具有五大核心能力: ● 自然语言:通过自然语言即可生成函数,降低软件开发门槛。 ● 秒级函数开发:全自动秒级开发函数,秒级完成,效率千倍提升。 ● 一站式函数开发应用:函数生成即可直接应用,效率、安全有保障。 ● 质量可靠:生成的函数代码符合业界规范、具备良好的可读性,符合最优解。 ● 灵活生成:可以根据开发人员的具体需求生成并支持调整和修改。 以“将文件流转换为File对象”这个需求为例,以下是FuncGPT(慧函数)秒级生成的代码: / 类名:FileConverter // 函数名:convertStreamToFile // 函数功能:将文件流转换为File对象 // POM依赖包:无 import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; public class FileConverter { /** * 将文件流转换为File对象 * @param inputStream 文件流 * @param filePath 文件路径 * @param fileName 文件名 * @return 转换后的File对象 * @throws IOException 如果发生I/O异常 */ public static File convertStreamToFile(InputStream inputStream, String filePath, String fileName) throws IOException { File file = new File(filePath + File.separator + fileName); // 创建File对象 try (FileOutputStream outputStream = new FileOutputStream(file)) { // 创建文件输出流 byte buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { // 从文件流读取数据并写入文件 outputStream.write(buffer, 0, bytesRead); } } return file; // 返回转换后的File对象 } } // 函数示例 // 将文件流转换为File对象示例 // 入参:inputStream,文件流 // 入参:filePath,文件路径 // 入参:fileName,文件名 // 出参:file,转换后的File对象 // 调用示例: // InputStream inputStream = new FileInputStream("example.txt"); // String filePath = "C:\\Users\\User\\Documents"; // String fileName = "example.txt"; // File file = FileConverter.convertStreamToFile(inputStream, filePath, fileName); // System.out.println(file.getAbsolutePath); // 输出结果:例如,将文件流转换为File对象后,文件的绝对路径为:C:\Users\User\Documents\example.txt // 则输出结果为:C:\Users\User\Documents\example.txt 通过分析,不难发现以上代码:
-
CTF 实践 25 二进制软件反向分析工具和实践