EzRansomware勒索病毒分析
EzRansomware勒索病毒分析
西湖论剑线上题目
检测基本信息
用工具查询该二进制程序的基本信息。可知是个PE32的程序,用PEID查看,可以看到PEID无法识别,再用objdump读取程序段,可以看到一个pack段,结合PEID和objdump可以判断此程序是经过加保护壳的,一般来说就是压缩壳或者加密壳。


用虚拟机吧程序加载入od(windows下的动态调试工具),不能草率的更具ESP定律直接在内存设置硬件断点,虽然此处在虚拟机里,但程序跑丢的后果也是很大的。所以我采用单步调试,一步一步F8即单步调试中的不进入call方式。

可以看到这里有一个循环xor,可以判断这是一个加密壳,继续向下单步步入,到指令call 0x4c7891的地方,被调试的程序会奔溃退出。此处可以判断程序的入口点OPE就在这个函数中,因为OD调试器在加载程序的时候对于汇编指令是不会二次反汇编的,之后它会把壳程序解密出来的汇编码给误识别为数据,所以程序虽然进入了正确的入口,但是还是会由于识别错误而直接错误奔溃。

重新加载程序,这次直接在call 0x4c7891下断点,F9到这里,然后单步进入这个函数,继续单步调试,找到调试器无法识别的地方。然后用工具把程序的在内存中的景象dump出来形成新的一个程序。



用PEID查看新dump的程序,可以看出程序信息都可以正常识别了,并且这是一个MSCV编译的程序。

直接拖入IDA进行反汇编操作,观察main函数的汇编代码可以发现此处程序主要是通过修改注册表关闭了UAC并将程序提到了测试权限,后设置了TopLevelExceptionFilter,接下来就是一个try-catch块,汇编形式很好识别,这里有一个函数sub_402760,可以观察这就是main的最后了,但是什么都没做,可以猜测这个函数会引发异常,然后进行后面的恶意流程。

把sub_402760反编译,可以看到这里获取了主机的唯一标示然后进行了一个不明的操作,跟入识别后,流程就是md5函数,接着往下看,可以知道这个函数先是取得唯一标示然后md5后将哈希值写入一个全局变量Buffer,并且写入到一个C:\Users\Public\Downloads\user.flags文件中,最后抛出一个异常,可以和之前的try-catch块进行对照。

返回上级main函数,找到异常处理函数sub_401DC0。

这个函数里主要是形成了一个随机数,然后存在了pbBuffer变量里。
后面的往下寻找看似是程序结束了,但是显然没有这么简单,我们继续深入到汇编层面,可以看到有这样一段代码
call $+5
add byte ptr [esp], 0Fh
retn
Call +5的位置就是下一条add,然后这个add把函数返回地址加了0F,于是ret程序没有回到add,而是跑到了ret后面的一条指令,所以这个片段的代码实质上是没做什么操作的,只是混淆了程序的控制流,利用脚本patch掉程序中这些相似的花指令。

恢复正常的控制流后,可以看到div dword_4064E4这个内存空间的值之前是没有涉及到的,所以此处的div操作将会引发一个除0错误。回想到之前设置的TopLevelExceptionFilter,直接来到这个异常处理函数

函数比较简单就是先调用一个函数,后ip寄存器加了11,跳到了下一个函数的起始位置,接着分析。
第一个函数就是获取主机名并将其转化成小写字母,后进行md5加密,然后把md5的值和上文中的pbBuffer进行相加后放全局变量BigNumber里,然后返回,后面操作无关紧要,最后是返回到了main函数,代表此处的除0错误处理完成。


随后调用sub_4029C0,反编译后可以看到将之前生成的用户标识符Buffer与随机数pbBuffer加密后传到服务器49.232.226.202后socket操作结束。

call sub_402480
call sub_402220
call sub_4023C0
接下来调用了这三个函数,我们一个一个进入查看。
第一个函数就是勒索病毒加密文件的地方的,把所有在记录中的后缀名文件全部加密。第二个第三个大概观察就是写一个图片,然后展示给用户,大概要展示的就是付款途径和提示语了,这里我们不必深究,要深究的是加密文件的函数。

加密函数里面简单分析过后,会发现是一个base64的变换后与上文中的BigNumber进行循环异或。

此时程序的分析就结束了,我们主要要做的就是逆向加密算法,得到解密算法,用来恢复被此病毒加密的文件,即得到一个解密工具的目的。
加密流程:将主机名的小写经过md5后与一个随机变量相加作为一个密钥,然后把文件中的内容进行Base64加密后,和这个密钥进行循环异或。同时密钥和主机唯一标示的md5这两个值会传送到远程服务器上进行记录。
解密流程:此病毒加密算法是可爆破的,因为循环按位异或和密钥长度固定,可以将加密数据按密钥长度进行分块,进行特征值爆破得到密钥。
病毒流程:先是进行修改注册表进行权限修改操作,然后根据随机数和主机名字的小写md5生成一个密钥,与主机唯一编号的md5一同发送到服务器上面进行记录。然后搜索本机文档类型的文件,把文件内容base64编码后与密钥进行循环异或,最后生成类似消息通知的图片告知受害者。

浙公网安备 33010602011771号