恶意代码分析实战 10 数据加密

10.1 Lab13-01

  1. 比较恶意代码中的字符串(字符串命令的输出)与动态分析提供的有用信息,基于这些比较,哪些元素可能被加密?

使用WireShark进行动态分析。
vmware_9XwdfEL51d.png
有一串字符看起来像是加密的。
使用Strings分析一下。
发现疑似Base64的存在痕迹。
vmware_kfzO3xrzFG.png
没有发现上面看到的疑似加密的字符串和网址。可能是加密了。

  1. 使用IDAPro搜索恶意代码中字符串xor,以此来查找潜在的加密,你发现了哪些加密类型?

使用IDA查找所有xor位置。
vmware_LAonvokDBZ.png
这里面唯一看着像是加密的是这行命令。
:::info
xor eax, 3Bh
:::
vmware_n9LCxplesr.png
对字符进行了xor的3Bh操作。

  1. 恶意代码使用什么密钥加密,加密了什么内容?

交叉引用,进入函数调用处。
vmware_6PRGVHCNe9.png
对资源进行了很多操作。
vmware_mDgtpdexK5.png
我们怀疑加密数据就在资源节中。
使用ResourceHacker查看。
vmware_6LretkC5D6.png
使用WinHex进行修改。
vmware_DAh2v7ub9e.png
是一个网址。

  1. 使用静态工具FindCrypt2、Krypto ANALyzer(KANAL)以及 IDA熵插件识别一些其他类型的加密机制,你发现了什么?

使用Krypto ANALyzer插件进行分析。
vmware_a9krSKQ2TJ.png
发现base64编码表。
在IDA上跳转到这个地址。
vmware_jQG1Gjpvu1.png

  1. 什么类型的加密被恶意代码用来发送部分网络流量?

vmware_YnzoJGEix5.png
函数嵌套了很多轮,最终在main函数中看到了,是将GET请求进行了标准的Base64加密。

  1. Base64编码函数在反汇编的何处?

vmware_ylOFIiPj5T.png
这里就是Base64编码函数的位置。

  1. 恶意代码发送的 Base64加密数据的最大长度是什么?加密了什么内容?

vmware_jCm7G7C2Yn.png
函数开头使用strlen查找原字符串的长度,在外部循环(代码块loc_401100)的开头与3比较,在下图处于4比较。
vmware_UdJGJIPS6G.png
这一点更加确定这是Base64加密。
Base64加密前,Lab13-01.exe复制最大12个字节的主机名,这使得GET请求的字符串的最大字符格个数是16.

  1. 恶意代码中,你是否在 Base64加密数据中看到了填充字符(=或者==)?

vmware_5B0nDaNewO.png
如果主机名小于12个字节并且不能被3整除,则可能使用填充字符。

  1. 这个恶意代码做了什么?

Lab13-01.exe用加密的主机名发送一个特定信号,知道接受待定的回应后退出。

10.2 Lab13-02

  1. 使用动态分析,确定恶意代码创建了什么?

运行程序后,使用Promon进行监控,发现有很多创建和写入文件的操作。
vmware_BDE5ZQ2wPe.png
回到程序所在目录,发现创建了很多文件,使用WinMD5确认不是同一个文件。
vmware_ZzucWrLL4l.png

  1. 使用静态分析技术,例如 xor指令搜索、FindCrypt2、KANAL以及IDA熵插件,查找潜在的加密,你发现了什么?

使用FindCrypt2,没发现什么。
vmware_Z5MkTvwgOq.png
使用KANAL。
vmware_tjR8eSVrkU.png
也没有发现什么。
使用IDA的xor寻找。
vmware_LUXHmXX9et.png
查看函数调用。
vmware_h0CAMwE2mb.png

  1. 基于问题1的回答,哪些导入函数将是寻找加密函数比较好的一个证据?

我们看到了WriteFile函数被多次调用,我们怀疑这个导入函数是寻找加密函数的较好证据。
vmware_oWE9SKmT9g.png

  1. 加密函数在反汇编的何处?

GetTickCount 函数,返回子系统启动以来的毫秒数,应该是用来写入文件名字的。
vmware_SoZ8YRGdPv.png
那么下面的函数应该就是加密函数了。
LenovoPcManager_q7LL4VqN5e.png

  1. 从加密函数追溯原始的加密内容,原始加密内容是什么?

vmware_kiWpLYafIB.png
进入这个函数查看。
vmware_HtXzuRnbpr.pngvmware_IrOvj8FpuH.png
分析API函数可知,该函数的作用是截图屏幕,也就是原始加密内容。

  1. 你是否能够找到加密算法?如果没有,你如何解密这些内容?

加密算法已经找到,但该算法并不是标准的算法,可以使用ImmunityDbg进行解密。

  1. 使用解密工具,你是否能够恢复加密文件中的一个文件到原始文件?

vmware_A6vz0GXXdo.png
在加密前和加密后下断点。
首先运行至获取加密文件,使用WinHex打开文件,复制文件内容。
vmware_SMDyc4XX3u.png
粘贴到ImmunityDbg。
vmware_UST3iIMvG3.png
运行之后获得解密文件,修改后缀为bmp后,打开图片。
vmware_7PGTkyK2sq.png
解密成功。
或者换一种方式,使用Python脚本。
chrome_lGpAZYH4PP.png

10.3 Lab13-03

  1. 比较恶意代码的输出字符串和动态分析提供的信息,通过这些比较,你发现哪些元素可能被加密?

使用WireShark动态分析,发现一个网址。
vmware_52QaRgHfz8.png
使用IDA分析,看到Base64加密的字符表。
vmware_8jsBDB0ySj.png

  1. 使用静态分析搜索字符串xor来查找潜在的加密。通过这种方法,你发现什么类型的加密?

vmware_AYASrWSZT0.png
搜索xor指令发现了6个可能与加密相关的单独函数,但是加密的类型一开始并不明显。

  1. 使用静态工具,如FindCrypt2、KANAL 以及 IDA熵插件识别一些其他类型的加密机制。发现的结果与搜索字符XOR结果比较如何?

KANAL。
vmware_OMcmR2RaXy.png
FindCrypt2。
vmware_qbNniMI2wG.png
发现了AES加密算法。

  1. 恶意代码使用哪两种加密技术?

恶意代码使用AES和自定的Base64加密。

  1. 对于每一种加密技术,它们的密钥是什么?

· Base64的密钥。
vmware_2OUa5QzJuz.png
xor6的加密循环。
vmware_ABNeXnUKby.png
查看一段代码。
vmware_V9o7vu1xKY.png
s_xor2和s_xor4调用加密常量。
vmware_tGewaa6HE5.png
s_xor3和s_xor5调用解密常量。
vmware_L9Ls5RTy33.png
该函数调用二和4,所以是加密函数。
vmware_kHL3HbaApE.png
分析s_xor1,可以得知,这是一个密钥初始化函数。
由此我们也找到了密钥。
vmware_V1QBdokcBI.png

  1. 对于加密算法,它的密钥足够可靠吗?另外你必须知道什么?

vmware_YXOp409BEO.png
vmware_qCWxFdQJz6.png
对于自定义的Base64加密的实现,缩印字符串已经足够了。凡是对于AES,实现解密可能需要密钥之外的变量。如果使用密钥生成算法,则包括密钥生成算法,密钥大小,操作模式,如果需要还包括向量的初始化。

  1. 恶意代码做了什么?

恶意代码使用自定义的Base64加密算法加密传入命令和以AES加密传出shell命令响应来建立反连命令shell。

  1. 构造代码来解密动态分析过程中生成的一些内容,解密后的内容是什么?
    使用Python编写解密脚本。
import string
import base64

S = ""
tab = 'CDEFGHIJKLMNOPQRSTUVWXYZABcdefghijklmnopqrstuvwxyzab0123456789+/'
b64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
ciphertext = 'BInaEi=='
for ch in ciphertext:
    if(ch in tab):
        S += b64[string.find(tab, str(ch))]
    elif(ch == '='):
       S += '='
print base64.decodestring(S)

运行结果。
vmware_yuaYgmmdfG.png
AES解密,失败。

# pip install pycryptodome
from Crypto.Cipher import AES
import binascii

raw = 'eb 63 85 35 e8 45 cc e9  5c 92 36 9d 31 d5 3c 01' + \
      '8e bf e5 8b 06 e1 48 3f  42 5c 5a 0a 4c 75 b2 fa' + \
      '7a c5 3c 27 f2 04 d2 25  d8 e6 c5 d5 78 03 34 98' + \
      '49 5e 4f fd f7 dd 63 a6  91 0e 81 06 cc a8 62 ac' + \
      '74 f2 4a 26 e7 b2 55 03  d3 71 c8 a9 4c 61 c0 65'
ciphertext = binascii.unhexlify(raw.replace(' ', ''))
obj = AES.new('ijklmnopqrstuvwx', AES.MODE_CBC)
print obj.decrypt(ciphertext)

msedge_8Mf2G7xL33.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值