XTEA算法及例题总结
算法详解
在TEA
中,密钥是直接分成4个32位部分(总共128位),每轮加密过程中使用这些部分直接参与计算。密钥在整个加密过程中的使用比较固定,没有变化。这样,攻击者只需要通过分析固定密钥的几轮加密就能发现模式,从而降低了加密算法的安全性。
在XTEA
中,以及密钥并不是每轮加密中直接使用固定的部分。相反,XTEA通过密钥的不同部分在每一轮加密中进行动态调度,密钥在加密过程中会经过多次变换,从而增强了密钥的复杂性和加密过程的不可预测性。
加密流程示意图:
代码实现
下面是XTEA
算法加密过程的C语言函数实现
1 | void encrypt(uint32_t v[2], uint32_t const key[4]) |
下面是XTEA
算法解密过程的C语言代码实现
1 | void decipher(uint32_t v[2], uint32_t const key[4]) |
例题
[HNCTF 2022 WEEK3]Try2debugPlusPlus
前半部分是反调试的处理,不是这里的重点,动调时根据判断的条件patch或nop一下就好。
得到密钥后分析反汇编代码
1 | int __cdecl main(int argc, const char **argv, const char **envp) |
可知核心的加密算法在tea_encrypt()处,跟进查看
1 | __int64 __fastcall tea_encrypt(unsigned int *a1, __int64 a2) |
由&3
和>>11
等特征确认是XTEA加密算法,根据获得的密钥和enc
处得到的密文写出解密代码:
1 | void decrypt(uint32_t v[2], uint32_t const key[4]) |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 hanafuda_store's Blog!
评论