UKFC逆向入门文档一

First Post:

Last Update:

什么是逆向工程(RE)

介绍逆向之前,首先看个例子:

在平时的玩耍中,你有没有见到这些东西:img

映入眼帘的各种无敌版、破解版小游戏便是用了逆向的技术。

逆向工程(Reverse Engineering),是一种技术仿造过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程,组织结构。其主要目的是,在无法轻易获得必要生产信息下,直接从成品的分析,推导产品的设计原理 ——维基百科

简单而言,一切从产品中提取原理及设计信息并应用于再造及改进的行为,都是逆向工程。

那么在信息安全中,逆向工程可以分析恶意软件病毒木马程序和其他恶意代码,以便了解它们的功能、目的和潜在的威胁;还可以用于评估软件或系统的安全性,发现潜在的漏洞和弱点。

逆向工程的典型应用

病毒分析

对于一个安全企业来说,比如360,它的病毒分析团队属于它的主业,还有金山毒霸,火绒等

一个经典的例子:熊猫烧香病毒

揭秘中国黑客大事件“熊猫烧香”全过程 - 知乎 (zhihu.com)

利用了Windows操作系统上的漏洞进行传播。它通过网络共享、邮件附件、可移动存储设备等途径传播,并且可以在感染的计算机上自我复制和传播。

一旦感染了计算机,熊猫烧香病毒会在系统中创建多个文件夹和文件,并修改注册表项以确保自身在系统启动时运行。它还会通过网络连接下载其他恶意软件和工具,进一步危害受感染的计算机。

熊猫烧香图片_百度百科

作为逆向工程师,要做的就是分析病毒样本,逆向出病毒做了什么,针对其行为研究出相应补丁

游戏保护

一些外挂:比如吃鸡游戏,如果你通过逆向分析找到每个玩家的坐标位置,是不是可以写一个透视G,前提是你知道其数据以什么形式存放在哪里。你甚至还可以修改攻击力、防御值,游戏的碰撞检测(两者间距离小于某个值)也可以实现飞天、穿墙等。

【吃鸡外挂】绝地求生透视自瞄到底是什么样子的?(油管转载)_哔哩哔哩_bilibili

漏洞挖掘

  • 通过分析开源软件的源代码,获取漏洞
  • 通过分析产品本身获取漏洞
  • 通过分析可以利用漏洞的软件样本
  • 通过比较软件前后补丁的差异

逆向扫雷

逆向扫雷游戏 | shimmer’s blog (shimmer123456.github.io)

逆向植物大战僵尸

修改阳光

修改冷却:1.单独追踪一个植物的冷却

2.修改代码逻辑,修改判断的部分(48728c)

什么是二进制文件

我们现在的编程一般都是使用高级语言,比如我们要编写一个简单的c语言程序

1
2
3
4
5
6
7
8
9
10
11
#include <stdio.h>
int main()
{
int cnt=0;
for(int i=0;i<=100;i++)
{
cnt+=i;
}
printf("%d",cnt);
return 0;
}

通过编译器就可以把这段高级语言通过编译,链接转换成一个二进制文件,在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)

BUUCTF在线评测 (buuoj.cn):upx

xor

异或有个特点,a ^ b = c ,那么c ^ a =b

BUUCTF在线评测 (buuoj.cn)

base64换表

常见加密算法之一

[SWPUCTF 2022 新生赛]base64-2 | NSSCTF

花指令

原理:在正常的程序中巧妙嵌入数据, 使得反汇编器在解析的时候,误认为是代码一同解析, 从而在静态分析层面干扰了逆向分析者, 这就是花指令。

花指令需要逆向分析者花时间将这些数据从程序中剔除掉, 还原原有正常程序, 从而正常地实现反汇编和反编译

[HNCTF 2022 WEEK2]e@sy_flower | NSSCTF

maze

BUUCTF在线评测 (buuoj.cn)