Js逆向最新boss直聘__zp_stoken__-某boss逆向
仅供学习交流使用,请勿用作非法用途,如有侵权,联系删除文章!!!
仅供学习交流使用,请勿用作非法用途,如有侵权,联系删除文章!!!
url = "aHR0cHM6Ly93d3cuemhpcGluLmNvbS93ZWIvZ2Vlay9qb2JzP3F1ZXJ5PWphdmEmY2l0eT0xMDAwMTAwMDA="
打开这个网站,刷新一下抓包,找到需要的数据接口。
这里就不强调了,众所周知boss最有名的参数就是这个__zp_stoken__了,如果不携带这个参数请求,就会直接出现你的访问行为异常的情况,开始逆向分析,定位就不多说了,直接找到这里,进去就是一个大的控制流。
这里也是直接把这个代码全部拿下来,开始补环境
接下来就是补环境了,这个boss的环境特别多,这里我是使用一个脱环境脚本补的,这样就比较快,接下来说一些环境检测点吧
1.最直接的就是top.self,frames,parent他们和window的关系,以及他们之间的关系,location里面是空的,值在top.location里面。
2.一些比较常规的检测,原型检测和属性描述符检测和函数的toString检测,这里我直接通过重写Object.defineProperty进行绕过。
//保护Window原型
ldvm.toolsFunc.safeProto(Window, "Window");
//设置Window的原型链
Object.setPrototypeOf(Window.prototype, WindowProperties.prototype);
//设置Window原型属性
ldvm.toolsFunc.defineProperty(Window, "TEMPORARY", {configurable: false,enumerable: true,writable: false,value: 0
});
需要注意的是原型的指向问题,这里可以看出来他们的区别了。
3.navigator.plugins和navigator.mimeTypes,这里通过代理也可以补出来,通过一些补环境框架基本可以和游览器一样。
4.这个boss没有检测canvas,它基本上没有怎么检测其他的对象,主要就是window对象里面的属性特别多,还有个关键的dcoumenta.all检测,这里找到了一个简单的绕过方法,当然还有其他的办法。
const v8 =require('v8');
const vm=require('vm');
v8.setFlagsFromString('--allow-natives-syntax');
let undetectable = vm.runInThisContext("%GetUndetectable()");
v8.setFlagsFromString('--no-allow-natives-syntax');document = {all:undetectable
};
document.all[0] = null;
document.all[1] = {"标签对象":"测试"};
console.log(document.all == undefined);
console.log(document.all !== undefined);
console.log(document.all[0] === document.all(0));
console.log(document.all[1]);
5.一些node关键字检测,直接删除,还有就是in检测,就是这个方法hasOwnProperty方法。
6.报错检测,比如这里有些对象可以被new,但是有些对象被new了,就会报错,这个时候,你需要主动抛出这个错误,包括下面那个也是的,调用报错。
7.堆栈检测,这个直接hook就可以了。
补完成后,再对Object对象进行hook,这里主要就是Object.keys和Object.getOwnPropertyNames
然后就是这个网站的风控了,除了这个参数,还有就是ip和一个极验的九宫格验证码,这里不做分析。
生成这个参数后。我请求的时候发现成功率在50%左右,后面发现同一个ip如果请求频繁了,就算这个参数生成正确,也可能通不过,还有就是请求的时候,需要请求两次,在第二次请求的时候,加一个time.sleep,这样的成功率又高一点。
最后看一请求结果吧
boss的这个参数我之前也是一直在补环境研究,终于还是功夫不负有心人,相信你们也可以的!!!