小姐姐优先~
然后来拜一下祖师爷吧~
重要声明
该培训中提及的技术只适用于合法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
啊哈哈哈