恶意代码原理、技术与防范 课件 9-加密技术与加壳技术_第1页
恶意代码原理、技术与防范 课件 9-加密技术与加壳技术_第2页
恶意代码原理、技术与防范 课件 9-加密技术与加壳技术_第3页
恶意代码原理、技术与防范 课件 9-加密技术与加壳技术_第4页
恶意代码原理、技术与防范 课件 9-加密技术与加壳技术_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

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

文档简介

第九章加密技术与加壳技术引言加密和加壳是恶意代码用来保护自己的常用技术。加密可以使得恶意代码更好的隐藏敏感的字符串,修改特征码和对抗反汇编,加壳保护恶意代码不被轻易的逆向和分析。本章聚焦加密和加壳技术在恶意代码中的应用,介绍了软件加密和加壳的基本概念,分别阐述了针对二进制和脚本类型代码的加密方法,以及软件壳的保护原理等。加密技术加壳技术虚拟机保护技术1.1加密基础知识4加密技术是恶意代码阻碍敏感数据被解读和代码逆向分析的常见方法。1.1加密基础知识从恶意代码诞生之日起,其开发者们就开始尝试用加密的方式掩盖关键功能与特征:算法实现简单,代码量小,如Shellcode、壳等;算法开销小;算法足够应付一般用户的分析。1.1加密基础知识6加密算法简单算法XOR异或加密算法Base64编码其它…现代加密算法MD5、SHA1哈希算法对称密钥算法:DES、AES非对称密钥算法:自定义算法对已有算法的整合;以已有算法为基础的改造;自定义其它算法1.1加密基础知识异或加密算法:使得一个静态字节值作为“密钥”,通过与该值执行逻辑异或运算来修改明文中的每个字节,解密过程与加密过程一致。7明文ASCIIHackeriscomingHex4861636B657220697320636F6D696E67密文ASCIIUS64<2%w>$w48:>90Hex1F36343C3225773E247734383A3E3930以”0x57”作为密钥与明文异或1.1加密基础知识Base64加密算法:是一种常用的将二进制数据转换为可打印ASCII字符串的编码算法。来源:MIME,用于加密邮件的附件;恶意代码:加密通信中的URL、Cookies等;8GET/d3d3LmhhY2thdHRhY2suY29t/index.htmUser-Agent:Mozilla/4.0(compatible;MSIE7.0WindowsNT5.1)Host:Connection:Keep-AliveCookie:a2Vpa2V5NDM=恶意代码数据包解析1.1加密基础知识标准Base64字符集:a-z、A-Z、0-9、“+”、“/”;9IndexCharindexCharindexCharindexCharindexCharindexChar0A11L22W33h44s5531B12M23X34i45t5642C13N24Y35j46u5753D14O25Z36k47v5864E15P26a37l48w5975F16Q27b38m49x6086G17R28c39n50y6197H18S29d40o51z62+8I19T30e41p52063/9J20U31f42q53110K21V32g43r542表Base64字符集1.1加密基础知识转换步骤:将原始数据以3字节(24bit)为单位分组(不够补0),对各组分别加密;将3字节的二进制数分成四组,每组6bit;将每组6bit的数据转换为十进制数:0-63。根据得到的数字对应字符集表的索引即得到对应的字符;将所有字符连接构成最终的密文,并在最后加入两个“#”即可。

101.1加密基础知识例:对“Hac”进行Base64的转换11Hac0x40x80x60x10x60x3010010000110000101100011186535SGFj1加密基础知识Base64加密算法的优势:编码简单,易于实现;原理清楚,易于修改;缺点:算法简单,易于破解;恶意代码很少采用标准的Base64,而是通过改变符号集的索引,更换填充字符等。121.1加密基础知识现代加密算法对称密钥算法:DES、AES、RC2等;非对称密钥算法:RSA、DSA、ECC等;

虽然现代加密算法安全性更高,常用于勒索软件、木马加密通信等,传统病毒等很少使用:标准的加密算法通常封装在动态链接库中,体积太大;不利用代码的移植;标准加密库携带的指纹比较容易被探测;对称加密算法需要考虑如何隐藏密钥。131.1加密基础知识自定义加密技术

鉴于简单加密算法和复杂算法的公开性,恶意代码常也会使用自定义的加密方案。优点:体积小,易移植;没有明显指纹;141.2加密技术的应用(1)数据加密加密目的:让代码内的敏感字符串无法直接解读。1.2加密技术的应用解密思路:所有字符串在程序调用时需要率先解密。因此需要关注所有加密字符串调用的上下文,观察调用前以加密字符串作为参数的函数,并判断是否为解密函数。1.2加密技术的应用17(1)二进制代码加密=SMC(SelfModifyingCode)加密目的:无法正确反汇编代码。1.2加密技术的应用加密步骤:确定待加密的程序段;确定加密算法并编写加密程序;在被加密程序中嵌入解密算法,并指定解密算法的运行时机;修改被加密程序段的属性为读、写和执行。1.2加密技术的应用选取原则:对可能被杀毒软件查杀的部分或包含关键部件(如某个关键算法、特征值所在区域等)的代码进行加密。策略:选择一段边界清晰的程序块(段、函数、基本块等)。19(a)如何选择被加密的程序段?1.2加密技术的应用选择算法的考虑:加密算法复杂度和算法体积成正比;算法无法抵御被动态分析,目标只是为了反汇编器无法正确反汇编;(b)选择什么样的加密算法?1.2加密技术的应用几种不同的方式(SMC自解码总结):解密代码指定加密代码的地址范围;加密代码(函数)的字节码放置于待解密的数组中,解密后再调用;解密代码以新增代码节的方式,可对加密代码段进行加解密;在加密代码前后加入“标志”,通过搜索标志确定解密范围。(c)解密算法放置代码何处?1.2加密技术的应用混淆填充与压缩标志符替代编码混淆字符串混淆如何才能让脚本程序无法读懂?加密现实中的恶意代码常常会同时采用混淆与加密两种方式。1.2加密技术的应用(a)混淆填充与压缩23填充压缩在代码中加入大量无用字符串、数字、变量、代码、注释等,让真实有用的代码埋没在其中去除代码中的不必要的空格、换行等内容或者把一些可能公用的代码进行处理实现共享,将代码压缩为几行。混淆1.2加密技术的应用"yterhgds";4524325234523;625623216;var$=0;alert(//@$%%&*()(&//(^%^

cctvfunction//(//hhsaasajxxc/*

asjgdsgu*/

"This//ashjgfgf

/*

@#%$^&%$96667r45fggbhytjty

*/

code

"

)//window

Alert(“This

code”)混淆1.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();混淆1.2加密技术的应用编码混淆用

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

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

console['\x6c\x6f\x67']("\u0048\u0065\u006c\u006c\u006f");混淆1.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);混淆1.2加密技术的应用(b)加密

攻击者定义加密函数并对指定代码进行加密,并将解密函数放入脚本中。为了解密函数更加难以解析,可以进一步对解密函数混淆。28加密加密的脚本如何解析?1.2加密技术的应用实际使用中,可以对加解密策略进行调整。改变解密循环方向使用多层加密动态改变循环方向;使用非线性解密引擎。……多态技术:改进了的加密技术,由变化的解密体和不同密钥组成。加密技术加壳技术虚拟机保护技术2加壳技术(1)常见的加壳工具ASPacK:压缩壳,文件压缩比高达40%~70%;其它压缩壳:UPX、PECompact2加壳技术加壳前加壳后2加壳技术ASProtect:加密壳,具有压缩、加密、反跟踪代码、反-反汇编代码、CRC校验和花指令等保护措施,集成了多态变形引擎。其它加密壳:Armadillo、EXECryptor、Themida等。2加壳技术(2)壳的加载过程34获取壳所需的API地址解密/压缩原程序的各区块数据重定位(非必需)跳转到程序原入口LoadLibrary+GetProcAddress2

加壳技术壳将控制权交还给原程序,一般的壳在这里会有明显的一个“分界线”。因此,检测软件用仿真器运行代码,监控先写后执行的代码并以此为界,利用内存dumping重构PE文件。35怎么解决?2加壳技术追求“壳里有肉,肉里有壳”的境界细粒度:代码结构、函数、文件都为粒度,粒度越细越好;充分混合:壳代码与程序粒度相互调用,充分混合。36ABCDE程序结构E1E2E3壳加密技术加壳技术虚拟机保护技术3虚拟机保护技术概述所谓虚拟机保护技术,是指将代码翻译为机器和人都无法识别的一串伪代码字节流,在具体执行时再对这些伪代码进行一一翻译解释,逐步还原为机器码并执行。3虚拟机保护技术的实现虚拟机保护的工作原理虚拟机指令集设计虚拟机指令解释器虚拟机的调度器思考题

温馨提示

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

评论

0/150

提交评论