解密后源代码如下(没优化,因为是给我自己看的)
function (C) {
var h = {};
try {
var g = {"type": C};
window._user_report("odt-1", g);
var j = window.performance.now();
function E() {
var q = {};
{
var I0 = window.performance.now();
if (I0 - j >= 10000) {
window.location.replace("about:blank"), window.top !== window.self && window.top.location.replace("about:blank");
} else window.requestAnimationFrame(E);
}
}
window.requestAnimationFrame(E);
} catch (q) {
}
}
功能点分析
这段 JavaScript 代码的作用看起来是检测并防止调试或恶意分析,具体逻辑如下:
function (C) {
var h = {};
try {
var g = {"type": C};
window._user_report("odt-1", g);
var j = window.performance.now();
.....
-
C 作为参数:这个函数接受一个参数 C(可能是事件类型或标识符)。
-
window._user_report("odt-1", g); :这里可能是上报某种行为(比如检测到调试、异常情况等)。
-
var j = window.performance.now(); :记录当前时间戳。
function E() {
var q = {};
{
var I0 = window.performance.now();
if (I0 - j >= 10000) {
window.location.replace("about:blank"),
window.top !== window.self && window.top.location.replace("about:blank");
} else window.requestAnimationFrame(E);
}
}
- 创建 E() 递归函数:
• 每帧执行 E() :window.requestAnimationFrame(E); 会在浏览器刷新时执行(大约每 16.6ms 一次)。
• 计算时间差 I0 - j:如果当前时间与 j 记录的时间超过 10 秒(10000 毫秒) :
• 强制跳转到 about:blank:这会让页面变成空白页面。
• 如果页面在 iframe 中(被嵌套打开) ,则顶层窗口 top 也被重定向到 about:blank。
window.requestAnimationFrame(E);
- 启动 E() 监听:
• 这个 requestAnimationFrame(E) 让 E() 以每帧运行的方式持续检测运行时间,确保 10 秒后触发 window.location.replace("about:blank")。
代码的功能目的猜测
- 反调试/反分析:
• requestAnimationFrame(E) 运行的方式可以检测 JavaScript 是否被人工暂停或卡住。
• 如果用户使用 开发者工具(DevTools)手动暂停 JavaScript,10 秒后会触发强制跳转,从而让页面崩溃。
- 防止恶意操作(比如广告篡改、反爬) :
• 如果代码运行在被嵌套的 iframe 里(window.top !== window.self),它会让整个 top 页面跳转到 about:blank,防止某些网站被嵌套用于广告劫持或内容盗取。
结语
1.该代码是我经过解密后得来,发现该代码特别适用于保护自己的代码,在加密的时候一起加进去,将会得到非常好的反调试效果。
2.关于requestAnimationFrame的用法下一章给大家讲一下。
3.附言说一嘴,如果说jsjiami加密后,遗忘了自己的源代码,可以找博主人工付费解决还原。但是必须是自己的哦,不要做违fa违规的事。