@
bojieyang 比较迷惑的是b与结果的值都是数字,我先在楼主给的验证器里随便改了改b的值,发现结果某一位发生了变化,而且变化比较有规律,甚至出现了非数字的符号,对照ASCII表,猜测是对对应字节进行加减上的运算,基本否定是将b及结果看做数值进行的运算。
首先看a,感觉就是base64编码后的,一般用于字符串编码的方式不是很多,base64很典型
然后先对a进行base64解码,方便分析。对于a解码后的结果,几乎都落在非ASCII字符区域,直接看解码结果没法看,我是逐字节用ord函数转成10进制看的。
仅看第一组,抽取几个a的值,分别base64解码,把结果都列出来,隐约就可发现规律:
1. 第一字节都相同
2. 第二字节不相同,之后的字节都相同
3. 第二字节的差值与b有关系
4. a的长度等于结果长度
再抽取一组b为两位的,同样base64解码,列出结果进行对比
1. 第一字节都相同
2. 第二字节与第三字节不同,之后的都相同,
3. 第二、三字节,每字节的差值与b关
此时可得到一些规律:
1. 第一字节是固定处理的,与b无关
2. 之后的字节与b有关,基本是逐字节对应处理的
基本看得出整个处理的尿性就是相减,之后就是找几个位数比较长的a与结果互相加减,找规律。
由于楼主提供了一个验证器页面,大致找到一些规律后,就可以自己构造a与b的值,代入验证器进行实验。后面那个幻数表就是我构造了一个很长的a的值,代入验证器后,发现后面的结果是循环的,基本就可以认定是循环取的幻数进行操作的了,然后对照ASCII码表算出幻数。