吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4014|回复: 7
收起左侧

[Web逆向] 表哥,你也不想你扣的代码被格式化检测吧第二谈--正则匹配,格式化危机

  [复制链接]
nangongxt07 发表于 2025-5-31 20:55

我们先来看看一段代码

function Test(){return"Test";}
var isFormat = function () {
  var reg = new RegExp("\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}");
  return reg["test"](Test.toString());
};
console.log(isFormat());

这段代码的执行结果是true,这里需要注意,Test函数是没有进行格式化的,简单的说说这个代码的意思吧.
首先申明一个名为Test的函数,用于做格式化检测用
然后申明一个用于判断代码是否格式化的函数,判断的依据是根据正则匹配,这里的"\w+ \(\) {\w+ ['|\"].+['|\"];? }"是匹配的规则,Test.toString()是将这个函数转换成字符串的形式作为匹配的对象,test方法是进行匹配.
最后将判断的结果打印,如果没有格式化的话,就返回true,否则返回false
可能大家对这个正则表达式有点陌生,其实他就是匹配function xxx(){.......}这种形式,如果不是这种形式的话,就返回false
这里我们通过一个正则网站来形象化的理解这个表达式的含义
正则工具https://regexr-cn.com/
打开网站把表达式输入上去,要注意转义的问题
\w+ () {\w+ ['|\"].+['|\"];? }
分别把格式化和不格式化的代码放上去,结果是完全不一样的
没有格式化的代码在文本那一栏的右上角会有提示(1个结果),反之则是0结果
接下来我们讲讲如何绕过这种检测,通过hook 正则的方式绕过检测
hook代码如下

(function(){
  const originalTest = RegExp.prototype.test;
  RegExp.prototype.test = function(str) {
    if (this.source === "\\w+ *\\(\\) *{\\w+ *['|\"].+['|\"];? *}") {
      return true; // 强制绕过检测
    }
    return originalTest.call(this, str);
  };
})()

简单的提一嘴hook代码,首先保留原始的test方法,对test方法进行重写,判断表达式(this.source)是否为格式化检测的正则,如果是强制返回true,如果不是调用原方法返回

免费评分

参与人数 4吾爱币 +9 热心值 +3 收起 理由
Issacclark1 + 1 谢谢@Thanks!
涛之雨 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
lgc81034 + 1 谢谢@Thanks!
zx2000 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

万一行了呢 发表于 2025-6-1 11:11
思路来清晰,风格日系。。。。。。。。
msmvc 发表于 2025-6-3 16:23
Emoei_PG 发表于 2025-6-4 08:50
灵魂守卫 发表于 2025-6-4 14:37
等楼下的入坑
doubleA 发表于 2025-6-5 15:33
确实有意思
alongzhenggang 发表于 2025-6-6 11:43
表格 我干了 你随意
K23 发表于 2025-8-14 16:01
呃。。。会不会有点麻烦,直接加取反不行吗
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - 52pojie.cn ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2026-6-5 11:58

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表