《软件加密与解密》第三版学习日志一

一 动态分析技术

 

动态分析技术中最重要的工具是调试器,分为用户模式和内核模式两种类型。用户模式调试器是指用来调试用户模式应用程序的调试器,他们工作在Ring 3级,如OllyDbg、Visual C++等编译器自带的调试器。内核模式调试器是指能调试操作系统内核的调试器,它们处于CPU和操作系统之间,工作在Ring 0级,如SoftICE等。

OllyDbg(简称OD)是有Oleh Yuschuuk(www.ollydbg.de)编写的一款具有可视化界面的用户模式调试器,可以在当前各种Windows版本上运行,但NT的系统架构更能发挥OllyDbg强大功能。OllyDbg结合了动态调试和静态分析,具有GUI界面,易上手,并且对异常的跟踪处理相当灵活,这些使得OllyDbg成为调试Ring 3级程序的首选工作。它的反汇编引擎很强大,可识别数千个被C和Windows频繁使用的函数,并能将其参数注释出。它会自动分析函数过程、循环语句、代码中的字符串等。

 

二 静态分析技术

 

用高级语言编写的程序有两种形式,一种是被编译成机器语言在CPU上执行,如Visual C++、Pascal等。由于机器语言和汇编语言几乎是对应的,因此可将机器语言转化成汇编语言,这个过程称为反汇编(Disassembler)。例如,在X86系统中,机器码“EBh”对应的汇编语句是“jmp short xx”。另一种是高级语言一边解释一边执行的,称为解释性语言,如Visual Basic、Visual FoxPro等,这类语言编译后的程序可以被还原成高级语言的原始结构,这个过程称为反编译(Decompiler)。

所谓静态分析,即从反汇编、反编译手段获得程序汇编代码或源代码,然后从程序清单上分析程序流程,了解模块完成的功能。静态分析的第一步就是分析程序的类型,了解程序是用什么语言编写的或用什么编译器编译的?程序是否被某种加密程序处理过?常见的分析工具有PEiD、FileInfo等。PEiD是一款常用的文件检测分析工具,具有GUI界面。它能检测大多数编译语言、病毒和加密的壳。PEiD这类文件分析工具是利用查特征串搜索来完成识别工作的。各种开发语言都有固定的启动代码部分,利用这点就可识别出是何种语言编译的。被加壳程序处理过的程序,在壳里会留下相关加壳软件的信息,利用这点就可以识别是被何种壳所加密的。FileInfo(简称Fi)是另一款不错的文件检测工具。Fi运行时是DOS界面。

在进行反汇编前,建议用FileInfo、PEiD等检测工具分析一下文件是否加壳。如果加壳,就需要利用脱壳技术脱壳,然后再反汇编。常用的反汇编工具有W32Dasm、C32asm、IDA Pro等。W32Dasm、C32asm这两款工具已不升级,不支持64位程序。

反汇编引擎的作用是把机器码解析成可以汇编指令,开发反汇编引擎需要对Intel公司的i386的机器指令编码有深入的了解。常见的反汇编引擎有udis86、ade、xde等,像mlde32和virxasm反汇编引擎也比较有特色,大小仅400字节左右。OllyDbg自带的反汇编引擎也比较强大,但其指令集不全,对MMX、SSE支持的不好,不过FullDisasm插件可以解决这个问题。

IDA Pro(简称IDA)是DataRescue公司(www.datarescue.com)出品的一款交互式反汇编工具,它的主要特性是交互和多处理器。操作者可以通过对IDA的交互来指导IDA更好地反汇编,IDA并不自动解决程序中的问题,但它会按用户的指令找到可以之处,用户的工作是通知IDA怎样去做,比如人工指定编译器类型,对变量名、结构定义、数组等定义。 IDA适合分析文件,但要对文件进行编辑修改,需专门的十六进制工具。常用的有Hiew、HexWorkshop、WinHex等。各工具都有其特色,HexWorkshop提供了文件比较功能,WinHex可以查看内存映像文件,Hiew可以在汇编状态下修改代码。

 

三 逆向分析技术


将可执行文件反汇编,通过分析反汇编代码来理解其代码功能,如各接口的数据结构等,然后用高级语言重新描述这段代码,逆向分析原软件的思路,这个过程被称做“逆向工程(Reverse Engineering)”,或者有时只是简单地称作“逆向(Reversing)”。这是一个很重要的技能,需要扎实的编程功底和汇编知识。逆向分析的首选工具是IDA,其中它的一款插件Hex-Rays Decompiler能完成许多代码反编译的工作,逆向时可以作为一款辅助工具参考。逆向工程可以让人们了解程序的结构以及程序的逻辑,因此利用逆向工程可以深入洞察程序的运行过程。

 

 

参考看雪软件安全:

http://www.pediy.com

你可能感兴趣的:(加密,汇编,解密,语言,工具,引擎)