Type7混淆加密过程,即从一个有26个ASCII字符表中,产生一个种子值(Seed Value)(0-52之间)随机抽取一个用来和明文密码的第一个字符异或,产生的结果用16进制表示,放在加密后字符串的第2、3位,然后种子值+1,再去抽取一个用来和明文密码第二个字符异或,16进制结果放在随后的位置位……。
26字符表如下:
0x64, 0x73, 0x66, 0x64, 0x3b, 0x6b, 0x66, 0x6f,
0x41, 0x2c, 0x2e, 0x69, 0x79, 0x65, 0x77, 0x72,
0x6b, 0x6c, 0x64, 0x4a, 0x4b, 0x44, 0x48, 0x53, 0x55, 0x42
用ASCII形式表示如下:
dsfd;kfoA,.iyewrkldJKDHSUBsgvca69834ncxv9873254k;fg87
如:随机产生一个0-52之间的数字,如seed=2,即为0x66。假设密码为lala。那么我们先把种子值分解成一个两位数,即0*10+2 = 2,就产生了密码的前两位,02,接着,我们用0x66和"l"的ascii形式0x6C进行异或,即0x66 ^ 0x6C = 0x0A。放在密码的随后两位,得到020A。然后种子值++,得到0x64,再与第二个明文密码字符异或,得到结果放在020A的后面。依次类推即得到密文。因此第一次取得的种子值不一样,最后得到的结果基本也不一样,如果种子值超过了52,那么将回滚到0,也即种子值 %= 53。
Type7混淆解密过程就是加密的反向,先取得初始种子值,也就是密文的前两位。如0623……,种子值就等于0*10+6 = 6 ,从表中取出字符,和0x23异或即得到原文第一个字符。