这个JavaScript的正则表达式到底匹配的是啥?
今天在分析一个JS逆向的代码,然后发现一个正则表达式,搞不懂到底什么内容他才会返回为true。var _0x15716b = function(_0xdcbe5d) {
this['pPrrGO'] = _0xdcbe5d;
this['KYlUFq'] = ;
this['CEBcWS'] = function() {
return 'newState';
}
;
this['ASITpj'] = '\x5cw+\x20*\x5c(\x5c)\x20*{\x5cw+\x20*';
this['vGwItR'] = '[\x27|\x22].+[\x27|\x22];?\x20*}';
};
_0x15716b['prototype']['NcpnCP'] = function() {
var _0x498902 = new RegExp(this['ASITpj'] + this['vGwItR']); //这边是正则表达式
var _0x126f20 = _0x498902['test'](this['CEBcWS']['toString']()) ? --this['KYlUFq'] : --this['KYlUFq'];
return this['hJzkMe'](_0x126f20);
};
以上是部分代码,然后我把这个正则表达式抠出来,是以下这样:
var reg = new RegExp("\w+ *\(\) *{\w+ *['|"].+['|"];? *}");
var testString = "function () {abc [\"aaa\"].[\"bbb\"]; }";//这是我自己举的例子
Reg.test(testString);// 结果是false
我就搞不明白,这个正则表达式不是匹配普通函数吗?为啥返回的结果是false?我自己举的例子不对吗? test是匹配字符串是否有符合正则表达式的返回true或者false,match和search才是匹配结果 这是混淆后的代码吧{:1_924:} 本帖最后由 as614001 于 2022-11-22 13:42 编辑
你这正则也不对啊
{}里面应该是数字啊 {0,5},{5}此类
要么还要有转移符号 看起来像是匹配generator语法的a *() {} 自己瞅瞅 类似的 是判断被压缩过得吧 也就这样才会出现只匹配一个字符的方法名称才会匹配的情况 let reg = new RegExp(`\\w+ *\\(\\) *{\\w+ *['|"].+['|"];? *}`)
let testString = "function () {abc \"aaa\".\"bbb\"; }";
let result = reg.test(testString);//
console.log(reg)
console.log(result)
这样可以, 因为 [ ] 是正则的语法, 要匹配的话,需要转义, 所以你的不对 /\w+ *\(\) *{\w+ *['|"].+['|"];? *}/.test(`test() {return "'..xx.x.x.x.x'"}`);
返回是true
暂时没想明白 会在什么情况下 需要这种东西 判断箭头函数是否包含方法体的东西么 有法子debugger没 {:1_918:} test方法的返回值就是boolean 这里大概率就是一个格式化检测的正则。
页:
[1]
2