XTEA
概述
XTEA 由剑桥大学计算机实验室的戴维·惠勒(David Wheeler) 和罗杰·李约瑟(Roger Needham) 设计。算法于 1997 年在一份未发表的技术报告中首次提出,并且没有申请任何专利,属于公共领域
核心参数
| 参数 | 详情 |
|---|---|
| 算法类型 | 对称分组密码(Symmetric Block Cipher) |
| 分组大小 | 64位(8字节) |
| 密钥长度 | 128位(16字节) |
| 推荐轮数 | 64轮(即32个周期) |
| 结构 | Feistel网络结构 |
工作原理
XTEA的加密过程可以概括为以下步骤:
密钥初始化:将 128 位的密钥分成四个 32 位的子密钥
K[0]到K[3]数据分组:将 64 位的明文分成左右两个 32 位的部分
V0和V1迭代加密:算法会进行多轮(推荐 64 轮)迭代。每一轮的核心运算是:
使用加法、异或和移位操作
每轮都会使用一个由固定常量
DELTA和轮数计算出的动态值SUM来选择并使用不同的子密钥
一个关键的固定常量是
DELTA = 0x9E3779B9输出密文:完成所有轮次后,
V0和V1组合成的 64 位数据即为密文
解密过程与加密过程对称,使用相同的密钥但以相反的顺序执行操作
实战案例
webassembly(WASM + XTEA)

WASM 不能直接使用 IDA 打开逆向,需要先转为 C
1 | wasm2c webassembly.wasm -o webassembly.c |

定位到 main() 函数

关键是其中调用的 f15() 函数,在其中看到 var_i3 = 2654435769u;,十六进制是 0x9e3779b9,这是 XTEA/TEA 的经典 delta
函数开头将 Key[4] 设置为了 0
1 | // 从内存地址 var_i0 开始,将连续的 16 字节(128 位)内存空间全部清零 |
加密则是将 0-31 字节分成了四组分别进行 XTEA 加密(AI 给出的,代码太复杂了)
1 | // 第一组 |
代码最后则是在做异或处理,例如第 34 位
1 | var_i1 = i32_load8_s(... +34u); |
将异或的数值提取出来
1 | xor_table = [ |
编写脚本
1 | """ |
