细数恶意代码对抗技术之加密(二)-代码隐藏

By | 2014年3月3日

在上一篇的加密对抗技术中主要针对样本中的明文信息,这一篇涉及的加密对抗技术主要是主体代码的隐藏。

通常恶意代码中采用的此类技术大多将关键的配置信息(例如URL),动态加载的APK、DEX、ELF、SO文件等以资源文件的形式存储,并且以加密、切割、插入的形态存在。下面以几个典型示例为例进行说明:

配置信息加密资源隐藏方式

样本将相关配置信息加密后分别存放至res/raw下的a、b、c三个文件,运行时读取三个文件的内容然后解密还原为明文配置信息。

71D34CFA-74BA-4094-8426-0FA201B7A7B3868B02F9-3AA8-44F0-8DA5-FABCF6A82513

更有将解密的key信息存储到一个伪装的PNG文件中,然后在运行时利用如下代码提取所需的信息:

DE9FF7DC-FB29-4946-9003-945A78FADCF5

可执行文件隐藏方式

恶意代码通常也会将APK、DEX、ELF、SO文件隐藏在资源文件中,然后在运行时动态释放并加载,并且在加载后将其删除,这样分析工程师很难直接获取到释放的可执行文件。下面以egdata家族的样本为例,其运用到几个非常典型的隐藏方式:

  • url的隐藏

egdata家族样本将关键url信息加密存放在一个so文件中,并在运行时解密:

加密前:

F1DD2452-7694-4D4E-ADCD-61FC853DF59E

利用IDC脚本解密后:

5F1C7C99-6430-4088-A38B-43C0BE6CAD85

  • so文件的隐藏

样本将so文件以二进制数据流的方式保存在JAVA源代码中:

954EC74C-E4EC-491E-8FB8-FF0FE6D84156

然后执行以下代码解密释放:

  • APK文件的隐藏

样本将加密的APK隐藏在伪装的jpg图片文件中,其采用插入到jpg图片文件中间或者是附加在一个正常可浏览的jpg图片文件末尾。

6A253604-7F22-4DC3-8A9E-824139DDDCE5

  • 多层加密

egdata样本采用了多次加密隐藏的方式,以最大可能隐藏真实的恶意代码文件:

  1. wkag.jpg中解密释放APK,命名为geenb.apk并动态加载
  2. geenb.apkemg.jpg中解密释放恶意代码核心APK,命名为vqah.apk并动态加载
  3. vqah.apk为核心代码文件,其运行时会解密释放so文件
  4. so文件执行解密函数,解密主要的url信息

小结

恶意代码通常会将部分重要信息或者可执行文件加密隐藏在资源文件中,然而像egdata这类家族多次运用加密隐藏的方式对关键的可执行文件进行隐藏,并且取得了不错的效果(其在VirusTotal上成功逃避了绝大部分安全厂商的检测)。

我们还发现在部分样本中本地并不会存储实际的恶意代码,而是采用运行后联网下载的方式,下载一个加密过的恶意代码文件,然后进行解密执行,这样也能够极好的隐藏和逃避安全软件的检测。

发表评论

电子邮件地址不会被公开。 必填项已用*标注