YLLEN

要去看埃菲尔铁塔的顶

欢迎关注本人微博:t.cn/RGSLVUk

整理一些逆向算法的思路

CHECK代码如下


public bool check(string input)
{
    int num;
    string str = "xatuctf";
    new List<char>();
    string str2 = "";
    for (int i = 0; i < input.Length; i = num + 1)
    {
        int num3 = ((((input[i] >> 3) | str[i % str.Length]) ^ (input[i] << ((1 % str[i % str.Length]) & 0x1f))) % 0x41) + 0x3a;
        str2 = str2 + ((char) int.Parse(num3.ToString()));
        num = i;
    }
    return str2.Equals("hmvkQVQr_JmEN@IGlsOXdpIXKALFPapYQrBTG=");
}


编写注册机

#    根据上面check规则,是每七个一组,生成这样一个二维数组

       在 Rev[i][j] 中,

           如果满足  Index%0x7 == i && Rev[i][j] == output[i]

           那么该位置转换前的ASCII码值就是 j


str2 = 'xatuctf'
dict = {}
for j in range(7):
    for i in range(0x7f):
        c = chr( ((((i >> 3) | ord(str2[j])) ^ (i  << 1)) % 0x41) + 0x3a)
        dict[(j, i)] = c

print dict

output = 'hmvkQVQr_JmEN@IGlsOXdpIXKALFPapYQrBTG='
for i in range(38):
    index = i%7
    for k,v in dict.items():
        if (k[0] == index) & (v == output[i]):
            print i, chr(k[1])




评论

© YLLEN | Powered by LOFTER