识别代码里用的是什么加密算法

逆向时经常需要先认出"这段在做什么加密",才能谈后面的事。几个实用信号:

常量是最好的指纹

  • 0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476 → MD5/SHA-1 的初始向量
  • 0x6A09E667 开头的八个 → SHA-256
  • 0x9E3779B9 → TEA/XTEA 的 delta(黄金比例)
  • 0x63, 0x7C, 0x77, 0x7B... 开头的 256 字节表 → AES S-box
  • 0xEDB88320 → CRC32 的多项式(注意 CRC 不是加密,但经常被误认)

Ghidra 和 IDA 都有插件(FindCrypt、signsrch)自动扫这些。这应该是你的第一步,成本几秒钟。

结构特征

  • 16 轮或 32 轮的循环,每轮做移位异或 → 分组密码
  • 大整数运算 + 模幂 → RSA/DH
  • 256 字节的状态数组 + 两个索引来回交换 → RC4

没有常量的情况
白盒密码会把密钥揉进查找表,看不到标准常量。这时候只能从数据流形状判断:输入输出块大小、是否可逆、轮数。

一个提醒:认出算法只是第一步。真正的问题通常不在算法本身,而在怎么用的——ECB 模式、IV 写死、密钥硬编码、用 rand() 生成密钥。这些才是实际可利用的地方。