恶意代码原理、技术与防范 课件 10-代码混淆技术_第1页
恶意代码原理、技术与防范 课件 10-代码混淆技术_第2页
恶意代码原理、技术与防范 课件 10-代码混淆技术_第3页
恶意代码原理、技术与防范 课件 10-代码混淆技术_第4页
恶意代码原理、技术与防范 课件 10-代码混淆技术_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第十章代码混淆技术引言代码混淆技术是一种保持功能等价的代码变换技术。软件分析者对于变换后的代码更难以有一个完整的理解,从而不能够对代码进行有目的的篡改。利用代码混淆技术,恶意代码可以对抗针对代码的静态分析甚至动态调试,从而增强其生存能力。本章主要介绍不同的代码混淆方法。代码混淆技术概述语法层混淆控制流混淆数据混淆1.1代码混淆技术的定义代码混淆:利用某种算法对代码进行变换,在保证功能等价的前提下,使其难于被“攻击者”正确的理解与分析,从而不能对代码进行有目的地识别或篡改。目的:降低程序分析的精确度,增加分析难度。1.3代码混淆技术的优缺点优点:代码混淆技术的实现相对容易代码经过混淆后的变化比较隐蔽代码混淆技术的开销较小代码混淆技术追求的是程序的不可逆性缺点:动态跟踪来获取程序中的数据流及控制流信息,代码混淆技术可能失败执行时带来额外的时间与空间开销代码混淆技术是程序功能等价的变换技术1.4代码混淆技术的分类按照不同的分类标准,代码混淆技术可分成多个类。按照代码对象进行划分:源代码混淆中间代码混淆机器码混淆按作用机理划分:语法层混淆控制流混淆数据流混淆代码混淆技术概述语法层混淆控制流混淆数据混淆2.语法层混淆技术语法层混淆主要针对源码实施,主要目的是降低程序的可读性,干扰分析人员的源码分析。逆向分析代码时哪些信息有助于理解?变量名函数名函数参数(声明)......2.语法层混淆技术填充与压缩9填充压缩在代码中加入大量无用字符串、数字、变量、代码、注释等,让真实有用的代码埋没在其中去除代码中的不必要的空格、换行等内容或者把一些可能公用的代码进行处理实现共享,将代码压缩为几行。混淆"yterhgds";4524325234523;625623216;var$=0;alert(//@$%%&*()(&//(^%^

cctvfunction//(//hhsaasajxxc/*

asjgdsgu*/

"This//ashjgfgf

/*

@#%$^&%$96667r45fggbhytjty

*/

code

"

)//window

Alert(“This

code”)混淆2.语法层混淆技术标志符替代

将代码中的变量、函数或方法名等标志符以另一个不同名称的形式替代。functionhi(){console.log("HelloWorld!");}hi();_0x1783="Hel";_0x2939="lo";_0x4927="Worl";_0x3847="d!";_0x4958=console;function_0x3444(){_0x4958.log(_0x1783+_0x2939+_0x4927+_0x3847);}_0x3444();混淆2.语法层混淆技术编码混淆用

ASCII、UNICODE、BASE64等编码代替Javascript代码中字符或数字等,使得函数名或字符串不再易读。

12console.log(“Hello”)console[‘log’](“Hello”)

console['\x6c\x6f\x67']("\u0048\u0065\u006c\u006c\u006f");混淆2.语法层混淆技术字符串混淆将字符串用数组集中放置,代码中不出现明文,使用时利用字符串操作函数交其还原。eval(Document.Write(“Helloworld!”))

vart="";vararray=

"646f63756d656e742e7772697465282248656c6c6f20776f726c64212229";for(i=0;i<array.length;i+=2)t+=String.fromCharCode(parseInt(array[i]+array[i+1],16));eval(t);混淆2.语法层混淆技术函数参数混淆

将程序中多个函数按照归一化的参数集方式进行统一定义,使它们具有相同的参数个数、类型、序列及返回值类型等。142.语法层混淆技术语法层混淆的缺点反混淆容易混淆效果不佳15语法层混淆比较低级,但是与控制流混淆和数据流混淆结合后可以发挥更好的效果。2.语法层混淆技术代码混淆技术概述语法层混淆控制流混淆数据混淆3.控制流混淆控制流混淆:隐藏程序内部各模块相互作用的关系,降低程序分析精确度,使程序难于被理解。控制扁平化分支引入法利用异常处理隐藏条件分支......17控制流对于代码分析有何作用?3.控制流混淆(1)控制流扁平化3.控制流混淆原始代码控制流图控制流扁平化方法:消除原程序块间的逻辑关系,使块具有相同前趋和后继,块与块成为并列的分支。程序执行顺序由分支变量来确定。3.控制流混淆代码分析的关键?控制流扁平化分支变量x3.控制流混淆分支变量的保护方法数组(随机索引):引入长整型数组用于存放各块的首地址,个数大于块的数量。各基本块随机的存入数组之中;213.控制流混淆别名(指针):引入指针,在各块中充分参与分支变量的计算。223.控制流混淆非透明谓词非透明谓词指的是表达式,表达式满足这样一种性质:无论表达式中的变量取何值,其表达示的计算结果总是确定的,非真即假。(x3-x)%3==0当X取整数时,上述非透明谓词永远为真。但是静态分析得到此表达式的值是一个方程组求解,是不确定的。3.控制流混淆非透明谓词混淆后3.控制流混淆(2)分支引入法代码块拆分:将原程序拆分为更小的块3.控制流混淆增加垃圾块:人为构造与原块相似的块并加入程序分支,通过控制分支变量确保其不会被执行。3.控制流混淆(3)基于异常处理的控制流混淆程序发生异常时,会调用用户定义的异常处理代码或者按系统定义的异常处理结构链SEH进行相应处理。混淆方法:利用异常处理的隐蔽跳转替换代码中的跳转指令,使分析者无法找到异常处理中隐藏的代码关联。代码混淆技术概述语法层混淆控制流混淆数据混淆4.1整型混淆整型数是大多数程序中最常用的数据类型,将其混淆的常见方式是采用编码或加密。4.2布尔混淆布尔型数只有False/0和True/1的取值,取值范围固定,相对较好混淆。常见的布尔型变量混淆方法有乘法混淆和分解混淆等。4.3常量混淆常量在代码编译时被置入数据节,由于其包含着一些代码的语义而在程序分析中也起着重要的作用。4.4数组混淆对程序中的数组进行混淆有两种主要方法:重新排序和重新建构。4.5结构混淆程序中存在大量的数据结构体,其中以面向对象语言中的类最为代表。为了混淆类之间的继承关系,可以将类分解、类合并或在继承中插入多余的类。思考题351.代码混淆技术主要是恶意代码用来对抗静态分析还是动态分析?其优缺点是什么?2.尝试针对本章中列举的各类语法层的混淆技术,提出相应的反混淆方法。3.什么叫做非透明谓词?它在代码混淆中能够起到什么作用?4.请选择一段有源码功能代码,按照控制流压扁

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论