一次性付费进群,长期免费索取教程,没有付费教程。
教程列表见微信公众号底部菜单
进微信群回复公众号:微信群;QQ群:460500587
微信公众号:计算机与网络安全
ID:Computer-network
▼
软件
逆向
工程大多数时候都会被简称为
逆向
工程(Reverse engineering)或直接将其称为
逆向
(Reverse)。软件
逆向
工程的基本思路是将二进制代码按照一定格式进行正确有效的反
汇编
,并通过分析反
汇编
代码再配合其调用的外部函数或系统API等,对其代码逻辑进行理解,而在这个过程中最重要的就是推理出该
二进制
代码
使用的
数据结构
。
▼
介绍C语言中流程控制代码对应的反汇编代码。
▼
计算机
的攻击与防护需要熟练使用各种工具软件,通过使用
汇编
和CMD命令可以了解
漏洞
是如何产生的,不但使用
C语言
可以完成对exploit的编写工作,而且使用
Python
和Ruby也能完成相同的功能。攻击与防护工作绝不是使用单一语言、单个工具软件就能完成的工作,必须要经过长期的学习与研究。
▼
壳
的编写一直以来都被认为是软件安全领域中较为高端的技术,但是实际上编写一个自己的壳并不是多么困难的事情,只要您了解PE结构并会写代码,那么写一个壳的过程其实就会变成一系列重复的数据处理工作。
▼
当我们遇到必须分析MFC的这种情况时,需要先对MFC框架有一个基础的了解,由于MFC是开源的,因此这为我们理解其内容打开了方便之门。然后我们就要试图在其中提炼出关键点,进而提炼出我们所需要的特征。
▼
可以说类的继承关系是C++
逆向
中最为重要的一部分,因为它不但关乎
逆向
成败、可以透析作者的思想,还可以辅助我们理清程序的整体结构。
▼
虚函数的存在就是为了克服类型域解决方案的缺陷,以使程序员可以在基类里声明一些能够在各个派生类里重新定义的函数。
▼
每个成员函数在被调用时都要用this指针作为第一参数,因此我们在
逆向
工作中要时刻警惕使用ecx作为第一参数的函数,如果遇到这种情况,我们就有充足的理由怀疑它是一个类的成员函数。
▼
我们要
逆向
的东西肯定不是我们自己写的,而且会遇到由内存对齐问题带来的困扰,并且还有类似于静态数据成员、虚函数与派生类等问题,这让我们确定它们的大小变得基本不太可能。而且,实现相同功能的结构体与类,其生成的二进制代码应该是完全相同的,因此我们也很难分辨这是一个结构体,还是一个类。
▼
在大多数
逆向
工作中,我们所需要分析的最关键内容几乎都是算法,因为
算法
就是一个软件的灵魂。通常意义上来讲,
算法
是由各种复杂的数学公式组成的,因此如果我们要真正看懂一个加密、解密或压缩算法的话,那么学习运算符的
逆向
技巧还是非常必要的。
▼
switch-case的诞生其实就是为了避免出现大量的、高重复的if-else语句。换句话说,switch-case语句其实就是if-else语句的另一种体现形式。
▼
C语言
的循环主要分为for、while与do-while 3种,但是当我们以逆向的角度来看待这些循环结构的时候,会发现其本质上只有一种,而且即便再次细分,也仅仅能分离出两种情况。
▼
if-else分支几乎是所有学习C语言的人首先要接触的知识点之一,那么学习逆向理所当然从这里开始了。
在学习
逆向
的时候,始终要记住我们是在与编译器打交道,大致将if-else分支的
逆向
分为4种状态。
▼
从逆向工程的角度来看,函数要想在执行完毕后能返回到正确的位置并继续执行其他代码,就要求主程序在调用函数时应首先保存返回地址并传递给函数,其次要考虑的就是参数传入与栈平衡问题(也可以理解为参数与局部变量的保存问题)。
微信公众号:计算机与网络安全
ID:Computer-network