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循环
- search->Text 搜索xor,选中find all occurrences框,会查到到结果。
- 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)解密