前言
现在许多gov网站都上了最新的瑞数6vmp,而vmp如果采用传统的扣代码方法难度是不小的。所以我决定采用补环境的方法过,虽然补环境框架那种一力破万法的方式很强,但是我还是决定用node+代理的方式,所以今天发一点纯补js过瑞数vmp的文章以供大家学习参考。
学习目标网站
aHR0cDovL3FpbmdkYW8uY2hpbmF0YXguZ292LmNuL3Jlc291cmNlZGF0YS9zc3dmMjAxOS9xeS8yMDIyMDEvdDIwMjIwMTEwXzY3NjA0Lmh0bWw=
如何判断是否为瑞数vmp
1.清除cookie情况下返回状态为412
2. 412 响应内容如下
3.之后还会生成一个js文件
过无限debugger
网上的代码参考
var _constructor = constructor;
Function.prototype.constructor = function (s) {
if (s == "debugger") {
console.log(s);
return null;
}
return _constructor(s);
}
//去除无限debugge
Function.prototype.__constructor_back = Function.prototype.constructor;
Function.prototype.constructor = function () {
if (arguments && typeof arguments[0] === 'string') {
//alert("new function: "+ arguments[e]);
if ("debugger" === arguments[0]) {
// arguments[e]-"consoLe.Log(\"anti debugger\");";
//arguments[0]=“;”;
return
}
return Function.prototype._constructor_back.apply(this, arguments);
}
}
var _Function = Function;
Function = function (s) {
if (s == 'debugger') {
console.log(s);
return null;
}
return _Function(s);
}
var eval_ = window.eval;
window.eval = function(x){
eval_(x.replace("debugger;"," ; "));
};
window.eval.toString = eval_.toString;
实测我的目标网站只需要以下操作即可
window.setInterval=function(){};
注意谨慎hook eval 因为可能导致hook后返回400 走错误分支
补环境
这里可以用框架也可以自己代理(可以看看开源框架如何循环代理的),这里帖一些可能的检测点
- try{return (window instanceof Window);}catch(e){}
- try{return __filename;}catch(e){}
- return typeof __loadScript == "function" && typeof __date_clock == "function"
- return typeof _globalObject != "undefined" && typeof window != "undefined" && _globalObject == window
- Object.getOwnPropertyDescriptor(navigator,'webdriver')
- eval('!new function(){eval("this.a=1")}().a')
- div=document.createElement('div');div.getElementsByTagName('i').length;;div.getElementsByTagName('i')[0]
- s=document.getElementsByTagName('script');s.length;s[1].getAttribute('r');s[0].parentElement.removeChild(s[1])
- s=document.getElementsByTagName('script');s.length;s[0].getAttribute('r');s[0].parentElement.removeChild(s[0])
- 错误堆栈检测
- meta=document.getElementById('ykBL9Y2EzdpX'); meta.getAttribute('r');meta.parentNode.removeChild(meta);meta.content
- document.visibilityState
- base=document.getElementsByTagName('base');base.length
- location.protocol;location.port;location.search;location.pathname;location.href;location.hostname;location.hash;
- window.self;window.top;
- history.replaceState
- xp=document.createExpression;'_doc' in xp;(jsdom检测)
- window.CanvasRenderingContext2D.prototype.getImageData.toString()
- window.HTMLCanvasElement.prototype.toBlob.toString()
- window.HTMLCanvasElement.prototype.toDataURL.toString()
- window.clientInformation
- /class/ 正则 test 'Event' (检测node Event)
- ActiveXObject
- dom form 操作
- document.documentElement.getAttribute('selenium');document.documentElement.getAttribute('driver');document.documentElement.getAttribute('webdriver')
- document.all
document. all===undefined; document.all==undefined; document. all.length;
最后成功拿到cookie,请求到200页面
学术交流+