JS反调试绕过&JS代码混淆&JSFUCK编码
如果目标网站的JS代码中有比较机密的东西,会启用反调试,代码混淆这些功能防止泄露机密数据。下面说说几种绕过目标网站JS反调试功能的方法。
-禁用断点
点击下图那个禁用断点的按钮即可
禁止断点过后,大多数情况下可以绕过对方的反调试,但是自己也无法断点分析了
-条件断点
可以输入一个恒成立,或者不成立的条件在这。就不会出现打开开发者工具暂停运行的情况了。比如直接输入false。如果还有暂停的情况,那可能是在目标网站上还存在一个会导致反调试功能,找出它,如上处理即可。
-永不在此处暂停
-置空函数
函数置空:原来的用来反调试的函数,在控制台上面重写一遍,写废掉就没有反调试的能力了,比如下面这个样例
反调试函数=function(){
return NULL;
}
-本地覆盖
本地覆盖:在源代码选项卡里的覆盖选项里,启用本地替代,右键目标网站上的关键代码保存本地备用,我们就可以对关键代码编辑了你可以在这里面删除或者注释掉反调试的代码块。完成之后,当网站再加载此文件时,会以我们本地的那个文件为准也就是我们编辑过的那个js文件为准,则覆盖了原网站的原文件。具体做法如下图:
然后对目标网站的负责反调试功能的JS文件右键 选择 替代内容 就会出现在替代文件夹里了,就可以编辑了
代码混淆
JavaScript代码混淆就是一种将可读性高的JavaScript代码转换成难以理解和分析的形式的过程。它通过一系列的转换和技巧来使代码变得晦涩难懂,从而增加了代码的安全性,使得别人难以轻易地理解和修改你的代码。
混淆的目的通常是为了保护知识产权或者防止恶意使用者逆向工程你的代码。这样做可以使得他们难以窃取你的算法或者在你不授权的情况下使用你的代码。
虽然混淆可以提高代码的安全性,但并不是绝对安全的。有经验的黑客或者逆向工程师可能会花费一些时间来还原混淆后的代码,但混淆过后的代码可以增加他们的工作难度。
开源代码加密:
JSON在线 | JSON解析格式化—SO JSON在线工具
商业用途加密:
JS加密,JS不可逆加密,JS混淆,JS混淆加密,JS压缩加密 - [JavaScript加密] (jsjiami.com)
简单说说一个点:
需要在本地控制台调试,不能在网上平台上调试,很有可能不允许。自己随便起一个本地网页调试即可 用phpstudy啥的(不懂去搜一下怎么用,一键发布一个网页)
以上这种由"!"符号和 "[" "]" 等组成的编码技术叫做JSFUCK编码:
"JSFuck" 是一种基于JavaScript的编码技术,它允许你将JavaScript代码编码成仅使用六种字符:[ ] ( ) ! +
。尽管编码后的JSFuck代码看起来是一堆无序的字符,但它仍然是合法的JavaScript代码,因为它是在JavaScript的语法规则下构建的。这是因为JSFuck利用了JavaScript中的类型转换、数学运算和逻辑运算,将这六个字符组合成各种JavaScript表达式。这也是为什么JSFuck代码通常非常难以阅读,因为它将JavaScript的特性推向了极限,使得它在形式上变得非常混乱,但它仍然是合法的JavaScript代码。
我把原加密后的代码小括号里的东西删除后只剩一个空括号,再去控制台打印,任然可以成功执行;如下图:
我把最后一个空的小括号删除后,直接爆出这段JS源码;如下图:
为什么去除了部分编码后任然可以继续执行呢?:
大概就是说删除的那部分就是些花指令,一些无关紧要的东西
花指令的概念和作用:
"花指令" 这个术语通常是与计算机汇编语言和程序逆向工程相关的术语,它不是一个官方的计算机科学术语,而是黑客和逆向工程师社区中常用的俚语。它通常指的是那些在程序中看起来没有实际作用,或者在正常操作下不会被执行的指令或代码片段。这些指令可能被插入到程序中,以混淆或防止逆向工程。
"花指令" 的作用可以有以下几个:
- 1.混淆代码:将花指令插入到程序中,使得逆向工程师难以理解代码的实际逻辑,因为他们需要分辨哪些指令是无关紧要的。
- 防止自动化工具:某些逆向工程工具和自动化脚本可能会试图分析程序的结构,花指令可以干扰这些工具,使其分析变得更加复杂。
- 增加逆向工程难度:通过引入无用的指令,逆向工程师需要更多的时间和精力来分析程序,从而提高了逆向工程的难度。
- 误导攻击者:花指令可以误导恶意攻击者,使他们花费时间在无关紧要的指令上,而不是攻击程序的实际漏洞或关键逻辑。
一般情况下,加密后的JavaScript代码可能具有以下特征:
- 难以阅读和理解:加密会使代码变得晦涩难懂,通过删除空格、缩进、注释以及重命名变量和函数名,使代码更加难以理解。
- 代码压缩:加密通常伴随着代码压缩,以减小文件大小,从而加快加载时间。这可能导致一些变量名和函数名变得更加晦涩。
- 混淆技巧:混淆技巧包括将常见的代码结构转换为复杂的等效形式,如将条件语句重写成难以理解的形式、使用逻辑运算符等。这增加了代码的复杂性。
- 加密算法:某些代码加密工具可能使用加密算法对源代码进行编码,需要在运行时解码才能执行。这可以提高安全性,但也增加了代码的复杂性。
- 自解码功能:一些加密技术包括自解码功能,这意味着加密的代码包含解码自身的逻辑。这样,解密后的代码可以在运行时还原成可执行的JavaScript。
- 特定标识符:某些加密工具可能在代码中留下特定的标识符,用于识别该代码是经过加密的。
- 举一个加密的例子
-
// 加密前的代码 function displaySecretMessage() { alert("This is a secret message!"); } displaySecretMessage(); // ROT13加密 function obqlfgYrpbeqZrffntr() { nyreg("Guvf vf n frperg zrffntr!"); } obqlfgYrpbeqZrffntr();
这段加密的JavaScript代码的特点是:
- 函数和变量名经过了ROT13加密,变得晦涩难懂,不容易理解。
- 警告消息也经过ROT13加密,以避免直接查看代码就能理解消息内容。
- 当你运行加密后的代码时,它会解密函数名和消息,然后正常执行。
这只是一个简单的演示,实际上,加密代码通常会更复杂,使用更强大的加密算法,以确保代码的安全性。然而,这个示例说明了加密可以用于隐藏JavaScript代码的特性和逻辑,使其更难以理解
感谢观看~