首页 > 编程语言 >通过已知明文攻击破解弱加密算法

通过已知明文攻击破解弱加密算法

时间:2024-10-19 20:44:22浏览次数:1  
标签:文件 字节 样本 0x00 明文 密文 破解 加密算法

样本分析日志

实习期间在微步沙箱上找到一个样本,其SHA256: 36c3405eafd9bdb4c6dd0ca98a2a4779ab34b8777a36b38347316f09109a87e6,在沙箱上检测为木马。

通过分析发现该样本总共分为三个阶段:第一阶段的逻辑是先检查当前路径,然后自复制到公共目录并运行,最后从远程FTP服务器上下载第二阶段的恶意代码,并将其加载到内存并执行。第二阶段的攻击就是通过所下载的远程文件实现,主要行为是从资源节中释放第三阶段实施攻击的代码。这里主要讨论第二阶段的资源释放过程。

通过IDA反编译可以发现二阶段代码中存在加载资源节的行为:
release_resource

并且在微步沙箱中检查到该样本的资源节的熵值偏高,所以怀疑其资源节可能是加了密的。

使用Resource Hacker打开样本的资源节,可以发现样本的资源节中存放了多个二进制文件。

resource section

资源节中的这些资源都是DLL(Dynamic Linkage Library)文件,除了127号文件,熵值偏高,好像是加密了的。

密文分析

因为这个文件是加了密的,并且难以在二阶段样本中定位到解密的代码(二阶段样本使用了某种代码混淆的机制),所以需要先对其进行破解才能进行下一步的分析。

在破解密文之前,至少需要知道密文加密的方式。虽然在二阶段没能定位到相关代码,但是该样本一阶段有一个解密过程,(远程FTP服务器上的文件是加密保存的,所以一阶段将二阶段文件下载下来后还需要进行解密),所以可以猜测资源节中的密文也是和一阶段的解密流程采用类似的算法。

decryption

可以看到样本使用的解密算法其实和维吉尼亚算法类似,只不过将维吉尼亚算法中移位运算换成了按位异或。

样本一阶段解密使用的密钥是"Ww6",尝试用这个密钥解密上面的密文,结果当然是失败了。

不过,因为这个密文大概率是一个PE格式的文件,而PE文件头的部分信息总是固定的,因此能够知道这个密文中的一部分明文。

比如从第3个字节开始的前面58个字节的取值为:{0x90, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0x00, 0xB8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00},并且在文件第78个字节的偏移处有一个DOS头的字符串:"!This program cannot be run in DOS mode."。

破解密文

在知道了这部分的明文信息后,就足以对其实施已知明文攻击(Known Plaintext Attack),因为根据前面的假设,这个加密文件所使用的加密算法本身就属于一种弱加密手段。

因为加密算法是通过异或操作进行的,所以这里直接将上面这些明文与密文进行异或,可以得到加密这部分明文所使用的密钥流。

异或的结果如下:

可以看到,这里所使用的密钥周期还是3,但是密钥的第一个字节是在变化的,用记事本将这些变化的字节单独拿出来看能不能找到一些规律。

changed bytes

将这些变化的字节放到一起后,还是能够观察出变化规律:每16个字节进行一次模0x80加0x50的运算。

有了这些变化规律后,就可以直接对密文进行破解,代码如下:

crack cipher

破解密文后,放到IDA中查看其字符串,可以看到IDA能够加载该文件,并且字符串中也包含一些特征字符串。

peek strings

这些字符串是Nitol木马家族的特征字符串。

标签:文件,字节,样本,0x00,明文,密文,破解,加密算法
From: https://www.cnblogs.com/TheFutureIsNow/p/18486483

相关文章