写给小白看的,逆向工程怎么上路?

逆向工程入门简述 在写这片文章时,本人入坑逆向也没有多久,作为小白,文章重点探讨小白入门的一些基本要点,如有大佬翻牌,还望多指点。本文仅作为学习交流,请勿用作非法用途。什么是逆向?通俗来讲,逆向工程就是将机器才能够懂的机器代码(0101二进制代码)翻译成人能够读懂的代码(汇编、smali代码)。但实际情况往往是,我们只寻找关键的代码去翻译或仅了解其业务逻辑,因为要将所有的机器代码翻译出来,工作量是极其巨大的且繁琐的。 阅读详情

在这里插入图片描述

什么是逆向工程

先给大家出一道思考题

用C语言设计一个程序,验证输入的密码是否是“12345678”,如果验证成功,就输出“success”,如果验证失败,则输出“failed”。

我想,大部分新手小白估计会这么写:

#include <stdio.h>
#include <string.h>

int main() {

    char buf[10] = {0};
    scanf("%s", buf);
    if (strcmp(buf, "12345678") == 0) {
        printf("success");
    } else {
        printf("failed");
    }

    return 0;
}

上面的代码编译后,会生成一个可执行程序,咱们来对这个可执行文件进行一下反编译,看看能看到什么?

下图是在反编译神器IDA中,可执行文件反编译出来的汇编指令图:
在这里插入图片描述
可以非常清晰的看到一些字符串的信息:“success”、“failed”、"1234567。

再认真一看,main函数中有一个分支判断,根据判断的结果,走入左右两个分支,分别输出"success"和"failed"。

如果新手看不懂上面的反汇编图,那可以再使用IDA的神级功能:F5反编译高级语言功能,直接将上面的汇编程序再进一步还原成C语言。

在这里插入图片描述
可以对照一下上图中的C函数代码和原来我们的源代码,还原度非常的高了,字符串比较的功能逻辑暴露无遗

可以看到,通过这种方式进行密码匹配,非常不安全,对方拿到你的程序一反编译,就能看到密码是什么了。

不过咱们今天的文章主题不是探讨如何进行安全地进行密码比较,而是另一个主题:逆向工程。

什么是逆向工程,维基百科中的解释如下:

逆向工程(Reverse Engineering),又称反向工程,是一种技术过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能性能规格等设计要素,以制作出功能相近,但又不完全一样的产品。

逆向工程的概念起源于商业和军事领域,后延伸到软件领域。

在软件领域,通过对程序文件进行逆向分析,推导出程序对源代码设计的过程,称为软件逆向工程。比如上面通过分析可执行文件还原出C代码,分析jar包/class文件还原出Java源码,这都属于软件逆向工程。

软件逆向工程是网络安全领域中的一个重要分支,网络黑客通过逆向工程可以获得目标的程序原理,破解软件的权限,这一般发生在商业软件领域。另外一方面,黑客通过逆向分析也常用来发现软件漏洞,用来对其发起攻击,Windows作为一个不开源的操作系统,就经常遭遇这样的事情。

本文就来探讨一下,逆向工程一般是怎么进行的,需要学习哪些东西?

程序反编译

逆向的一开始,通过会对目标进行反编译。

作为软件开发者,对编译这个词应该不会陌生,我们写好了程序代码,然后使用编译器将其转换成可执行的程序,这个过程叫做编译。

反编译,自然就是这个过程的逆过程,那该选择什么样的程序进行反编译呢?

对于C、C++、Golang等类型语言编写的程序,我们一般使用IDA进行反汇编。

在这里插入图片描述
对于Java语言编写的class文件和jar文件,我们一般使用jd-gui进行反编译。

对于C#语言编写的可执行程序,我们一般使用reflector进行反编译。

所以学习上面三款反编译工具的使用对学习逆向工程非常重要

可执行文件格式

不同的操作系统平台具有不同的可执行文件格式,如Windows上的PE文件、Linux平台的ELF文件、MacOS上的Mach-O文件

一个可执行文件中除了源代码生成的汇编指令,还有静态数据(如代码中引用到的字符串),导入导出信息,文件属性信息等等,掌握提取这些信息,会对咱们了解目标程序非常有帮助。

在这里插入图片描述
这就需要学习不同平台上可执行文件的格式,尤其是PE文件和ELF文件,是逆向工程中最常打交道的文件格式。

CPU指令集

在逆向分析程序时,最主要的精力和时间就是在阅读和分析反编译出来的汇编指令。

所以CPU的指令集和汇编语言是搞逆向的同学必学的一门课。

常见的PC端CPU就是Intel的x86、x64和AMD64,移动端的就是ARM架构。建议先从最基本的x86开始学习,尤其要注意网络上很多教程讲的还是16位实模式下的汇编语言,非常容易误导人。实模式当然要了解,但要把精力放在保护模式下32位汇编语言。

在这里插入图片描述
等x86入了门,可以扩展学习x64,到后期再扩展学习ARM。

学习汇编语言,不仅仅是学习汇编指令,更是在学习了解CPU,CPU有哪些寄存器,分别有什么用,它是如何访问内存,如何进行寻址,如何进行运算等等。

高级语言特性

咱们逆向工程的目标大都是用C/C++/Java/C#这样的高级语言编写出来的程序,要想还原出程序的代码逻辑,如果不懂高级语言本身那肯定是不行的。

当然,做逆向的同学,不必要像专业的开发同学那样对这些语言的特性烂熟于心,掌握很多编程技能,这倒不用。

但掌握这些语言的基本编程技能还是有必要。拿C语言来说,C语言中函数调用原理,参数如何传递,函数中的局部变量如何分布,数组如何存储,结构体成员如何内存布局,指针又是如何实现的等等,这些基础概念咱们得知道,不然拿到反汇编代码,也不知道如何与高级语言进行转换。
在这里插入图片描述
像上面说到的这些C语言知识,学习的时候要自己对比源码和编译后的汇编指令长什么样,反复对比学习,产生条件反射。除了这些,还要关注C++中面向对象实现原理,虚函数机制,this指针如何传参,new和delete/delete []等等在汇编指令层如何实现。

有些人说,咱不是有F5大法吗,直接一键搞定?当然F5功能非常强大,我也不反对使用工具,但我们不能过分依赖于工具,不然就变成一个彻底的工具人,尤其是对于初学者,自己尝试从汇编指令转换成高级语言,会让自己对技术底层原理理解的更加透彻。而且,有很多时候F5功能用不了,那个时候还得靠自己的知识上!

软件调试

很多时候,光靠静态分析无法实现目标,比如程序进行了加壳等技术,在静态分析下看到的全是错误的指令代码,甚至让反编译工具无法分析。

这个时候,就需要结合动态分析技术一块儿上,让程序实际运行起来,再来对其进行分析,所以,掌握软件调试技术,也是逆向工程中不可缺失的一环

在这里插入图片描述

结语

以上,就是我总结的几点学习逆向工程需要关注的知识点,希望对大家有帮助。
在这里插入图片描述
另外,我整理了一套逆向工程学习的书籍、资料、软件工具、使用教程,已经打包好了,由于资料敏感,就不公开传播了,有需要的朋友,可以点击下方,即可免费领取

【资料分享】

在这里插入图片描述

CTF逆向Reverse入门学习路线(面向小白) CTF逆向 Reverse入门学习路线(入门指南)面向小白 阅读详情

相关推荐

CTF逆向工程实战:从行为分析到算法识别的通用解题思路

逆向工程是信息安全领域的核心技术之一,涉及对软件二进制代码的分析与理解,以揭示其内部逻辑、算法或潜在漏洞。其基本原理是通过静态分析(如反汇编)与动态调试(运行时监控)相结合,解析程序执行流程和数据变换过程。这项技术的核心价值在于漏洞挖掘、恶意代码分析、软件保护评估及CTF竞赛解题。在CTF(Capture The Flag)竞赛中,逆向工程题目常要求参赛者分析给定的可执行文件,找出隐藏的flag或通过特定验证。解题通用思路通常始于行为分析,通过观察程序输入输出、文件与网络行为快速定位关键点,再结合字符串检索

weixin_30902251的博客 446

编程逆向基础

编程逆向基础

m0_37833811的博客 1444

CTF竞赛入门指南:从Web安全与逆向工程开启网络安全实战之路

网络安全的核心在于理解系统漏洞与攻防原理。在实战环境中,通过模拟攻击与防御,可以深入掌握漏洞挖掘、代码审计和协议分析等关键技术。CTF(Capture The Flag)竞赛正是这样一个理想的训练场,它将抽象的安全概念转化为具体的挑战任务,让学习者在解决实际问题的过程中锻炼工程实践能力。对于初学者而言,Web安全和逆向工程是两个极佳的切入点。Web安全聚焦于应用层漏洞,如SQL注入和XSS,需要理解HTTP协议、前后端交互及数据流处理;而逆向工程则侧重于程序分析,要求具备汇编语言阅读和调试能力,以解密程序逻

weixin_33889245的博客 465

如何学习逆向工程?

拿C语言来说,C语言中函数调用原理,参数如何传递,函数中的局部变量如何分布,数组如何存储,结构体成员如何内存布局,指针又是如何实现的等等,这些基础概念咱们得知道,不然拿到。咱们逆向工程的目标大都是用C/C++/Java/C#这样的高级语言编写出来的程序,要想还原出程序的代码逻辑,如果不懂高级语言本身那肯定是不行的,所以一定的编程功底是必须的。学习汇编语言,不仅仅是学习汇编指令,更是在学习了解CPU,CPU有哪些寄存器,分别有什么用,它是如何访问内存,如何进行寻址,如何进行运算等等。

VN520的博客 2534

AI辅助CAN总线逆向工程:从报文解析到DBC生成实战

汽车电子控制系统高度依赖CAN总线通信,但底层报文如同黑盒密文。理解ID、DLC、数据字节与信号语义,是进行发动机移植、混动系统改装或故障诊断的基础。传统逆向依赖人工逐字节比对,效率低下且易出错。借助AI技术,可快速分析海量报文,识别发动机转速、车速等关键信号,辅助生成DBC文件,并基于UDS诊断协议验证解析结果。本文以BMW i8混动动力总成移植项目为背景,完整拆解AI+CAN总线逆向工作流,涵盖环境搭建、工况采集、Python可视化、提示词工程及三级验证机制,为整车逆向、嵌入式开发及协议分析提供可落地的

weixin_30367873的博客 372

从CTF入门到实战:二进制漏洞利用与逆向工程学习路径解析

二进制安全是网络安全领域的核心技术方向,其核心在于理解程序在内存中的运行机制与数据交互原理。通过分析内存布局、函数调用约定和指令执行流程,安全研究人员能够识别软件中的潜在漏洞。这项技术的价值在于从底层揭示漏洞成因,为漏洞挖掘、恶意代码分析和系统防护提供理论基础。在CTF竞赛、渗透测试和漏洞研究中,二进制安全技能被广泛应用于栈溢出、堆漏洞利用和逆向工程等场景。本文以GitHub热门项目“BinaryAbyss”为例,结合pwntools、IDA等工具链,系统讲解从环境配置、漏洞原理到利用技术的完整知识体系,特

weixin_30696427的博客 464

逆向编程一,PE结构拉伸内存

PE的加载从文件到内存有一个拉伸的过程,拉伸的原因是因为PE在文件中的对齐字节和在内存中的对齐字节可能不一样(文件对齐字节<=内存对齐字节,为了节省磁盘空间,目前的pe文件大部分文件和内存对齐字节都是一样的)。文件对齐字节在可选PE头里: _IMAGE_OPTIONAL_HEADER: 32 4 SectionAlignment 内存对齐 当加载进内存时节的对齐值(以字节计)。它必须≥FileAlignment。默认是相应系统的页面大小。 36 4 Fi..

cszrydn的专栏 927

新发的日常学习——IDA实战进阶,从静态分析到动态调试so/dll(逆向工程利器)

本文深入探讨了IDA在逆向工程中的高级应用,从静态分析到动态调试so/dll文件的实战技巧。通过函数识别、结构体创建、FLIRT签名等静态分析方法,结合动态调试中的断点设置、寄存器监控等技巧,全面提升逆向工程效率。文章还分享了破解加密算法和软件保护的实战案例,是逆向工程学习者的进阶指南。

weixin_33721427的博客 342

PowerDesigner16逆向工程从现有数据库生成PDM 以及 ODBC 数据源管理程序(32位)添加数据源出现"未发现 Oracle(tm)客户端和网络组建..."的问题 解决办法

powerdesigner16逆向工程,从远程oracle12c数据库导出PDM PowerDesigner逆向工程从现有数据库生成PDM 如题,我想对于一个旧系统或者帮别人的系统进行擦屁股时,数据库设计以及关系都是非常好的切入点; 因为我要使用powerdesigner16 本文使用工具: 1、远程数据库Oracle12c 2、powerdesigner16 但是在配置Configuration...

yoghourt_queen的博客 2161

安卓逆向工程实战指南:从APK结构到动态调试与脱壳

逆向工程是一种通过分析已编译程序来理解其内部结构、运行逻辑与安全机制的技术。其核心原理在于将二进制代码或字节码转换为可读形式,从而揭示软件的设计思路与数据流。这项技术的价值在于,它不仅是移动安全领域进行漏洞挖掘、恶意软件分析和隐私审计的基石,也为开发者提供了验证自身代码防护效果、学习优秀架构设计的途径。在实际应用场景中,安卓应用(APK)作为主要分析对象,其内部包含关键的DEX字节码、资源文件和原生库。掌握静态分析工具链(如JADX)与动态调试框架(如Frida),能够有效应对代码混淆与加固等挑战,实现对应

weixin_34239592的博客 427

[AbutionGraph] 报表制作-使用Grafana动态可视化知识图谱指标

使用开源报表可视化工具Grafana实时监控时序知识图谱数据仓库AbutionGraph中的数据,实时性报表查询, 满足单次百万千万级的数据查询,毫秒级查询延迟,亚秒级对千亿数据量汇总统计,每日过亿报表查询/多维分析/日志分析等数据指标...

图特摩斯科技-博客 4280

第一批因AI坐牢的站长,已经上路了

回到文章开头的话题,不管怎么样,都在为这个行业的从业者敲响了一个警钟。技术永远是一把双刃剑,带来巨大价值的同时也存在一些隐藏的风险,关键在于使用者如何把握和控制。在技术狂奔的年代,越是从业者,越是需要时刻自省和克制,而真正的技术价值,则永远建立在合规与责任之上。唯敬畏规则者,方能行稳致远。注:本文在GitHub开源仓库「编程之路」中已经收录,里面有我整理的6大编程方向(岗位)的自学路线+知识点大梳理、面试考点、我的简历、几本硬核pdf笔记,以及程序员生活和感悟,欢迎star。

CodeSheep 225

【RL in VLA】VLA中的强化学习

本文提出了一种名为 Reinforcement Learning Distilled Generalist(RLDG) 的方法,通过强化学习生成高质量训练数据来微调机器人基础模型。通过在多个精确操作任务上的实验,我们证明了 RLDG 在成功率和泛化能力上显著优于使用人类演示的传统微调方法。RLDG 不仅减少了对人类演示数据的依赖,还展示了在复杂多阶段任务中的灵活性和有效性。

三木今天学习了嘛の博客 2257

CTF逆向工程实战:从IDA静态分析到Python脚本求解

逆向工程是理解软件内部工作原理、分析程序逻辑的核心技术。其基本原理是通过反汇编和反编译,将机器码转换为可读的代码,从而解析程序的执行流程与算法。这项技术的核心价值在于漏洞挖掘、恶意代码分析和软件安全评估。在CTF竞赛和实际安全研究中,逆向工程常被用于破解验证算法、分析协议和寻找软件缺陷。典型的应用场景包括CTF逆向题目求解、软件破解和恶意样本分析。本文以CTF逆向题为背景,详细介绍了使用IDA Pro进行静态分析定位关键逻辑,结合动态调试验证猜想,并最终通过Python编写自动化解题脚本的完整流程,其中涉及

weixin_33727510的博客 323

安装了anaconda,pycharm导入numpy时提示没有该包(模块)?

**问题详情:**我安装了anaconda,在利用Pycharm学习numpy这个库的时候,导入numpy这个包的时候提示我没有nummpy这个模块:No module named numpy.如下图所示。 应该说安装了Anaconda,里边就自带了numpy这个库,就应该能够使用。我一个新手怎么搞得懂呢?于是网上查了查找到了一个解决办法,说是我项目的解释器应该设置为Anaconda安装目录下的python.exe,而不应该是系统自带的:https://blog.csdn.net/aanndd77/art

qq_39820505的博客 1万+

YOLOv11全网首发:注意力独家魔改 | 具有切片操作的SimAM注意力,魔改SimAM助力小目标检测

1)直接作为注意力使用,效果秒杀SimAM;2)高效和卷积结合,代替原始网络的卷积操作;

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 1576

零基础学网络安全,先避开这7个坑再上路

零基础入门网络安全需警惕7大常见误区:基础战线过长、深度拿捏不准、分不清学习重点、路径不系统、环境配置困难、实战经验缺乏以及内网进阶瓶颈。本文针对每个坑点提供具体表现与应对策略,帮助初学者建立系统学习路径,从Web渗透到内网攻防,高效掌握渗透测试核心技能,少走弯路快速入门。

yiyiyi0322的博客 189

第 5 篇:责任链模式 (Chain of Responsibility) —— 协议栈的流水线

本文介绍了责任链模式在嵌入式通信协议解析中的应用。针对传统"面条式"代码维护困难的问题,提出将各协议解析器解耦为独立处理单元,通过链表形式串联。文章详细展示了模式实现:定义抽象处理者接口、实现具体协议处理器、构建链表管理器。该方案具有内存占用低(O(1)栈空间)、可动态扩展、支持优先级调整等优势,并探讨了性能优化策略及动态插件系统等扩展应用,为嵌入式通信协议处理提供了清晰的架构方案。

一路往蓝-Anbo 的博客 180

重归SSM的怀抱(1)——Mybatis

SSM——Spring+SpringMVC+Mybatis 这个框架在JAVAEE中应该是占据着重要地位的,由于一年时间用来考研,之前熟悉的框架基本都生疏了,现在开始重新找回手感,通过简单案例慢慢拿回这部分的知识。 Mybatis(持久层框架,灵活但是程序猿得写sql !—!) Mybatis中的过程: 1.配置文件(Mybatis_config.xml) 2.加载运行环境,创建SqlSes...

qq_26091181的博客 225

⑩电子产品拆解分析-家用无线遥控开关433Mhz

①免布线随意贴,装上就能使用解决单线开关烦恼;②遥控配对简单,无线通讯距离长,信号可穿墙;

a6662580的博客 4720

揭秘LLM如何预测下一个词

Transformer结构的大语言模型(LLM)通过自回归训练学习预测下一个词汇,其核心能力源自权重矩阵的动态优化。自注意力层的Wq/Wk/Wv矩阵捕捉语义关联,前馈网络的W1/W2矩阵进行非线性特征提取,LM Head的W_{lm}矩阵将语义映射到词汇概率。训练过程中,这些矩阵通过反向传播不断调整,最终使模型能够根据上下文(如"我"→"爱")生成合理的后续词汇。这种基于矩阵变换的数学机制是LLM智能生成文本的本质原因。(150字)

ZhangJiqun&191cm&85kg 377

新手逆向工程遇到的问题_新手学车常遇到的三大问题,如何解决?

在刚开始学车时,大部分学员都会遇到很多问题。也没有谁是天生就会开车的,难免都会遇到自己不熟悉的领域,刚开始每科项目学习时一定要多注意细节,以下这些问题都是常遇到的情况,来看看你中招了没。问题1. 上车后手忙脚乱很多学员会遇到的一个问题,就是上车后就会很慌张,好不容易记住油门刹车和离合,发现自己又被方向盘搞得晕头转向。尤其倒车的时候不知道方向盘该怎么打,车身很难摆正。急起来更是左右分不清楚...

weixin_30975237的博客 188

详解YOLOv5网络结构/数据集获取/环境搭建/训练/推理/验证/导出/部署

本文给大家带来的教程是利用YOLOv5训练自己的数据集,以及有关YOLOv5的网络结构讲解/数据集获取/环境搭建/训练/推理/验证/导出/部署相关的教程,同时通过示例的方式让大家来了解具体的操作流程,过程中还分享给大家一些好用的资源,我还对其中的参数进行了详细的讲解,通过本文大家可以成功训练自己的数据集,在开始之前给大家推荐一下我的YOLOv5专栏,本专栏包含上百种YOLOv5的改进机制以及如何撰写论文的教程,手把手教大家如何改进YOLOv5非常适合科研小白。

Snu77的博客 4902

少年,上车! 来打CTF!

CTF(Capture The Flag)中文一般译作夺旗赛在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式CTF起源于1996年DEFCON全球黑客大会以代替之前黑客们通过互相起真实攻击进行技术比拼的方式发展至今,已经成为全球范围网络安全圈流行的竞赛形式。

wly55690的博客 1185

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 超全超详细!一文详解容器网络发展
下一篇: ♂【超全超详细】2W字零基础小白黑客学习路线,知识体系(附学习路线图)♂
AI小模型
博客等级 码龄6年 6863粉丝 487原创
评论 61
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI小模型

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值