Skip to content

Latest commit

 

History

History
90 lines (82 loc) · 2.05 KB

2.2Chrome拓展开发之自动注入Hook.md

File metadata and controls

90 lines (82 loc) · 2.05 KB

Chrome拓展开发之JS自动注入Hook

接下来,我们需要编写一个content_scripts脚本文件,让它在页面DOM渲染之前自动注入JS脚本文件,从而达到过反调试的效果。

我们在页面创建一个script节点,里边放入我们注入的代码。 实现了Hook Cookies,JSON.stringify,JSON.parse,eval和debugger以及检测Chome安装的插件。

(function(){
	'use strict';
	var s=document.createElement('script');
	
	//Hook Cookies
	s.innerHTML=`
		var cookie_cache=document.cookie;
		Object.defineProperty(document,'cookie',{
			get:function(){
					return cookie_cache;
				},
			set:function(val){
					console.log("setting cookie:",val);
					//debugger;
					var cookie=val.split(";")[0];
					var ncookie=cookie.split("=");
					var flag=false;
					var cache=cookie_cache.split(";");
					cache=cache.map(function(a){
						if (a.split("=")[0]==ncookie[0]){
								flag=true;
								return cookie;
							}
							return a;
						})
					cookie_cache=cache.join(;");
					if(!flag){
						cookie_cache+=cookie+";";
					}
					this._value=val;
					return cookie_cache;
				}
		});	

		//Hook JSON stringify
		var rstringify=JSON.stringify;
		JSON.stringify=function(a){
			console.log("Detect JSON.stringify:",a);
			debugger;
			return rstringify(a);
		}
		
		//Hook JSON parse
		var strparse=JSON.parse;
		JSON.parse=function(b){
			console.log("Detect JSON.parse:",b);
			return strparse(b);
		};
		//Detect Chrome plugins
		var plugins_cache=window.navigator;
		Object.defineProperty(navigator,"plugins",{
			set:function(val){
				console.log("navigator set:",val);
				debugger;
				},
			get:function(){
				console.log("get plugins");
				//debugger
				return plugins_cache;
				},
		});
		
		//Hook eval
		var _eval=eval;
		eval=function(c){
			_eval(c.replace("debugger","");
		};
		eval.toString=_eval.toString;
		
		//Hook Function
		var _construtor=constructor;
		Function.prototype.constructor=function(d){
			if (d=="debugger"){
				console.log("constructor:",d);
				return null;
			}
			return _construtor(d);
		};
`		
})

在实际开发中,并没有万能的JS Hook代码,我们需要根据具体的业务逻辑来微调上边的JS代码。