****基本概念

学习i春秋课程 > Windows****技术 > ****技术的基本概念
侵权删,i春秋课程很好呀,小伙伴萌对网络安全感兴趣可以学习一下????

基本概念

软件工程:通常被认为是开发一个新的系统

正向工程:从用户的需求,到高层设计,再到底层设计,最后实现的过程。正向工程解决了功能的实现问题,说明了哪些功能需要增加和删除。

****:对系统进行分析,从而确定系统的组件,和组件间的相互作用,以其他形式来表现系统,或者在较高层次上表示系统的过程。
对一个系统实施****时,不改变系统本身,也不包括在此系统上构建新系统。****解决了程序理解的问题;

再工程:通过****重构和正向工程,对现有系统审查和改造,将其重组为新的形式,再工程改变了系统的功能和方向(除了正向和逆向的分析,还有重构的问题,它是在抽象的层次上改变了表示形式和系统)。

****基本概念

****最早出现在对硬件产品的分析中,指通过拆解机器装置并观察其运行情况来推导其制造方法、工作原理和原始设计的行为。

这个课程所讲授的****主要指的是阅读反汇编(将机器语言代码转换成汇编语言代码)后的代码及使用调试器分析软件行为等工作。

****基本概念

软件逆向分上图两部分,首先对早期程序大范围分析观察-》系统及逆向,它帮助我们确定程序的结构,可能帮我们找到感兴趣的区域,一旦对程序有了一个基础的认识,并确定了感兴趣的区域,就可以进入下一个阶段—》》代码级逆向技术

代码级逆向技术为我们提供所选择块代码的详细信息,系统级逆向包括运行各种工具,利用不同操作系统服务获取信息,检查程序可执行文件,跟踪程序输入输出……这些信息大多数来自操作系统(一个程序与外界的任何交互必须来自操作系统=所以逆向工作者必须了解操作系统)

在逆向过程中,通过OS可以获取所研究程序的大量信息

代码级逆向是一个复杂的过程,它是从程序二进制代码中提取实际理念和算法,要求****师不但要掌握逆向技术,而且还要对软件开发、CPU、OS有深入的了解,软件的复杂度深不可测,即使能够得到编写良好,文档齐全的源代码,人们理解起来也是很困难的,**构成程序所使用的指令序列更是难上加难。

代码级逆向从非常低层次观察代码,我们会看到运转软件所有微小细节,这些细节大多由编译器自动生成,理解这些细节如何与程序及其功能连接起来,成为一件非常困难的事情

****基本概念

从高级语言程序到目标代码,需要经过编译、链接,工作过程大致为:

  1. 词法分析:对源程序从前到后或者从左到右逐个字符扫描,从中识别出一个个单词符号
  2. =》语法分析:语法分析器以单词符号作为输入,分析单词符号串是否符合语法规则,如表达式,赋值,循环……最后分析检查每条语句是否有正确的逻辑结构
  3. =》语义分析:检查原程序是否存在语义错误,并且收集类型信息供后面代码生成阶段使用
  4. =》中间代码生成:根据语义分析的输出,生成中间语言程序。中间代码起一个编译器前端与后端分水岭的作用,目的便于编译器的开发和移植以及代码的优化,它既与机器指令的结构相近,又与具体机器无关。!!并不是所有编译程序都生成中间语言程序。一般快速编译程序直接生成目标代码,没有将中间代码翻译成目标代码的额外开销
  5. =》代码优化:对程序进行多种等价变换,使得从变换后的程序出发,能生成更有效的目标代码
  6. =》具体目标代码生成:目标代码生成器把语法分析后或优化后的中间代码变换成目标代码包括exe、dll……等类型

编译和反编译不一定要生成汇编代码,一般生成某种设计好的中间语言。但在反编译的二进制解码过程中,首先会生成一种类汇编或汇编代码,因此二进制解码也可称为反汇编,并且反编译的过程中中间代码也有很多级别,类汇编或汇编代码只是低级中间语言。

软件工程应用

实际工作重要应用–反汇编

代码恢复理解
分析有价值的二进制程序,获取并理解其(关键)功能结构,提高自己的技术水平,扩展学习获取技术的渠道,摆脱自身研究的不足。(可能有些时候还需要脱壳方面的技术

算法的识别
利用(密码)算法在汇编级别的特征,进行相关的算法识别;当然也有在抽象语言级别上进行的(现阶段研究不太成熟,非主要手段)。

软件**、恶意代码分析
通过动态跟踪分析恶意软件的执行过程,收集观查恶意软件的行为,为编写恶意代码查杀工具提供思路,甚至进行取证提供依据。

漏洞挖掘和利用
对于操作系统和应用软件,漏洞的挖掘和利用,是主动攻击的重要手段,一旦成功效果明显应用起来也比较广泛,难度和工作量较大,现阶段的一般研究方法是在反汇编分析的基础上,结合动态跟踪、调试技术来进行。

Rootkit深入
Rootkit(原意是根权限工具,而实际中常指使用了Rootkit技术的病毒、木马,他与传统木马(R3)的不同在于:通过加载一个驱动或者其它手段,使部分代码或者全部代码都在内核(RO)中进行) VS HIPS(主机入侵检测):胜负取决于谁做得更底层,谁知道更多没有公开的底层内容,这需要在反汇编的基础上进行内核的调试,探索底层未知的部分,网上发表的都是过时的或者不是非常重要的"点拨"。

软件逆向过程

****基本概念

从具体目标代码到高级语言程序的反过程

软件逆向分析发展现状

根据应用用途大致分为反汇编和反编译两个发展方向

反汇编是将二进制指令翻译成汇编代码
反编译是将其翻译成高级语言的代码(比如C#)

反汇编工具

IDA
全名(IDA Pro Disassembler and Debugger),DataRescue公司的强大专业反汇编调试软件;最好的静态反汇编工具,针对80X86架构作了许多的优化和额外的识别分析(现今分析最为透彻的产品),当然也支持其它架构的处理器,另外也支持跟踪调试。
强大的功能扩展
Processor:扩展处理器支持
Plug-in:插件IDA功能扩展
Loader:支持不同的可执行文件支持
Debugger:不同平台和(远程)调试的支持

IDA在静态密码算法识别有很广泛应用,特别是嵌入式系统的非X86结构

这个课程在静态调试技术具体讲解此软件

OllyDbg
32位Windows系统环境下的二进制文件分析调试工具,其重点在于动态跟踪分析二进制代码,但由于这些操作都是在目标代码进行反汇编后进行,因此也常被作为一款反汇编工具使用。

这个课程在动态调试技术具体讲解此软件

C32Asm

国产的针对Windows平台下PE格式文件的优秀反汇编器,其提供快速的静态反汇编和16进制文件编辑功能,另外还有一些便利的内存操作和修改功能。

IDA全面且强大,C32系统开销小,比较轻快

反编译工具
dcc/UQBT/Boomerang

dcc:Cristina Cifuentes在澳大利亚昆士兰大学博士论文中的反编译原型系统,作为从DOS到C反编译EXE文件的先驱代表,主要通过传统编译优化技术和图论来执行相关分析操作1994年停止发展更新,有许多的局限,只是概念上的证明程序。
UQBT:主要作者Cristina Cifuentes,其作为一个通用的二进制翻译框架,输入的二进制代码通过逆向分析产生高级的C代码,再通过普通的C编译器编译和优化,最终生成目标平台上对应代码。UQBT目标识二进制翻译,但其框架中前端技术可供逆向分析借鉴使用。
Boomerang:主旨为通过开源社区发展一个通用的反编译器。其重用了dcc和UQBT中的相关技术,并成为新代码逆向研究的主题,不过其也存在不足。

反编译
常用工具Hex-rays,主要用于局部函数的反编译,便于理解函数。

其它应用
内核调试
深入底层研究的重要必备手段,也是之后技术突破所必需的。现阶段内核调试都是用Windbg进行联机调试。

漏洞挖掘利用
需要对目标代码进行动态的跟踪调试。

二者都是在反汇编的基础上进行-反汇编是前提和基础