xml地图|网站地图|网站标签 [设为首页] [加入收藏]

反调节和测量试验技术

来源:http://www.ruibiaowang.com 作者:基础资源服务 人气:114 发布时间:2019-10-20
摘要:原标题:JavaScript 反调试手艺 写在日前的话: 以前,小编直接都在研究Java相关的反调节和测量检验技巧。不过当笔者在网络搜寻相关材质时,小编发觉网络并未稍微有关那上边包车型

原标题:JavaScript 反调试手艺

写在日前的话:

以前,小编直接都在研究Java相关的反调节和测量检验技巧。不过当笔者在网络搜寻相关材质时,小编发觉网络并未稍微有关那上边包车型客车篇章,並且固然有也是特不完整的这种。所以在此篇小说中,小编策画跟我们总括一下有关Java反调节和测量检验手艺方面包车型客车故事情节。值得大器晚成提的是,当中多少措施已经被网络犯罪分子普遍应用到黑心软件之中了。

图片 1

对此Java来讲,你只须求花一点时日打开调节和测量试验和深入分析,你就可见精通到Java代码段的机能逻辑。而大家所要研商的剧情,可以给那多少个想要深入分析你Java代码的人充实必然的难度。可是大家的才干跟代码混淆毫无干系,大家重视针对的是哪些给代码主动调试扩大困难。

本文所要介绍的技巧方法大概如下:

1. 检查评定未知的试行碰到(大家的代码只想在浏览器中被实行);

  1. 检查实验调试工具(比方DevTools);

  2. 代码完整性调控;

  3. 流完整性调节;

  4. 反模拟;

一句话来讲,假若大家检查实验到了“不正规”的情况,程序的运作流程将会退换,并跳转到伪造的代码块,并“隐敝”真正的效应代码。

大器晚成、函数重定义

那是朝气蓬勃种最宗旨也是最常用的代码反调节和测量试验手艺了。在Java中,大家得以对用于搜集音信的函数实行重定义。比如说,console.log()函数能够用来征求函数和变量等新闻,并将其出示在调整台南。尽管大家再次定义了这一个函数,我们就足以修改它的一言一动,并逃匿特定音信或出示伪造的消息。

咱俩得以一直在DevTools中运维这一个函数来打听其成效:

console.log("HelloWorld");

varfake= function(){};

window['console']['log']= fake;

console.log("Youcan't see me!");

运维后我们将会看出:

VM48:1 Hello World

您会意识第二条消息并从未彰显,因为大家再次定义了这几个函数,即“禁止使用”了它原先的效能。但是我们也足以让它突显伪造的音信。比方说那样:

console.log("Normalfunction");

//First we save a reference to the original console.log function

varoriginal= window['console']['log'];

//Next we create our fake function

//Basicly we check the argument and if match we call original function with otherparam.

// If there is no match pass the argument to the original function

varfake= function(argument){

if(argument=== "Ka0labs"){

original("Spoofed!");

}else{

original(argument);

}

}

// We redefine now console.log as our fake function

window['console']['log']= fake;

//Then we call console.log with any argument

console.log("Thisis unaltered");

//Now we should see other text in console different to "Ka0labs"

console.log("Ka0labs");

//Aaaand everything still OK

console.log("Byebye!");

意气风发旦旭日东升切符合规律的话:

Normal function

VM117:11Thisisunaltered

VM117:9Spoofed!

VM117:11Bye bye!

实际,为了调节代码的实施格局,我们还是能够以越发聪明的办法来修改函数的效率。比方说,大家能够依据上述代码来构建二个代码段,人己一视定义eval函数。大家得以把Java代码传递给eval函数,接下去代码将会被总计并实施。假使大家重定义了那些函数,大家就足以运营不一样的代码了:

//Just a normal eval

eval("console.log('1337')");

//Now we repat the process...

varoriginal= eval;

varfake= function(argument){

// If the code to be evaluated contains1337...

style="font-size: 16px;">if(argument.indexOf("1337")!==-1){

// ... we just execute a different code

original("for (i = 0; i < 10;i++) { console.log(i);}");

}

else{

original(argument);

}

}

eval= fake;

eval("console.log('Weshould see this...')");

//Now we should see the execution of a for loop instead of what is expected

eval("console.log('Too1337 for you!')");

运维结果如下:

1337

VM146:1Weshould see this…

VM147:10

VM147:11

VM147:12

VM147:13

VM147:14

VM147:15

VM147:16

VM147:17

VM147:18

VM147:19

正如此前所说的那么,就算这种办法十二分神奇,但那也是风姿罗曼蒂克种特别基础和科学普及的秘籍,所以比较容易被检查测试到。

二、断点

为了救助大家询问代码的效果,Java调节和测量检验工具(举个例子DevTools)都得以透过安装断点的法子阻止脚本代码推行,而断点也是代码调节和测量检验中最基本的了。

活龙活现旦你研讨过调节和测量试验器大概x86架构,你可能会相比较熟练0xCC指令。在Java中,大家有四个称作debugger的接近指令。当大家在代码中扬言了debugger函数后,脚本代码将会在debugger指令这里结束运作。比方说:

console.log("Seeme!");

debugger;

console.log("Seeme!");

无数生意产品会在代码中定义几个可是循环的debugger指令,不过某个浏览器会掩没这种代码,而略带则不会。这种艺术的重点目标就是让那么些想要调节和测验你代码的人备感头疼,因为特别循环意味着代码会不停地弹出窗口来打听你是或不是要三番五次运转脚本代码:

setTimeout(function(){while (true) {eval("debugger")

三、时间隔断

那是风流洒脱种从守旧反逆向本领这里借鉴过来的基于时间的反调节和测验技艺。当脚本在DevTools等工具处境下举行时,运维速度会那么些慢(时间久),所以我们就足以依附运转时刻来决断脚本当前是还是不是正在被调养。比方说,大家得以经过度量代码中多少个设置点之间的运作时刻,然后用这一个值作为仿照效法,假若运转时刻超越这么些值,表明脚本当前在调节和测量检验器中运维。

示范代码如下:

set Interval(function(){

varstartTime= performance.now(),check,diff;

for(check= 0;check< 1000;check++){

console.log(check);

console.clear();

}

diff= performance.now()- startTime;

if(diff> 200){

alert("Debugger detected!");

}

},500);

四、DevTools检测(Chrome)

那项手艺应用的是div成分中的id属性,当div成分被发送至调控台(比如console.log(div))时,浏览器会自动尝试得到在那之中的因素id。如若代码在调用了console.log之后又调用了getter方法,说明调整台当前正值运转。

简易的概念验证代码如下:

let div= document.('div');

let loop= setInterval(()=> {

console.log(div);

console.clear();

});

Object.defineProperty(div,"id",{get: ()=> {

clearInterval(loop);

alert("Dev Tools detected!");

}});

五、隐式流完整性调控

当大家尝试对代码举办反混淆处理时,大家首先会尝试重命名有个别函数或变量,可是在Java中大家可以检查实验函数名是或不是被修改过,或然说我们得以一向通过储藏室追踪来收获其本来名称或调用顺序。

arguments.callee.caller能够帮助大家创立三个饭馆追踪来囤积在此之前执行过的函数,演示代码如下:

functiongetCallStack(){

varstack= "#",total= 0,fn=arguments.callee;

while((fn= fn.caller)){

stack= stack+ ""+fn.name;

total++

}

returnstack

}

functiontest1(){

console.log(getCallStack());

}

functiontest2(){

test1();

}

functiontest3(){

test2();

}

functiontest4(){

test3();

}

test4();

注意:源代码的歪曲程度越强,那个本事的功能就越好。

六、代理对象

代办对象是当前Java中最得力的四个工具,这种对象能够支持大家询问代码中的其余对象,包括修改其表现以至触发特定条件下的指标活动。例如说,咱们能够创建二个嗲呢对象并追踪每叁回document.createElemen调用,然后记录下相关音信:

consthandler= {// Our hook to keep the track

apply: function(target,thisArg,args){

console.log("Intercepted a call to with args: "+ args);

returntarget.apply(thisArg,args)

}

}

document.= newProxy(document.,handler)// Create our proxy object withour hook ready to intercept

document.('div');

接下去,大家得以在调整新北著录下相关参数和音讯:

VM64:3 Intercepted a call to with args: div

我们可以利用那几个音讯并由此拦截有个别特定函数来调度代码,不过本文的关键目标是为着介绍反调节和测验技艺,那么我们什么检查评定“对方”是或不是采取了代办对象呢?其实那正是一场“猫抓老鼠”的玩耍,比方说,我们能够使用一样的代码段,然后尝试调用toString方法并抓获十分:

//Call a "virgin" :

try{

document..toString();

}catch(e){

console.log("I saw your proxy!");

}

新闻如下:

"function () { [native code] }" style="font-size: 16px;">

而是当大家利用了代理之后:

//Then apply the hook

consthandler= {

apply: function(target,thisArg,args){

console.log("Intercepted a call to with args: "+ args);

returntarget.apply(thisArg,args)

}

}

document.= newProxy(document.,handler);

//Callour not-so-virgin-after-that-party

try{

document..toString();

}catch(e){

console.log("I saw your proxy!");

}

没有错,大家实在能够检测到代办:

VM391:13 I saw your proxy!

小编们还能增加toString方法:

consthandler= {

apply: function(target,thisArg,args){

console.log("Intercepted a call to with args: "+ args);

returntarget.apply(thisArg,args)

}

}

document.= newProxy(document.,handler);

document.= Function.prototype.toString.bind(document.);//Add toString

//Callour not-so-virgin-after-that-party

try{

document..toString();

}catch(e){

console.log("I saw your proxy!");

}

今天我们就不可能检验到了:

"function () { [native code] }"

就如本身说的,那就是一场“猫抓老鼠“的游戏。

英文: x-c3ll 译文:FreeBuf.COM

www.freebuf.com/articles/system/163579.html

到现在无偿接触web前端行当的火候来啦!web前端速抢

*扬言:内容与图片均来自网络(部分内容有修改),版权归原来的书文者全数,世尊自新闻有误或侵犯版权,请联系我们删除或授权事宜。

“阅读原著”再次来到天涯论坛,查看越来越多

主要编辑:

本文由澳门新葡萄京娱乐网站发布于基础资源服务,转载请注明出处:反调节和测量试验技术

关键词:

上一篇:没有了

下一篇:没有了

最火资讯