• 我们在哪一颗星上见过 ,以至如此相互思念 ;我们在哪一颗星上相互思念过,以至如此相互深爱
  • 我们在哪一颗星上分别 ,以至如此相互辉映 ;我们在哪一颗星上入睡 ,以至如此唤醒黎明
  • 认识世界 克服困难 洞悉所有 贴近生活 寻找珍爱 感受彼此

恶意代码分析实战:第十三章 数据加密

恶意代码分析实战 云涯 3年前 (2021-02-22) 1753次浏览

1 简单加密算法

1.1 凯撒密码

它是一种替换加密的技术,明文中的所有字母都在字母表上向后(或向前)按照一个固定数目进行偏移后被替换成密文。例如,当偏移量是3的时候,所有的字母A将被替换成D,B变成E,以此类推。这个加密方法是以罗马共和时期恺撒的名字命名的,当年恺撒曾用此方法与其将军们进行联系。

1.2 XOR

XOR加密使用一个静态字节值,通过与该值执行逻辑异或运算来修改明文的每个字节。

再次异或可解密

1.2.1 暴力破解XOR加密

255个密钥(0x01-0xFF)来对密文进行异或暴力破解解密。

1.2.2 保留NULL的单字节XOR加密

保留NULL的XOR对于0x00和密钥都不会转换,但是其他字节都会通过密钥进行转换。使用这种方式,被用来加密的部分明显减少。

保留NULL的XOR加密技术不易识别,且在shellcode中非常流行。

1.2.3 用IDA 识别XOR循环

  1. search->Text 搜索xor,选中find all occurrences框,会查到到结果。
  2. XOR加密通常会有一个嵌套循环。

1.3 Base64

Base64加密用ASCII字符串格式表示的二进制数据。

Base64编码将二进制数据转换为64个字符串的有限字符集。使用A-Za-Z0-9作为前62个值,+和/作为最后两个值。会使用“=”进行填充。

1.3.1 Base64加密过程

原始数据转换为Base64的过程非常标准。

待定……

1.3.2 识别和解密Base64

  • 长度可以被4整除。
  • 如果不可以整除,按照分析进行填充
  • Base64算法通常猪心MIME Base64标准,就是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/,因为Base64加密字符串通常使用索引字符串,含有Base64加密的代码经常会存这64个字符的字符串。
  • Base64一般会填充“=”
  • 使用在线网站进行解密

2 常见加密算法

2.1 识别常见加密算法

2.1.1 识别字符串和导入

比如当加密库(OPENSSL)被静态编译到恶意代码是,是不会被识别出函数的,可以通过字符串找openssl字样。

另外,查看导入函数,可以确定使用了什么加密算法。

2.1.2 查找加密常量

使用IDA FindCrypt插件可以识别出未修改的标志算法。

使用PEid的Krypto AnALyzer插件可以识别算法。

Rc4不使用加密常量,它动态创建结构,不在识别算法中。

2.1.3 查找高熵值内容

IDA的熵值插件idaentropy-plugin是针对PE文件计算熵值得一个工具。可以识别很多算法

另外一个插件IDAtropy(https://github.com/danigargu/IDAtropy)也可以计算熵值。识别算法。

举例说明:

比如一块256bit的块,0-256都出现的信息熵是8,那么接近8的几乎可以认定这个串0-256出现的“数”非常多

 

3 自定义加密算法

这一段没有任何加密迹象,插件也不能识别,熵值也不能判断,xor也不是。

发现加密算法是从可以的输入或者可以输出开始跟踪运行。

如果确定是自定义加密算法,只能耐心分析加密算法,写出解密算法

 

4 解密

4.1 自解密

程序运行自解密

4.2 手动执行解密函数

分析加解密函数,用代码(推荐IDApython)解密

 


云涯历险记 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:恶意代码分析实战:第十三章 数据加密
喜欢 (0)