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

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

小姐姐优先~


然后来拜一下祖师爷吧~


重要声明

该培训中提及的技术只适用于合法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


啊哈哈哈


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


本文完


下期内容:二进制软件逆向分析工具及实战


该文在初音的小站也有同步,点击阅读原文跳转~


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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注