UKFC逆向入门文档一
Last Update:
什么是逆向工程(RE)
介绍逆向之前,首先看个例子:
在平时的玩耍中,你有没有见到这些东西:
映入眼帘的各种无敌版、破解版小游戏便是用了逆向的技术。
逆向工程(Reverse Engineering),是一种技术仿造过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程,组织结构。其主要目的是,在无法轻易获得必要生产信息下,直接从成品的分析,推导产品的设计原理 ——维基百科
简单而言,一切从产品中提取原理及设计信息并应用于再造及改进的行为,都是逆向工程。
那么在信息安全中,逆向工程可以分析恶意软件、病毒、木马程序和其他恶意代码,以便了解它们的功能、目的和潜在的威胁;还可以用于评估软件或系统的安全性,发现潜在的漏洞和弱点。
逆向工程的典型应用
病毒分析
对于一个安全企业来说,比如360,它的病毒分析团队属于它的主业,还有金山毒霸,火绒等
一个经典的例子:熊猫烧香病毒
揭秘中国黑客大事件“熊猫烧香”全过程 - 知乎 (zhihu.com)
利用了Windows操作系统上的漏洞进行传播。它通过网络共享、邮件附件、可移动存储设备等途径传播,并且可以在感染的计算机上自我复制和传播。
一旦感染了计算机,熊猫烧香病毒会在系统中创建多个文件夹和文件,并修改注册表项以确保自身在系统启动时运行。它还会通过网络连接下载其他恶意软件和工具,进一步危害受感染的计算机。
作为逆向工程师,要做的就是分析病毒样本,逆向出病毒做了什么,针对其行为研究出相应补丁
游戏保护
一些外挂:比如吃鸡游戏,如果你通过逆向分析找到每个玩家的坐标位置,是不是可以写一个透视G,前提是你知道其数据以什么形式存放在哪里。你甚至还可以修改攻击力、防御值,游戏的碰撞检测(两者间距离小于某个值)也可以实现飞天、穿墙等。
漏洞挖掘
- 通过分析开源软件的源代码,获取漏洞
- 通过分析产品本身获取漏洞
- 通过分析可以利用漏洞的软件样本
- 通过比较软件前后补丁的差异
逆向扫雷
逆向扫雷游戏 | shimmer’s blog (shimmer123456.github.io)
逆向植物大战僵尸
修改阳光
修改冷却:1.单独追踪一个植物的冷却
2.修改代码逻辑,修改判断的部分(48728c)
什么是二进制文件
我们现在的编程一般都是使用高级语言,比如我们要编写一个简单的c语言程序
1 |
|
通过编译器就可以把这段高级语言通过编译,链接转换成一个二进制文件,在windows操作系统下就是一个exe,所谓二进制,就是该文件内部都是机器码,即0/1字符串构成的,比如我们可以用记事本打开该文件,发现一堆看不懂的东西
这些其实是机器码的ascll值。用010Editor 打开更直观
所以即使我们得到一个exe文件,我们是无法得知其内部的源码是什么样子的,这个时候就要借助我们的工具了
逆向工具
IDA
IDA全称是交互式反汇编器专业版
简单来说就是可以把机器码反编译为汇编代码,进一步反编为伪c语言的代码
一些快捷操作:
操作 | 效果 |
---|---|
Esc | 返回跟进处,返回上一个操作地址 |
A | 解释光标处的地址为一个字符串的首地址/C–>代码/D–>数据/A–>ascii字符串/U–>解析成未定义的内容 |
B | 十六进制与二进制数转换 |
C | 解释光标处的地址为一条指令 |
D | 解释光标处的地址为数据,每按一次将会转换这个地址的数据长度 |
G | 快速查找对应地址 |
H | 十六进制与十进制数转换 |
K | 将数据解释为栈变量 |
: | 添加注释 |
R | 编码转换 |
M | 解释为枚举成员 |
N | 重新命名 |
O | 解释地址为数据段偏移量,用于字符串标号 |
T | 解释数据为一个结构体成员 |
X | 转换视图到交叉参考模式 |
Shift + F9 | 添加结构体 |
空格 | 切换文本视图与图表视图 |
ALT + M | 添加标签 |
CTRL + M | 查看标签 |
CTRL + S | 查看段的信息 |
冒号 | 常规注释 |
CTRL + F12 | 函数调用图 |
Ctrl + F9 | 导入c头文件 |
F5 | 查看伪代码 |
Alt+T | 搜索文本 |
Alt+B | 搜索十六进制 |
ctrl+shift+w | 拍摄IDA快照 |
u | undefine,取消定义函数、代码、数据的定义 |
view–>open subviews | 可以恢复你无意中关闭的数据显示窗口 |
windows–>reset desktop | 可以恢复初始ida布局 |
option–>font | option–>font |
option–>general->Auto comments | 自动添加反汇编注释 |
多用用就记住了,不用刻意记
UKFC一位re大神的博客:IDA基本使用_ida显示机器码_烨鹰的博客-CSDN博客
举个一个栗子:
- reverse_1
CTF
在ctf中的逆向题,通常形式都是接受用户一个输入,经过加密后进行验证,我们要做的就是反推出这个输入是什么。
模仿
upx
Detect It Easy(Die)
xor
异或有个特点,a ^ b = c ,那么c ^ a =b
base64换表
常见加密算法之一
[SWPUCTF 2022 新生赛]base64-2 | NSSCTF
花指令
原理:在正常的程序中巧妙嵌入数据, 使得反汇编器在解析的时候,误认为是代码一同解析, 从而在静态分析层面干扰了逆向分析者, 这就是花指令。
花指令需要逆向分析者花时间将这些数据从程序中剔除掉, 还原原有正常程序, 从而正常地实现反汇编和反编译
[HNCTF 2022 WEEK2]e@sy_flower | NSSCTF