分析一段常见js解密后的代码

3 阅读2分钟

解密后源代码如下(没优化,因为是给我自己看的)

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(); 
     .....
  1. C 作为参数:这个函数接受一个参数 C(可能是事件类型或标识符)。

  2. window._user_report("odt-1", g); :这里可能是上报某种行为(比如检测到调试、异常情况等)。

  3. 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);
    }
}
  1. 创建 E() 递归函数

每帧执行 E() :window.requestAnimationFrame(E); 会在浏览器刷新时执行(大约每 16.6ms 一次)。

计算时间差 I0 - j:如果当前时间与 j 记录的时间超过 10 秒(10000 毫秒)

强制跳转到 about:blank:这会让页面变成空白页面。

如果页面在 iframe 中(被嵌套打开) ,则顶层窗口 top 也被重定向到 about:blank。

window.requestAnimationFrame(E);
  1. 启动 E() 监听

• 这个 requestAnimationFrame(E) 让 E() 以每帧运行的方式持续检测运行时间,确保 10 秒后触发 window.location.replace("about:blank")。

代码的功能目的猜测

  1. 反调试/反分析

• requestAnimationFrame(E) 运行的方式可以检测 JavaScript 是否被人工暂停或卡住

• 如果用户使用 开发者工具(DevTools)手动暂停 JavaScript,10 秒后会触发强制跳转,从而让页面崩溃。

  1. 防止恶意操作(比如广告篡改、反爬)

• 如果代码运行在被嵌套的 iframe 里(window.top !== window.self),它会让整个 top 页面跳转到 about:blank,防止某些网站被嵌套用于广告劫持或内容盗取。

结语

1.该代码是我经过解密后得来,发现该代码特别适用于保护自己的代码,在加密的时候一起加进去,将会得到非常好的反调试效果。

2.关于requestAnimationFrame的用法下一章给大家讲一下。

3.附言说一嘴,如果说jsjiami加密后,遗忘了自己的源代码,可以找博主人工付费解决还原。但是必须是自己的哦,不要做违fa违规的事。