频道栏目
首页 > 资讯 > 网络安全 > 正文

如何手脱Locky自定义壳

17-08-17        来源:[db:作者]  
收藏   我要投稿

Locky是一款勒索软件,因其加密后的文件后缀为.locky而得名。不同于一般的软件,Locky使用了自定义壳对代码进行保护,增加了对其进行静态分析的难度。这篇文章将教你一些小技巧并向你演示如何对Locky进行脱壳。

手脱Locky自定义壳

我将向你演示如何使用Ollydbg来给Locky脱壳。这个壳其实是比较简单的一种,但是需要你去分析。你可以从Hybrid-Analysis上去下载样本。

我要做的第一件事是使用PE静态分析工具来对待脱壳样本进行静态检测,比如你可以使用PortexAnalyzer。如果分析结果是类似于下图的,那么这就告诉我们这个样本是加了壳的。样本的多个节都是高熵值的,包括.rdata段

类似于die(detect it easy)这样的查壳工具是不知道如何对这个样本进行脱壳的,因为这个壳是自定义壳。在恶意样本中,自定义壳是经常出现的。

Locky的加壳器有一个比较奇怪的特征,它总是在文件版本信息中添加“32-bit Edition”字样,其他信息每次都会变化。

StringFileInfo

---------------

language ID: 0x0409

code page: 0x04b0

CompanyName: Doubtsoftware.com

FileDescription: Advanced Task Scheduler 32-bit Edition

FileVersion: 4.1.0.612

InternalName: #dvenced Task Scheduler 32-bit Edition

LegalCopyright: Copyright © Southsoftware.com, 2002-2015

OriginalFilename: Bifscheduler_edmin.exe

ProductName: Advanced Task Scheduler 32-bit Edition

ProductVersion: 4.1.0.612

Debug Information也是未知类型,因此Portex也无法给出进一步分析信息。

Debug Information

*****************

Time Date Stamp: Thu Dec 09 05:07:00 CET 2083

Type: 4102553603 no description available

如果你研究过这个样本(你可以使用hex editor搜索“RSDS”),就会知道样本中包含一个调试路径,这个路径看起来是随机的,当然也可能是被故意修改成看起来随机的:

Z:\as\28cxkoao\azoozykz\l0t\jx\w9y4cni\jyc6mq3\mvnt.pdb

尽管这个信息没法帮助我们脱壳,但是它可以作为这种加壳器的特征。以后再碰到这条信息,我们就可以知道是使用这种加壳器加壳的了。对样本进行字符串和导入表检查似乎也没什么用。

如果你拿到这个样本时还比较早,通过动态调试你可以很轻松的认出他就是Locky。但是如果你拿到的样本比较老,或者他的C&C服务器不再使用,那么它就不会进行加密动作。

现在使用Ollydbg来调试它,别忘了给你的虚拟机做快照。程序加载后可以一直按F8步过,按得时候看着点别跑飞了。如果你不小心在下面这个call上步过了,你就会看到样本执行了一大堆动作,这时你只能重新载入这个样本了。你要做的是按F7步进这个call。

下面这个call也是一样的,按F7步进

后面的操作类似,仔细盯着屏幕,只要没执行一堆作就一直按F8步过。

在地址0x402364处你会注意到代码正在写.rdata段(地址0X417EE)。如果你在这下一个断点,一直按F9并且在数据窗口中看着.rdata所在的内存位置,你就可以看到.rdata段是怎样被解密成那个代码的。

跳转到.rdata段的jump命令在地址0x4020F0出现。

这个地方需要注意,push命令后紧跟ret相当于一个jump操作。ret命令会使你跳转到0x41577A。与上面PortexAnalyzer生成的报告进行对比,或者从Ollydbg的内存窗口你可以确认,这就是.rdata段的虚拟地址。

但是我们的工作并没有结束,rdata段处被解密的代码仍然是加壳stub(用于将加壳后的代码解密的代码)。所以我们还需要按F8跟踪这段代码一会。在跟踪的过程中你会看到代码开始使用GetProcAddress收集常见DLL方法的地址,其中一个方法是RtlDecompressBuffer,这个方法经常被加壳器用来执行脱壳操作。

调试到地址0x415B37时停下

在eax寄存器上右击,选择反汇编器中跟进

现在就可以看到RtlDecompressBuffer方法的代码了。在PUSH DWORD PTR [EBP + C]命令处下断点

在EDI寄存器上右击选择数据窗口中跟进

可以看到现在数据窗口是空的

按F8之后,解密后的代码就会出现在这部分内存中

最后一件事,打开内存窗口,选择这部分内存,右击选择保存到可执行文件

选择要保存的位置就完成了。得到的二进制文件就是脱壳后的lockey你可以把它加载到hex editor中来查看他的字符串,这样就可以确定这是一个Locky了

相关TAG标签
上一篇:SSH 命令注入漏洞(CVE-2017-1000117)分析
下一篇:再谈CVE-2017-7047 Triple_Fetch和iOS 10.3.2沙盒逃逸
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站