AnglerEK的Flash样本解密方法初探-360安全卫士.PDF

AnglerEK的Flash样本解密方法初探-360安全卫士.PDF

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
AnglerEK的Flash样本解密方法初探-360安全卫士

原原文文地地址址:/tips/16895 作作者者::360QEX团团队队 0x00 前前言言 在病毒查杀过程中,一直存在着攻与防的技术对 ,恶意程序会采用各种方法躲避杀毒引擎的检测,增加分析难度。 360QEX团队之前分别对JS敲诈者和宏病毒的隐藏与反混淆分享过相关内容,这次则分享一些AnglerEK的Flash样本解密 方法。 Angler EK攻击包是当前最为著名的一个攻击包,从出现至今,已经被大量用于网页挂马。由于Angler EK能够整合最新 被修复的漏洞利用代码,甚至偶尔会出现0day的利用代码,因而被视为最先进的漏洞攻击包。 近两年来,Angler EK大量使用Flash作为漏洞利用载体,往往Adobe刚刚曝光一个漏洞,就 即出现在了Angler EK攻击 包中。为了躲避杀毒软件的检测,Angler EK采用了多种方法加密Flash攻击代码,增加了检测难度和安全人员的分析难 度。 0x01 字字符符串串与与函函数数名名的的混混淆淆 在ActionScript3中代码调用的相关函数名称和类名,均以字符串形式存储在doabc字段中,所以为了规避针对调用函数 名和类名的检测,AnglerEK采用了getDefinitionBy ame函数,根据传入的字符串参数转换为调用对应的函数或者类,然 后在将这些字符串进行切分,躲避过了简单的特征字符串检测,这也是很多其他EK攻击包所常用的方法。 这种方法进一步进行混淆的话,就可以将这些字符串采用拼接、正则替换的手法,例如样本 c288ccd842e28d3845813703b9db96a4中,使用了如下的方法,基本可以完美的躲避字符串特征检测。 图1 字符串拆分 此外,ActionScript和JavaScript同样基于ECMAScript,因此很多JavaScript的混淆方法同样适用于ActionScript,例如下标运 算符同样能够用于访问对象的成员,这时可以参照JavaScript常见混淆方法来进行代码还原。 在样本eeb243bb918464dedc29a6a36a25a638中,摘录了部分采用下标运算来访问对象成员的代码,如下所示: 代码1 下标运算符执行类成员 #!javascript vree = getDefinitionByName (flash.utils.ByteArray) as lass; weruji = length; var _loc2_:* = new vree (); wxwrtu = writeByte; while (_loc7_ _loc4_ [weruji]) { _loc2[wxwrtu](_loc4_ [_loc7_]); _loc7_++; } 以上这段代码等价于如下代码段: 代码2 还原后的代码 #!javascript var _loc2_:* = new flash.utils.ByteArray(); while (_loc7_ _loc4_.length) { _loc2_.writeByte (_loc4_ [_loc7_]); _loc7_++; } 0x02 外外壳壳fl sh加加密密 除了字符串及调用函数名以外,还有一大块比较重要的特征是ShellCode。ActionScript中ShellCode经常是存放在数组、 Vector中,或者使用连续的pushInt、pushByte等代码构造,这些大段连续的代码,也是非常明显的特征,并且大多数情 况下都不会有大幅度的改变。为了加密掉这些特征,通常会采取类似PE的加密壳的方法,使用一个外层的Flash解密并 加载实际的带有漏洞利用功能的Flash文件。这样外壳Flash的功能非常简单,没有明显的特征,每次只需要对外壳Flash 进行简单的特征修改,就能够躲避特征查杀。 随之带来的问题是,如何存储这些加密的数据。最初的方法是直接存储与大段的字符串中。例如样本 eeb243bb918464dedc29a6a36a25a638中,可以发现其存在一个非常长的字符串,如图2中的this.ybe所示。外壳Flash正是 通过对该字符串进行解码和解密,得到实际的Flash,并进行加载。其具体的过程如下: 图2 样本中的长字符串 1.Base64解码 主要是将字符串转换成二进制数据,代码中的wigr方法就是Base64解码函数的具体实现。这也是非常常用的方法,如果 看到类似图2中的this.eruuf字符串,则基本可以认为使用了Base64编码方法。 2.进行简单的解密运算,获得其实际的Flash。 其具体的解密是

您可能关注的文档

文档评论(0)

wumanduo11 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档