CTF实战24 二进制软件逆向分析基础

2018-08-23 15:32:16 浏览数 (1)

小姐姐优先~

然后来拜一下祖师爷吧~

重要声明

该培训中提及的技术只适用于合法CTF比赛和有合法授权的渗透测试,请勿用于其他非法用途,如用作其他非法用途与本文作者无关

逆向工程定义

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

逆向工程源于商业及军事领域中的硬件分析

其主要目的是,在无法轻易获得必要的生产信息下,直接从成品的分析,推导产品的设计原理

逆向工程可能会被误认为是对知识产权的严重侵害,但是在实际应用上,反而可能会保护知识产权所有者。例如在集成电路领域,如果怀疑某公司侵犯知识产权,可以用逆向工程技术来寻找证据

为什么要逆向呢?

  • 分析恶意代码
  • 了解软件的技术细节
  • 破解要收费软件(嘿嘿)
  • 加固软件安全(和渗透测试差不多一个类型)
  • 漏洞分析

等等

逆向工程必备技能

1. 肯定就是熟练掌握各基础汇编指令,能看懂普通的汇编代码

首先说一下第一点

这应该不需要怎么解释吧,逆向不懂汇编怎么逆向啊哈哈哈

比如要知道基本的计算机中栈空间是存取数据的,内存空间是存取数据的

什么EAX,EBX,ECX,EDX,ESI等等是干嘛的这样

但是这里还是有个小问题

那有同学问,怎样才算熟练掌握各基础汇编指令呢?

我这里贴一段小小的汇编代码

如果你能不看下面的我的解释

明白这段代码的大概要做的操作

那么恭喜你,你已经熟练掌握基础的汇编指令了

mov ecx, dword ptr [eax 8Ch] add eax, 88h mov edx, dword ptr [eax] mov dword ptr [ecx], edx

第三行呢把eax所指向的那个地址上的数据取出来

赋给了edx,最后把edx的值赋到了ecx指向的那个地址上

可能不是经常做恶意代码分析的人一看这个代码就懵了

2. 要会C语言编程,熟练掌握各种结构体的剖析

ok,现在我们说说第二点,为什么要熟练使用C语言?

上面刚刚那段汇编代码,这样看肯定很难看是不,我们可以把他转换成C语言

这样就好分析多了

尤其是在代码量极大的时候

把汇编转换成等价的C语言代码,是会节省我们很多的分析时间的(不要跟我说有插件)

如果你能独立完成汇编到C语言代码的转换,那么说明第二点你也是合格的了~

比如刚刚那段代码,我们转换一下看看(我喜欢用Linux的C风格)

这里我就不定义各个变量了

# include <stdio.h> int main(int argc, char *argv[]) { // Here is some operational before our code ... // 8Ch = 140d ecx = *(eax 140); // 88h = 136d eax = eax 136; edx = *eax; *ecx = edx; // Not list return 0; }

可能这样写出来有些同学还是一脸懵逼,这和看汇编差不多啊

但是有些逆向分析的时候,出现的结构体什么的,用汇编分析那就是一连串的地址变地址

如果写成C语言的形式

那就是看上去清爽多了

3. 要了解基本的Win32编程和Linux编程

比如恶意代码调用了哪个库,不需要记住每个Windows的API,但是你要知道哪里去查

比如Windows呢就是MSDN

如果是Linux呢,就是man

当然,对于逆向来说,最重要的还是长期坚持不懈的努力和知识的积累

在逆向的世界里,不管你是Java很6,或者是Python很6

只要你是第一次接触逆向的话,都是一样的起点

除非你C语言很6

啊哈哈哈

0 人点赞