javascript奇淫技巧:反调试

author author     2023-01-02     281

关键词:

JavaScript奇淫技巧:反调试

本文,将分享几种JS代码反调试技巧,目标是:实现防止他人调试、动态分析自己的代码。

检测调试,方法一:用console.log检测

代码:

var c = new RegExp ("1");

c.toString = function ()

alert("检测到调试")

console.log (c);

原理:

当console.log输出调试信息时,会将非字符串类型数据转成字符串,于是通过接管toString函数,判断是否有这样的行为,而如果没有打开调试窗口,即不会有console.log输出,从而识别是否于处调试状态。

运行效果:

JavaScript奇淫技巧:反调试_js加密

检测调试,方法二、通过代码执行时间检测

代码:

var startTime = new Date ();

debugger;

var endTime = new Date ();

var isDev = endTime-startTime> 100;

if (isDev)

    alert("检测到调试")

原理:

在代码不同语句间加入debuger指令,debugger会使调试模式暂停,那么暂停将造成延迟。

通过检测延迟前后果的时间值,从而判断是否发生了延时,如果发生,则表达处于调试状态。

运行效果:

debugger触发暂停:

JavaScript奇淫技巧:反调试_js调试_02

检测到调试:

JavaScript奇淫技巧:反调试_js调试_03

反调试手段

检测到调试又该如何呢?

反调试方法一、无限debugger

一般情况下,可以用无限循环的debugger,使不停的暂停代码执行,使调试无法进行。

如:

var c = new RegExp ("1");

c.toString = function ()

    alert("检测到调试")

   

    setInterval(function()

        debugger

    ,1000);

console.log (c);

运行效果:

JavaScript奇淫技巧:反调试_js加密_04

反调试方法二、内存耗尽

debugger方法虽然效果不错,但太过直观,反制效果也过去温柔。

另有一种“内存耗尽”的方式,会更隐藏、更强大,如:

var startTime = new Date ();

debugger;

var endTime = new Date ();

var isDev = endTime-startTime> 100;

var stack = [];

if (isDev)

   while(true)

    stack.push(this);

    console.log(stack.length,this)

   

运行效果:

代码运行造成的内存占用会越来越大,很快会使浏览器崩溃,如下图:

JavaScript奇淫技巧:反调试_反调试_05

JS代码加密

上述几种方法,已经达到了反调试的效果,但如果他人查看代码,也可能被找出检测功能并删去。

为了防止反调试功能被剔除,我们可以对JS代码进行混淆加密。

例如本文第一段代码:

var c = new RegExp ("1");

c.toString = function ()

alert("检测到调试")

console.log (c);

代码功能很清晰,使用JShaman进行混淆加密:

JShaman是专业且强力的JS代码混淆加密工具

JavaScript奇淫技巧:反调试_反调试_06

混淆加密后的代码,将成为:

JavaScript奇淫技巧:反调试_反调试_07

var _0x98ac=["117.","56.","26825.27970.21049.35850.35804."];function _0x(str,dy_key)dy_key=9;var i,k,str2="";k=str.split(".");for(i=0;i<k.length-1;i++)str2+=String.fromCharCode(k[i]^dy_key);return str2;function _0xb346gb(vm_opcode)var _array="3|2|1|4|0".split(_0x(_0x98ac[0])),_index=0;while(!![])switch(+_array[_index++])case 0:while(ip<vm_opcode.length)ip++;switch(vm_opcode[ip])case op.push:ip++;stack.push(vm_opcode[ip]);sp++;break;case op.add:var op_1=stack[sp-1];var op_2=stack[sp];var value=function(s,h)return s+h;(op_1,op_2);stack.push(value);sp++;break;case op.sub:var op_1=stack[sp-1];var op_2=stack[sp];var value=function(s,h)return s-h;(op_1,op_2);stack.push(value);sp++;break;case op.mul:var op_1=stack[sp-1];var op_2=stack[sp];var value=function(s,h)return s*h;(op_1,op_2);stack.push(value);sp++;break;case op.div:var op_1=stack[sp-1];var op_2=stack[sp];var value=function(s,h)return s/h;(op_1,op_2);stack.push(value);sp++;break;case op.xor:var op_1=stack[sp-1];var op_2=stack[sp];var value=function(s,h)return s^h;(op_1,op_2);stack.push(value);sp++;break;case op.pop:return stack[sp];continue;case 1:var ip=-1;continue;case 2:var stack=[];continue;case 3:var op=push:32,add:33,sub:34,mul:35,div:36,pop:37,xor:38;continue;case 4:var sp=-1;continue;break;var _0x97b=function(s,h)return s+h;(_0xb346gb([32,674032,32,674037,38,37]),_0xb346gb([32,651374,32,651368,38,37]));var c=new RegExp(_0x(_0x98ac[1]));_0x97b=function()return _0xb346gb([32,686171,32,686171,38,37]);();c[\\x74\\x6f\\x53\\x74\\x72\\x69\\x6e\\x67]=function()alert(_0x(_0x98ac[2]));;console[\\x6c\\x6f\\x67](c);

这样的代码,将很难理解其功能,也就可以防止代码被修改。

其它的JS功能代码,同样可以使用JShaman进行混淆加密,最终使用混淆加密后的安全代码。

javascript奇淫技巧:隐写术

JavaScript奇淫技巧:隐写术本文将用JavaScript实现“图片隐写术”。什么是隐写术?将文本或其它数据写入图片的技术,称为“隐写术”。比如下面这张图中,便隐藏着秘密信息,虽然看起来只是一张图。效果与用途图片隐写术的... 查看详情

javascript奇淫技巧:20行代码,实现屏幕录像

JavaScript奇淫技巧:20行代码,实现屏幕录像本文展示一个技巧,可以给任何网站、网页实现屏幕录像功能。即使你不是网站的管理者,也可以给它添加录制功能。方法如下:第一步:复制一段JS代码,这段代码是实现录像功能的... 查看详情

javascript奇淫技巧:变速齿轮(代码片段)

JavaScript奇淫技巧:变速齿轮在PC时代,曾有个名为“变速齿轮”的神奇软件,可以加快或减慢系统时间。当时常用来修改游戏速度,可实现外挂一般的效果,很不可思议。本文,将用JavaScript复刻这一功能&#... 查看详情

[转转]反调试技巧总结-原理和实现-----转

原本也是转的,但我没找到原作者标题: 反调试技巧总结-原理和实现-----转作者: lcx4时间: 2016-4-7链接: http://www.lcx4.com/?post=512008.8.7  shellwolf一、 前言    前段学习反调试和vc,写了antidebug-tester,经常会收到mes... 查看详情

看得我目瞪口呆的javascript奇淫技巧(代码片段)

刷知乎看到一个特别有意思的话题:JavaScript有什么奇技淫巧?[1]看到一个让我开眼界的回答,分享给大家,以下是正文:js是一门强大的语言。对黑客来说,这是绕过WAF的利器,比如当字母和数字都无... 查看详情

看得我目瞪口呆的javascript奇淫技巧(代码片段)

刷知乎看到一个特别有意思的话题:JavaScript有什么奇技淫巧?[1]看到一个让我开眼界的回答,分享给大家,以下是正文:js是一门强大的语言。对黑客来说,这是绕过WAF的利器,比如当字母和数字都无... 查看详情

javascript加密代码反调试

JavaScript奇技淫巧:加密JS代码反调试JS代码混淆加密,已被很多人使用,因为它真的很有用、很实用,可以用于保护代码、防护分析、复制、盗用,还可以用于小游戏过审、APP加固等方面。混淆加密后的JS代码,可能被他人分析... 查看详情

javascript加密代码反调试

JavaScript奇技淫巧:加密JS代码反调试JS代码混淆加密,已被很多人使用,因为它真的很有用、很实用,可以用于保护代码、防护分析、复制、盗用,还可以用于小游戏过审、APP加固等方面。混淆加密后的JS代码,可能被他人分析... 查看详情

反调试手法之createprocess反调试(代码片段)

              反调试手法之CreateProcess反调试在学习Win32创建进程的时候.我们发现了有一个进程信息结构体.STARTUPINFO.这个结构体可以实现反调试.具体CreateProcess可以参考上一篇博客.:  https://www.cnblogs.com/iBi... 查看详情

过反调试

...二者本为一体破解技术就不要我多介绍了,下面我来介绍反调试技术也就是所谓的防破解技术反调试技术可以简单通俗的理解为:防止OD分析软件的技术,也就是反调试技术那么反调试技术又有几种呢?下面我介绍几种常用反调... 查看详情

反调试-checkremotedebuggerpresent

和IsDebuggerPresent差不多简单的反调试技术 查看详情

反调试-isdebuggerpresent

目前这个是我知道的最简单的反调试方法了 查看详情

swagger使用的奇淫技巧

...rvice服务,新项目用webapi写的。所以就有了《Swagger使用的奇淫技巧》这篇文章。常规使用的技巧我这里就不在多赘述了,很多老鸟写的已经很详细了。这里我主要介绍下怎么使用VSremark写MarkDown并且使用Swagger显示二、ToDo新建一个... 查看详情

反调试

反调试IsDebuggerPresent()__readgsqword(0x60)得到指向PEB64的指针,pPeb->BeingDebugged.__readfsdword(0x30)CheckRemoteDebuggerPresent(GetCurrentProcess(),&bIsDbgPresent)BOOL HeapFlags(),64位下,得到指向PEB的地址加 查看详情

windows下反(反)调试技术汇总(代码片段)

...常用的几种反调试技术,同时也会介绍一些逃避反调试的技巧。一.探测Windows调试器恶意代码会使用多种技术探测调试器调试它的痕迹,其中包括使用WindowsAPI、手动检测调试器人工痕迹的内存结构,查询调试器遗留在系统中的痕... 查看详情

elf反调试初探

ELF反调试初探http://www.freebuf.com/sectool/83509.html ELF(ExecutableandLinkableFormat)是Unix及类Unix系统下可执行文件、共享库等二进制文件标准格式。为了提高动态分析的难度,我们往往需要对ELF文件增加反调试措施。本文便对相关技术进... 查看详情

.NET:如何隔离反调试类库?

】.NET:如何隔离反调试类库?【英文标题】:.NET:Howtoisolateananti-debuggingclasslibrary?【发布时间】:2022-01-2212:28:51【问题描述】:我构建了一个.NET类库并使用混淆器通过反调试对其进行混淆。我使用我的混淆类库构建了一个测试项... 查看详情

js奇淫技巧:数值的七种写法

JS奇淫技巧:数值的七种写法JS奇淫技巧:挑战前端黑科技,数值的七种写法,能全看懂的一定是高手你知道吗?在JS编程中,数值可以有很多种写法。第一种写法:一般情况而言,数值就是数值。比如:vara=1;你可知,这个1可以... 查看详情