地址:https://match.yuanrenxue.com/match/1
添加一个条件断点 这样添加条件断点后,就不会一直触发Debug调试了
随机翻页一次,会出现一个请求
可以看到,请求中出现了page参数,还有一个未知参数 m 此次分析主要围绕m的产生,进行分析。
通过查看启动方式,找到这个地方 此时跟踪进入后,可以看到 所有的JS代码全部是被混淆过的,我们复制全部,使用猿人学自己的反混淆工具
地址 http://tool.yuanrenxue.com/deobfuscator
解混淆后可以看到,代码可以阅读了
接下来根据代码进行分析,分析后得知,生成M的代码主要存在在: 这一行
var _0x2268f9 = Date.parse(new Date()) + 100000000, _0x57feae = oo0O0(_0x2268f9.toString()) + window.f; const _0x5d83a3 = {}; _0x5d83a3.page = window.page; _0x5d83a3.m = oo0O0(_0x2268f9.toString()) + window.f + '丨' + _0x2268f9 / 1000;
进行部分参数替换后,可发现此代码为生成M的算法
_0x5d83a3.m = oo0O0(Date.parse(new Date()) + 100000000) + window.f + '丨' + Date.parse(new Date()) + 100000000 / 1000;
此时我们运行oo0O0(Date.parse(new Date()) + 100000000)后发现 结果永远是"" 现在差函数 oo0O0 的代码,我们进行打断点调试,找到oo0O0的代码
oo0O0(Date.parse(new Date()) + 100000000)
打完断点后,再次随机点一页,就会触发断点调试 此时不难发现,可以找到oo0O0函数,我们点击进入,可以看到,函数是在最后一行里 我们复制最后一行,进行分析,在复制出来的最后一行,搜索oo0O0,找到关键函数,开始剔除无用代码 剔除后的代码:
function oo0O0(mw){********;return''} //太多了,不方便展示
然后我们对代码进行格式化,使用猿人学自带的美化工具就可以了 现在我们继续分析代码,可以看到这样一条代码
eval(atob(window['b'])[J('0x0', ']dQW')](J('0x1', 'GTu!'), '\x27' + mw + '\x27'));
发现上面的代码全部是计算用的,所以围绕这条代码进行分析,我们需要知道这条代码的所有参数 atob(window[‘b’] J(‘0x0’, ‘]dQW’) J(‘0x1’, ‘GTu!’) ‘\x27’ mw #不难发现,这个参数是传递进来的参数
开始调试,复制全部JS输入进控制台,回车 现在开始获取每个参数的值,但是发现 此处代码是无法直接运行的,需要运行后,打断点进行调试输出,我们进行测试 新建一个代码块,将JS代码复制进去,右键Run(注意,一定要保存)踩了很多坑
运行成功,然后对代码进行打断点调试
我们现在调试一下 发现代码被断在了这里,我们现在开始获取刚才的参数都是什么 可以发现 window B又是一段JS 我们复制出来,暂时保留,等下进行分析 可以看到
此处也验证了mw的由来,是传递进来的参数,接下来,我们继续分析window b的代码 可以看到,最终要的参数window.f也出来了,是通过hex_md5产生了的, 结合最开始的m算法,我们进行改写这个jS
最终的算法为:
var times = Date.parse(new Date()) + 100000000; //当前的时间戳 var f = hex_md5(times.toString());//经过hex_md5后的f var m = "" + f + '丨' + times / 1000;
接下来我们我们改写一下js代码,使之可以调用
现在,我们去使用python代码调用一下,看看能不能产生m
运行后: 这时m的参数已经产生了出来,接下来我们去写一个请求,尝试获取一下隐藏的第四第五页 还需要改一个请求头 成功 ✿✿ヽ(°▽°)ノ✿
接下来,就是计算总值就可以了
完成,以上就是整个猿人学第一题的分析过程了,有什么不足的地方,希望指出,谢谢。