揭开病毒的面纱–恶意代码自解密技术

栏目: 编程工具 · 发布时间: 5年前

分析病毒的时候,常常遇到一种很奇怪的现象,使用查壳 工具 查看一个样本明明没有加壳,但是反编译或调试时,却不能直观地看到样本的恶意操作,这是为什么呢?很简单,这是因为攻击者采用了自定义的加密方法,在样本运行时实现自解密并执行真正的恶意操作,所以看到的只是样本还没解密的样子,自然分析不出恶意代码的逻辑。

下面就通过实例来窥探下恶意代码自解密的技术吧,如下是一个 Ammyy 病毒的下载器( MD5 28EAE907EA38B050CBDCC82BB623C00A ),使用 DIE 查壳发现,该样本并没有加任何的壳。

揭开病毒的面纱–恶意代码自解密技术

然而当查找字符串时,却未能发现一些可疑的字符串(如下载器常有的恶意 url ),看到的只是一堆乱码,看来,该样本很有可能就是使用了自解密的技术。

揭开病毒的面纱–恶意代码自解密技术

反编译该样本,也难以看出它的代码逻辑,很多动态地址的 call

揭开病毒的面纱–恶意代码自解密技术

对于这种样本,反编译器很难看到一些重要的操作,因为大部分都是解密操作,所以只能通过调试器单步调了。单步调试没啥好技巧,遇到跑飞的 call 下断点然后重新调试。调试的时候,要注意 VirtualAlloc GlobalAlloc HeapCreate 这些函数,因为恶意代码通常使用这些函数来申请一段内存空间,来存放解密出来的恶意代码。如下图,该样本调用的是 HeapCreate 创建了 0x230000 这段内存。

揭开病毒的面纱–恶意代码自解密技术

接着恶意代码用了 je + retn 的方式循环解密 0x230000 处的数据。

揭开病毒的面纱–恶意代码自解密技术

解密完毕后,恶意代码调用 call esi 将执行流从 0x40XXXX 转到 0x230000

揭开病毒的面纱–恶意代码自解密技术

然而, 0x230000 处的代码并不执行核心的恶意操作,目的在于修改 0x40XXXX 处的原始代码。如下,它会调用 VirtualProtect 0x400000 的内存属性改为 RW (读写),进而修改原来的代码。

揭开病毒的面纱–恶意代码自解密技术

修改后的 0x400000 内存段的属性如下。

揭开病毒的面纱–恶意代码自解密技术

修改完代码,调用 jmp esi 跳回到 0x40XXXX 进行执行,此时,这段内存的代码已经被修改过了,终于开始执行核心的恶意操作了。

揭开病毒的面纱–恶意代码自解密技术

将内存 dump 下来发现,现在的代码已经是解密后的恶意代码了,程序逻辑清晰可见,通过字符串查找可以找到待下载的病毒的 url

揭开病毒的面纱–恶意代码自解密技术

至此,该下载器的功能已经分析完毕,主要功能为从 http://thespecsupportservice.com/load.png 下载 Ammyy 病毒并运行。

揭开病毒的面纱–恶意代码自解密技术

由此,可以总结得出,恶意代码自解密的步骤一般为以下 5 步:申请内存 -> 复制数据 -> 解密数据 -> 跳转到堆中执行恶意代码 -> 修改原始代码并跳回执行。不过,我们可能会有个疑惑,病毒为什么不直接在堆中执行核心的恶意操作呢,还要通过修改原始代码来在 0x400000 空间解密执行核心的恶意代码。这是因为,一些比较高级的沙箱、杀软会监控病毒创建大片内存空间的操作,这时一旦释放出解密代码,便会立刻被沙箱、杀软检测到,所以在堆中的代码一般不会只会直接进行核心的恶意操作。

揭开病毒的面纱–恶意代码自解密技术

了解了恶意代码自解密技术后,来看看最近流行的 GandCrab 勒索病毒( MD5 48A673157DA3940244CE0DFB3ECB58E9 ),使用的也是这种自解密技术,来实现免杀。使用 DIE 对样本进行检测,显示并未加壳。

揭开病毒的面纱–恶意代码自解密技术

自解密的手法跟上述提到的相似,在 0x1280000 处申请了一段内存空间。

揭开病毒的面纱–恶意代码自解密技术

堆中的代码负责修改原始代码并跳转回去执行。

揭开病毒的面纱–恶意代码自解密技术

跳转回来后, 0x403016 处的代码就是解密后的核心恶意代码,接下来就可以调试 GandCrab 的恶意代码了。

揭开病毒的面纱–恶意代码自解密技术

将内存 Dump 下来,也可以分析出加密文件的代码逻辑。

揭开病毒的面纱–恶意代码自解密技术

VT 上查询该病毒的报毒情况,只有大概半数的引擎报毒,而且报出的病毒类型大多不能定位到 Ransom ,看来, GandCrab 使用这种自解密的方式还是起到了一定的免杀效果。

揭开病毒的面纱–恶意代码自解密技术


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入浅出WebAssembly

深入浅出WebAssembly

于航 / 电子工业出版社 / 2018-11 / 128.00元

WebAssembly是一种新的二进制格式,它可以方便地将C/C++等静态语言的代码快速地“运行”在浏览器中,这一特性为前端密集计算场景提供了无限可能。不仅如此,通过WebAssembly技术,我们还可以将基于Unity等游戏引擎开发的大型游戏快速地移植到Web端。WebAssembly技术现在已经被计划设计成W3C的标准,众多浏览器厂商已经提供了对其MVP版本标准的支持。在Google I/O ......一起来看看 《深入浅出WebAssembly》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试