CTF逆向Re:零基础系统性入门教程-2-工具

目录

前言

第二章:逆向工程工具的应用场景与操作指南

简单介绍CTF的逆向工程

工具介绍

应用场景和操作指南

Windows逆向

Linux逆向

安卓逆向

鸿蒙逆向

小结

下一章:逆向工程题目分析流程和做题思路


前言

我看了不少逆向工程的视频和文章,发现一个普遍问题:大多数教程没有真正站在初学者的角度来讲解。很多作者以为理所当然的知识点,对新手来说可能完全摸不着头脑。比如一上来就讲寄存器、静态分析动态调试这些底层概念,当然这没有任何问题,因为这就是最底层的东西。

但是很多人常忽略一个事实:学习新事物都是一个从实践理解的过程。小学时我们都会说"Nice to meet you",但为什么不是"It is nice to meet you",直到高中我们才会思考这个问题,才明白这是不定式短语作主语。同样,初中物理我们先学接电路,到高中才学欧姆定律和电功率不是吗?

往往需要在实践中才能慢慢理解这些概念的意义。过早堆砌太多理论知识,反而容易让新手感到焦虑和挫败。所以在这篇文章里,我会尽量用初学者的视角(毕竟我自己也是刚入门),带大家轻松愉快地走进逆向工程的世界。


第二章:逆向工程工具的应用场景与操作指南

对于初学者来说,在接触CTF逆向工程时往往会存在诸多困惑:CTF的逆向到底要做什么?这些逆向工具有什么用?为什么要用这些工具?工具之间的关系是什么?怎么解出flag?等等。下面我来一一讲述。

简单介绍CTF的逆向工程

CTF中的逆向工程,简单来说就是从给定的程序或文件中找出其中隐藏的flag🚩。打个形象的比喻:开发者(厨师)通过一系列 “烹饪步骤”(代码逻辑、算法处理)将配料融入成品,逆向工程就像美食鉴赏,通过观察(收集信息),品尝(测试输入输出)、分析食材成分(反编译代码)、还原烹饪流程(跟踪指令执行),最终推导出核心配料的具体内容(flag🚩)。

工具介绍

首先我们知道,程序运行经历了从高级语言到汇编语言再到二进制的转换过程。最终,程序以二进制形式(0和1)存储在计算机中,这种格式对人类来说几乎无法直接阅读。而逆向工具可以将二进制代码转换回汇编语言。

有人可能会疑惑为何不能直接还原为高级语言?这是因为高级语言在编译为二进制时会丢失部分信息(如注释、函数名和变量名等),导致无法完全还原为原始的高级语言代码。因此,我们才需要使用逆向工具来分析。

应用场景和操作指南

一拿到逆向题目,首先要确定文件类型,最直观的方法是查看文件扩展名。根据具体情况,再选择相应的分析方法和解题流程。

逆向类型核心文件格式常见文件后缀 / 类型说明
Windows 逆向PE(Portable Executable).exe(可执行程序)、.dll(动态链接库)、.sys(驱动程序)Windows可执行文件多为PE格式,但需注意部分恶意程序会伪装后缀(如.txt.exe)。
Linux 逆向ELF(Executable and Linkable Format)无固定后缀(如a.out)、.so(共享库)、.ko(内核模块)Linux 下可执行文件通常无后缀,共享库以.so结尾,均为 ELF 格式。
Android 逆向DEX(Dalvik Executable)、APK、ELF.apk(应用安装包)、.dex(字节码文件)、.so(原生库)APK 是安卓应用的打包格式(本质是 ZIP 压缩包),内部包含核心的.dex文件;原生程序(C/C++ 编写)为 ELF 格式的.so

在比赛中,Windows逆向和Linux逆向是最常见的题型,通常还会有一道安卓逆向题。对于初学者,建议从Windows逆向入手,逐步过渡到Linux逆向,后者对Linux系统知识要求较高,入门难度较大。经过1-2个月的学习后,可以开始研究安卓逆向,不过这类题目相对较少。虽说安卓逆向是近年就业前景最好的。

在逆向前,我们需要一款工具来帮助我们了解程序的信息。我通常使用DIE作为分析工具,当然有更多大佬选择的是更加专业的Exeinfo PE。不过对于初学者来说,DIE会更加简单易懂。

分析过后我们可以看到,程序的操作系统是Windows,且是使用vs编译的,因此我们就可以初步推断题目属于Windows逆向。这里初学者容易有一个误区,并不是什么操作系统的文件,就一定要在什么操作系统来分析。通常Windows系统可以对所有系统进行逆向分析。

当然分析工具的用途不止于此,往后我在详细分析题目时会拓展其他用途。

DIE
Windows逆向

作为最常见的逆向题类型,技术生态成熟:逆向工具、调试方法(内核调试、用户态 Hook)等非常完善,资料丰富,入门相对容易。这里列举几个最常用的工具。

  • IDA Pro

对于“静态分析”(不运行程序分析代码),我首推IDA这款逆向工程领域最权威的工具。它不仅能够清晰展示程序的汇编代码,更凭借其强大的F5反编译功能,可以将汇编代码大概反编译为易读的C语言伪代码,大幅提升分析效率。当然其动态调试的能力也相当出色。建议初学者要花大部分时间来学习这款工具。

网上对于IDA的教学视频较少,如果是初学者入门的话,我推荐书籍《IDA Pro权威指南》,啃完这500页对你工具的使用提升非常快。当然,如果你想快速入门的话,这里推荐Sciurdae撰写的IDA Pro 反汇编器使用详解,能帮助你快速上手IDA。另外,我十分建议用IDA来分析自己写的C语言程序,来了解IDA反编译功能。

IDA中的F5反编译功能
  • x64dbg:

那么对于 “动态调试”(运行程序追踪逻辑) ,x64dbg允许在程序运行时暂停(断点)、查看 / 修改寄存器、内存数据、反汇编指令,追踪程序执行流程。支持设置多种断点(软件断点、硬件断点、内存断点等),精准定位关键代码(如注册验证、加密逻辑)。内置反汇编窗口,实时显示汇编指令,支持注释、标签,方便分析代码逻辑。可查看程序的内存布局、导入 / 导出函数、线程信息等,辅助理解程序结构。

x64dbg的官方宣传图

当然,考虑到初学者可能不太理解具体作用,没有关系,我会结合后面练题一并讲解。初学者只需要先将IDA学好就足够完成题目了。

  • ILSpy:

主要用于还原源代码为C#的程序(.NET),这里不详细展开,但是也要准备好这款工具。

Linux逆向
  • VMware Workstation Pro:

本质上来说,这并不是一款逆向工程的工具,但是必须要用到的工具。这是一款虚拟机工具,可以安装多种操作系统,以便分析不同的文件。同时,在虚拟机上分析文件,也避免了主机遭受病毒入侵等危害。因此,如果你逆向分析的不再是CTF赛题,而是真真实实的软件,请一定要使用虚拟机来保护好你的电脑。

分析Linux逆向首推Ubuntu和kali,建议上网查询如何配置环境,网上资源还是比较丰富的。

Kali
Ubuntu
  • IDA Pro:

IDA不但能静态分析Linux文件,还可以经行远程调试,通过自带的server插件将程序运行在虚拟机上,依然必备。

安卓逆向
  • jadx:

jadx 是一款开源的 Java 反编译工具,能够将 Android 的 Dalvik 字节码(如 APK、DEX 文件)转换为可读的 Java 代码。考虑到新手还没有学习Java,因此放到后面单独研究安卓逆向再深入探讨。

鸿蒙逆向

鸿蒙逆向的话,其实以前我也不了解,直到看到在2025年强网杯上出现的方舟字节码。不过这种情况也算少数,我们这里暂时先不了解,初学者可以先将重心放在其他方向。

小结

上述的工具都学习逆向必备的工具,至于一些进阶工具,初学者还不需要用到。如果刚入门感觉到比较迷茫的话,我推荐探姬大佬的【CTF快速入门手册】,里面会详细讲述入门的细节,同时还自建了Hello-CTF的教学网站,记录了详细的入门方法和资源。一定要相信自己,如果你已经准备好了IDA,那么就可以开始你的第一战啦:[SWPUCTF 2022 新生赛]easyre自己摸索摸索,答案就在眼前。

若文中存在任何学术疏漏,恳请各位专家不吝指正。


下一章:逆向工程题目分析流程和做题思路

posted @ 2025-10-20 14:31  Penetr4t10n  阅读(0)  评论(0)    收藏  举报  来源