逆向工程(Reverse Engineering)入门指南
本文最后更新于100 天前,其中的信息可能已经过时,如有错误可以直接在文章下留言

本人小白一枚,水平不高,希望这篇文章能让你对逆向工程(英语:Reverse Engineering)有一些了解,或者引起你的一点点兴趣,那样的话,我也会很欣慰😂

1.什么是逆向工程?

(来自维基百科)逆向工程是一种技术仿造过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是,在无法轻易获得必要的生产信息下,直接从成品的分析,推导产品的设计原理。

维基百科上介绍的逆向工程面向的目标是很广泛的,而我们则专注于对计算机领域的软件进行逆向分析。

这里的软件包括移动手机软件和电脑软件,移动手机分为Anroid和IOS,当然近些年又出现了遥遥领先的HarmonyOS(华为鸿蒙),电脑的系统一般分为我们Windows、Linux和MacOS,而不同操作系统底层架构和编译工具肯定有差异,他们上面的软件程序肯定也有所不同。再加上编写一个软件程序的计算机语言众多,有C、C++、C#、Java、Python等。

那我们逆向工程面向的目标就相当的多了,作为一名逆向人,你需要学的东西也会覆盖各种语言,各种平台系统的不同软件程序的特点。所以学习的路很长,切不可心急。

一般,CTF中的逆向工程题目形式为:程序接收用户的一个输入,并在程序中进行一系列校验算法,如通过校验则提示成功,此时的输入即flag。这些校验算法可以是已经成熟的加解密方案,也可以是作者自创的某种算法。比如,一个小游戏将用户的输入作为游戏的操作步骤进行判断等。这类题目要求参赛者具备一定的算法能力、思维能力,甚至联想能力。(这段话来自《从0到1 CTFer成长之路》)

举个简单的例子,给你一个程序,我们要获取flag,必须输入正确的密码。我们通过常用的逆向工具可以获取得到他检验输入密码是否正确的过程。比如他要求你输入4位的密码,对第一位的输入+5,对第二位的输入×3,对第三位的输入×2,对最后一位的输入+2,检验你输入的密码经过它的加密处理之后,是否等于6666,那么我们逆向思维就可以知道,它的密码是1234。逆向工程通常就是需要我们以这样的逆向思维去思考问题,当然,并不会这么简单。

2.为什么要对软件程序进行逆向?

发现安全隐患:逆向工程可以帮助安全专家发现软件中的漏洞和安全隐患,从而提供相应的安全建议和措施,如果说你作为一个攻击的人员,可以对一个软件程序进行成功破解,那这个软件当然就是存在安全问题需要改进的。

防御恶意软件:通过对病毒、木马、蠕虫等恶意软件进行逆向分析,可以了解其内部运行机制,并开发相应的防御措施。相信同学们平常也会遇到什么2345全家桶,还有手机电脑软件强行弹出广告,如果你有比较强的应用到实际中的逆向能力,就有一定的应对方法。

恢复丢失信息:对于一些老旧或不再维护的软件,原始的开发文档和源代码可能已经丢失。逆向工程可以帮助大概恢复这些信息,确保关键的技术知识不会丢失。

分析竞争对手产品:企业有时会通过逆向工程来研究竞争对手的产品,以了解其功能和性能,从而改进自己的产品。

遵守法律法规:逆向工程行为在某些情况下可能涉及到法律和道德问题,会有黑灰产存在,比如对一些付费软件的破解,并大量传播。通过逆向工程获取并使用受著作权保护的软件源代码,未经许可而将其用于开发新产品,这种行为也可能被视为侵权。

我们网络空间安全的要注意法律的红线不能踩,所以大家第一个学期都会学习网络空间安全法🤣

3.怎么开始逆向

1.学习C语言与汇编语言。

在开始逆向之前,首先你得要学习C语言和汇编语言。上面提到了很多的编程语言,但是入门的时候你并不需要去学习这么多的语言。从C语言开始是一个比较好的选择,这里推荐bilibili上鹏哥的C语言讲解,下面是链接。

c语言编程C语言程序设计c语言考研复试C语言基础入门教程专升本c语言视频教程c语言计算机二级考试零基础入门教程c语言考研复试c语言视频教程c语音C语言期末C语言_哔哩哔哩_bilibili

这个视频讲的比较详细,且时长较长。视频在讲C语言的过程当中讲解了计算机中的很多基础的知识,这些基础的知识在后续汇编语言的学习当中还会接触到,如果你看的是上面的视频,指针和指针之前的知识都要好好学。后面的可以选择看。

小白学习第一门编程语言的过程通常都是比较吃力的,但是学过一门语言之后,后面再学另一门语言就没那么艰难了,可以举一反三了。

但是汇编语言和高级语言区别较大,学习汇编语言依旧很有很有挑战性。你可以一样在bilibili上面搜索到相应课程,其中小甲鱼和贺利坚老师的视频播放量是高的,这里不做推荐,可以选择自己喜欢的视频学习。他们的视频都是按照王爽的《汇编语言》来讲的。

汇编语言在逆向工程中极其重要,它就相当于你的“内功”,不修“内功”,难成大器,刚开始学习它你可能还是会有点懵逼,但是可以在后续的逆向学习中逐渐加深对汇编的理解。

2.把Python语言作为你的工具

CTF中比赛无论哪个方向都避不开Python语言,你会在大学的第一个学期就学习Python语言,当然在入门的时候你不用专门的花很长时间去学习它,你只用先掌握Python的基本语法,基本语句,然后在后续的解题当中遇到一些关于Python的新的知识点,再去补充学习即可。

如果你先学习了C语言,那么Python的语法你也一定可以很轻松的明白,但是Python提供了丰富的库和工具,这是C语言所不具备的,Python的代码无疑是最简洁的,利用它来写解题代码有时可以节省很多的时间,它的一些库在逆向中有时也会使用到,而且Pwn、Crypto、Web、Misc也要大量使用Python,学习好这门工具准没错!👌

3.利用好你的“武器”

下面介绍的工具会伴随你的逆向生涯,他们是你的“武器”,介绍部分来自《从0到1 CTFer成长之路》

1.IDA Pro

IDA(Interactive DisAssembler)Pro(以下简称IDA)是一款强大的可执行文件分析工具,可以对包括但不限于x86/x64、ARM、MIPS等架构,PE、ELF等格式的可执行文件进行静态分析和动态调试。IDA集成了Hex-Rays Decompiler,提供了从汇编语言到C语言伪代码的反编译功能,可以极大地减少分析程序时的工作量

IDA的正版是收费的,所以一般都是用的……

下载链接:https://pan.baidu.com/s/1m-FQW220vqYNJAN7IBFGpg?pwd=1234
提取码:1234

我们逆向工程主要用的是IDA,所以我们要学习好IDA的使用。这里我主要提供的是两个版本,推荐在电脑上下载至少两个版本的IDA,以防止出现意外,其他版本也可自行百度获取。

2.OllyDbg和x64dbg

OllyDbg是Windows 32位环境下一款优秀的调试器,最强大的功能是可扩展性,许多开发者为其开发了具备各种功能的插件,能够绕过许多软件保护措施。但OllyDbg在64位环境下已经不能使用,许多人因此转而使用了x64dbg。OllyDbg和IDA最大的区别就是,其无法像IDA一样反编译,所以它对你的理解汇编的能力要求较高。

下载链接:爱盘 – 最新的在线破解工具包 (52pojie.cn)

上面的是吾爱破解论坛的爱盘,里面包括了大多的反编译工具和逆向工具,这里介绍的三种工具都有,而且也更新。

3.Jadx

jadx是一个强大的反编译工具,主要用于逆向工程分析,尤其针对Java和Android应用程序的反编译。jadx具备图形化界面,支持拖拽式操作,可以将编译后的字节码文件反编译成Java代码,并且可以导出为Gradle工程。这些特点使得jadx成为逆向工程师、安全研究员以及软件开发人员的重要工具之一。在反编译过程中,jadx能够处理多种格式的文件,包括apk、dex、jar、zip、class和aar文件,这极大地扩展了其应用场景。反编译后的文件不仅包括Java源代码,还涵盖相关的资源文件,如图片和布局文件

官方下载链接:Release 1.5.0 · skylot/jadx (github.com)

4.Detect It Easy

(简称DIE)是一个轻量级且高效的跨平台工具,用于识别和分析各种文件类型的属性。它专为安全研究人员、逆向工程师和软件开发者设计,帮助他们快速了解未知或可疑文件的真实身份。

做题目前一般都会查看一个软件程序的信息,比如是否加了壳,是用什么语言编写的,等等。DIE这样的工具就可以帮助我们获取倒一些线索,类似的工具还有ExeinfoPe。

下载链接在爱盘里。

这里只介绍了四种工具,但是反编译和逆向分析的工具有很多,而且也各有各的特点。怎么使用它们,什么时候使用哪一个工具,这取决于你的问题。发现问题,并用你的“武器”解决问题。

4.知识点

学习所有的逆向常用加密算法,包括

Base64
TEA
XTEA
XXTEA
RC4
AES
DES
CRC32
CRC64
SM4
BlowFish
RSA

这里只列出了出现频率较高的加密算法,当然并不止,所有的加密算法你都要如何辨认,要做到给出一段它们的加密代码,你就要能知道是哪一种加密算法,当然,IDA中有插件可以帮助你识别出部分加密算法,但是若稍加改动,IDA就做不到了。其中有一些的加密原理较为复杂,建议对于一些不难的加密算法要认真看它的加密过程,学习加密原理。而较为复杂的加密算法,如AES、DES、SM4等,也要知道个大概,和辨别出它们的算法特征和特征值。

看到这里你可能有些害怕,你先别急,一下子学完,当然是不现实的,可以慢慢来。

可以和题目结合来学习加密算法,做到加强记忆,不然很容易忘,反正我学了,有部分较为复杂的都不太记得起来🤣👌

然后就是一些常见的题目类型,有

脱壳
花指令
控制流平坦化
SMC
SEH
反调试
VM虚拟机保护
各种语言的逆向

当然这只是一小部分,技术在更新,CTF中的题目自然也会更新,一些老旧的知识只会成为一道题目的考点之一,关于题目类型和题目用到的知识点,当然需要你在做题的时候去领悟。

国内有很多的做题平台,如

攻防世界
NSSCTF
BUUCTF

你也可以找一些已经比赛结束的题目来看看。

4.相关书籍

1.《逆向工程核心原理》

比较适合入门看,作者手把手教你用OllyDbg做实验,并教会你一些逆向知识,作者会把你当成小白,所以讲的也比较详细,最好跟着作者一起做实验,他还会给你鼓励和一些鸡汤。这本书没有IDA的使用。

2.《从0到1:CTFer成长之路》

这本书是有CTF全方向的,所以讲的自然不会特别详细,但是逆向工程篇前面关于IDA的使用,一些快捷键还是值得一看的。

3.《加密与解密》

书特别的厚,听说是逆向工程必看的书籍,我买了,但还没开始看,所以不做评价。

4.《C++反汇编与逆向分析技术揭秘》

好像是讲汇编的一本书,没看过,不做评价。

❤️❤️❤️❤️❤️❤️❤️❤️❤️❤️

当然,逆向工程的书并不止这几本,如果你想买纸质版,上面的书不打折的话都会比较贵,推荐打折比较多的时候再购买

电子版下载链接:https://pan.baidu.com/s/1_Y_BHkGKVe5y2FgV-YeXHA
提取码:1234

倘若电子书内容有问题,我不背锅🤣👌

5.一些建议

1.学会魔法上网,方便利用外网资源

2.如果个人喜欢记录,可以搭建属于自己的博客

3.可以多去看别人的博客

最后祝你好运

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇