一、Tea
先来看一波C语言实现的代码,通过代码学习更快理解原理:
1 |
|
这里解释下一些知识点:
1 | a<<4表示a乘以2的4次方 |
由于是eax寄存器,存储32位的无符号在整数,最大4字节,所以多出来的会省去,举个例子:如果是0x1b2ceed32f,则会看到0x2ceed32f,在这里先提个醒,下面直接分析加密算法:
1 | void encrypt (uint32_t* v, uint32_t* k) { //传入v是我们的input数组,k是key数组 |
用个图解释下:
知道了加密,其实解密就是反解就可:
1 | void decrypt (uint32_t* v, uint32_t* k) { |
这就是初级的tea算法,其实知道了原理模改就变得很简单,下面是我魔改的加密和解密:
1 | void encrypt (uint32_t* v, uint32_t* k) { |
这里改变特征值,然后加密算法微调,加了异或而已,就完成了魔改工作,简单的tea过了后,下面开始进阶。
这里搞上python脚本直接解:
1 |
二、Xtea
同样的学习过程,先来源码学习:
1 |
|
这里在知道tea算法的基础上,再记住特征,key[sum&3],还有轮转数的选择,就可以认出Xtea算法了,继续进阶:
三、XXtea
同样地,先看下源码:
1 |
|
python脚本如下:
1 | import struct |
其实还有个集成库可以利用:
1 | text = "\x4d\xd6\x48\x7b\x0e\x97\xb5\x11\x0b\x82\x87\x8c\x3e\x31\xfc\x16\x7c\xfa\xe5\x10" |
还是xxtea比前面的两个更复杂,轮转数也更多,但是也更有趣,解密也一样这里就不重复说明了,记住特征值,
6 + 52/n和全部加密一次算一次轮转,2重循环。
以上三个关于tea的加密算法就了解到这里,后面继续学习re的知识,我觉得逆向就是对于算法的了解,静态分析+动态调试,找关键逻辑check函数,然后尝试进行解密即可。