字符串加密/解密混淆中,如何在不执行代码的情况下识别加密算法和密钥?探讨其在内存中的运行时解密 Hook 技术。

各位老铁,大家好!今天咱们来聊聊字符串加密/解密这事儿,这可是代码混淆中的重头戏。很多时候,我们拿到一个程序,字符串都被加密得七荤八素,想分析都无从下手。别慌,今天咱们就来扒一扒,如何在不执行代码的情况下识别加密算法和密钥,以及运行时解密 Hook 技术的那些事儿。 一、不执行代码识别加密算法和密钥:静态分析的艺术 首先,我们要明确一点:不执行代码就想完全还原所有加密算法和密钥,这几乎是不可能的。但我们可以通过静态分析,尽可能地逼近真相。 特征码识别法:大海捞针也要捞准 很多加密算法都有一些标志性的常量、运算或者函数调用。我们可以通过搜索这些特征码,来缩小算法的范围。 常见算法特征: 算法 特征 XOR 简单的位异或操作,可能会有循环异或的特征。 AES S盒(Substitution Box)的查找表,固定的轮常量,以及AddRoundKey、SubBytes、ShiftRows、MixColumns等操作。 DES/Triple DES 固定的初始置换表、逆初始置换表、S盒、密钥置换表等。 RC4 状态数组(S盒)的初始化和伪随机数生成算法(PRGA)。 Base64 固定的索引表 …