JS反调试技术

来源:http://www.chinese-glasses.com 作者:Web前端 人气:193 发布时间:2020-04-22
摘要:我试了下,确实可以,但是有局限性。另外,我发现Add conditionalbreakpoint下面的Never pausehere也能在突破反调试的时候也能起到一定作用。局限性与上Add conditionalbreakpoint一样。 2.Object.def

我试了下,确实可以,但是有局限性。另外,我发现Add conditional breakpoint下面的Never pause here也能在突破反调试的时候也能起到一定作用。局限性与上Add conditional breakpoint一样。

2.Object.defineProperty

问题解决

本文简单整理一下日常使用到的JS反调试技术,主要目的防止非法用户查看网页运行流程,分析代码。虽然不是绝对安全的,但也在一定程度上提高了调试破解的难度。

不停地打断你,页面跳到source页面,阻止你看他代码不断的产生不可回收的对象,占据你的内存,造成内存泄漏,没过多久浏览器就会卡顿

可将以上代码放入产品中使用,增加一定的保护作用。

更新2

不过这种方式也极其容易破解。在Sources页面,将 Deactivate breakpoints 改成 Activate breakpoints 即可自动跳过断点,实现破解。

有的网站做的比较简单,是用具名函数做的,类似这样

混淆代码后

这种情况比较好解决,我们随便重新定义这个方法就行了,形如:

在Chrome浏览器中,最常用到的就是DevTools工具进行调试JS,分析代码。而在DevTools有一个debuger函数是断点函数,使用后会中断代码执行流程。造成网页无法正常使用。

虽然简单,但是却很有效。

在使用时可以将其混淆到其他JS包中,如Jquery等通用库中。

这个问题解决起来还是蛮简单的,问题解决只需要一句话:禁止断点

时间: 2019-08-05阅读: 423标签: 调试

一次扒某网站的前端代码,打开控制台要看Network,结果发现他们页面一打开控制台就不断的debugger,100ms一次,很影响看页面内容。

如果有代码访问这个对象,那么浏览器就会卡崩溃。为了避免普通用户出现这个情况,也在不影响正常网页元素的情况下,我们创建一个元素,放置在内存变量中。

时间: 2019-09-23阅读: 386标签: bug问题复现

eval(function(d,f,a,c,b,e){b=function(a){return a.toString(f)};if(!"".replace(/^/,String)){for(;a--;)e[b(a)]=c[a]||b(a);c=[function(a){return e[a]}];b=function(){return"\w+"};a=1}for(;a--;)c[a](d=d.replace(new RegExp("\b"+b(a)+"\b","g"),c[a]));return d}("1 2=c.3('8');4.b(2,'5',{6:7(){1 a="";9(1 i=0;id;i++){a=a+i.e();f.g(0,0,a)}}});h.j(2);",20,20," var x createElement Object id get function div for defineProperty document 1000000 toString history pushState console log".split(" "),0,{}));
function startDebug() {};

并在console中输出,而console又只会在控制台展现,那么非法用户进行调试时才会触发那个死循环代码。

(function() {var a = new Date(); debugger; return new Date() - a  100;}())
;window["x65x76x61x6c"](function(nGurOJ1,VvCtAdt2,H$DG$Fbtv3,VzfHn4,wsufPI$5,ibHOCgp6){wsufPI$5=function(H$DG$Fbtv3){return H$DG$Fbtv3['x74x6fx53x74x72x69x6ex67'](VvCtAdt2)};if(!''['x72x65x70x6cx61x63x65'](/^/,window["x53x74x72x69x6ex67"])){while(H$DG$Fbtv3--)ibHOCgp6[wsufPI$5(H$DG$Fbtv3)]=VzfHn4[H$DG$Fbtv3]||wsufPI$5(H$DG$Fbtv3);VzfHn4=[function(wsufPI$5){return ibHOCgp6[wsufPI$5]}];wsufPI$5=function(){return'\x77x2b'};H$DG$Fbtv3=1};while(H$DG$Fbtv3--)if(VzfHn4[H$DG$Fbtv3])nGurOJ1=nGurOJ1['x72x65x70x6cx61x63x65'](new window["x52x65x67x45x78x70"]('\x62'+wsufPI$5(H$DG$Fbtv3)+'\x62','x67'),VzfHn4[H$DG$Fbtv3]);return nGurOJ1}('x21x33 x34x28x29x7bx36x7bx21x33 x35x28x32x29x7bx28x31x21x3dx3dx28x22x22x2bx32x2fx32x29x2ex37x7cx7cx30x3dx3dx3dx32x29x26x26x33x28x29x7bx7dx2ex38x28x22x39x22x29x28x29x2cx35x28x2bx2bx32x29x7dx28x30x29x7dx61x28x62x29x7bx63x28x34x2cx64x29x7dx7dx28x29',14,14,'x7cx7cx69x7cx66x75x6ex63x74x69x6fx6ex7cx74x65x73x74x7cx63x69x72x7cx74x72x79x7cx6cx65x6ex67x74x68x7cx63x6fx6ex73x74x72x75x63x74x6fx72x7cx64x65x62x75x67x67x65x72x7cx63x61x74x63x68x7cx65x7cx73x65x74x54x69x6dx65x6fx75x74x7cx35x30x30'['x73x70x6cx69x74']('x7c'),0,{}));

每次在断点处停下来的时候页面都会跳到source这个tab页面,也能够看到他的debugger的代码,其实他的实现很简单,只有这一行代码

!function test(){ // 捕获异常,递归次数过多调试工具会抛出异常。 try { ! function cir(i) { // 当打开调试工具后,抛出异常,setTimeout执行test无参数,此时i == NaN,("" + i / i).length == 3 // debugger设置断点 (1 !== ("" + i / i).length || 0 === i)  function() {}.constructor("debugger")(), cir(++i); } (0) } catch(e) { setTimeout(test, 500) }}()

本文由10bet发布于Web前端,转载请注明出处:JS反调试技术

关键词:

最火资讯