【最新猿人学】 js 混淆 - 回溯 扣代码,补环境
暗号:aHR0cHM6Ly9tYXRjaC55dWFucmVueHVlLmNuL21hdGNoLzY=
题目:
先抓包分析接口,发现了加密值为m:
于是进入发起程序最后一个堆栈下断点:
然后点击下一页,就断住了,然后需要在作用域中观察加密值是否生成,如果没有看到,就往上查找堆栈:
在req堆栈处找到了m和q 的生成位置:
于是在此处下断点,更换一页,成功在此处断住
m的加密值是又r函数生成的:
而这里t的值在上方有赋值,为时间戳,window.o的值是1,重新更换一页,window.o的值还是1,所以这里的window.o的值是固定的
接下来进入r函数,发现其实结果是由z函数生成的,
所以接下来开始扣代码还原,扣代码过程省略,扣完后运行会显示:
搜索后是在下面这个地方输出:
在浏览器中这里下断点,然后在控制台中输出他们的值:
然后在修改js中的代码,输出e和t.length的值对比,发现扣下来的js中e并没有值:
所以直接添加代码:e = 128,再次运行代码,得到的m的结果是false
检查代码,会发现一段很可疑的代码:
这是只靠 []()!+ 组成的一种js 隐式类型转换,可通过ai查询它的工作原理
在浏览器中断点输出查看,他的值为false,所以直接将js中的值改为false
然后再看扣下来的js中这段代码的下面:
所以接下来需要补环境了,文章末尾有提供不环境的代理代码,代码复制进入js中最上方,再运行代码会发现很多环境都是缺的:
但其实主要缺的就是navigator 、 location 、 document,document可直接写为等于{} , navigator和location可以在浏览器控制台输出,再复制到js中,补完就能够获取到m的加密值了:
但是这个时候的值是错误的,并不能获取到数据:
所以加下来删除try 和对应的catch语句,看是不是try语句的问题,但是删除后并不会出现报错,然后开始慢慢检查,发现有个地方的值和浏览器中输出的值并不一样:
所以直接手动将这里修改为1024
然后编写python代码,就能正确获取到数据了
