T25 控制台检测

网页打开后,F12或者控制台打开,会立即跳转到另一个网站,不让你打开控制台。

老规矩打开一个新网页,打上script断点,访问该网站,能看到断住了

image-20260524112936285

从文件名称能看到此文件就是用来控制台检测,并且是jsvmp。我们首先本地替换一下,Override,记住不要格式化,后续的步骤基于本地替换

image-20260524163450194

一:文件分析

可以直接将这个丢给AI分析,能知道关键位置如下:

VM解释器循环

1
function Dg(nv,KN,Wn,na,zv)

字符串解密器

1
2
3
eK=function(Kv,WC){
var gW=Kv^WC,
Zz=av[gW]

二:手动提取关键信息

1、字符串恢复

找到return Cr[gm] = eN(nB)字符串解密器,打上logpoint断点

1
2
3
4
5
6
console.log(
"[STRING]",
Kv,
WC,
eN(nB)
)

image-20260524164036047

放开断点,能看到console还原出实际的字符串

image-20260524164200319

能看到他的检测函数就是如上这些,checkDebugger、forceRedirect等等这些。

在此处加上如下断点

image-20260524165734325

找到了真正逻辑函数名,下一步就是定位检测逻辑,如上代码能够打印出他的堆栈,实际都是混淆的也没多大效果

2、找实际函数定义的位置
1
debug(Object.defineProperty)

image-20260524174453035

放开后可以看到断在了ar函数

image-20260524174529948

image-20260524180830314

能看到ar是原生的Object.defineProperty。一直在这里单步,也能找到trigger、checkDebugger这些函数,我们直接使用条件断点hook,控制台执行

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
const rawDP = Object.defineProperty;
Object.defineProperty = function(obj,key,desc){
if(typeof key === "string"){
if(
key.includes("trigger") ||
key.includes("debug") ||
key.includes("redirect")
){
console.log("DEFINE:", key);
console.log(obj);
debugger;
}
}

return rawDP.apply(this,arguments);
};

image-20260524181320654

可以看到所有的检查点函数都断住了,而查看当前的函数,发现检测点都是执行的mm函数

image-20260524181454429

我们此时重写这些检测点函数,我是全部重写了

1
2
temp1 = obj
temp1.trigger = ()=>{}

image-20260524183515082

image-20260524184502986

执行后能看到出结果了

image-20260524184547217

暂且这样吧, 不知道和出题者的原意是否一致。算做出来了吧

image-20260521000133876

更多内容也在公众号更新:码字的秃猴

tuhou