是否可以完全反转此代码?

逆向工程 混淆 去混淆 javascript
2021-07-08 11:15:41

我有这个代码我正在尝试去混淆 https://pastebin.com/g5mHpWE4

我使用了 https://beautifier.io/http://www.jsnice.org/

但结果还是不好,当前代码:https : //pastebin.com/whfqanxx

很多仍然编码示例: window [$ (" 0x128 ")] [$ (" 0x11 ")] [$ (" 0x7 ")]

是否可以使此代码 100% 干净?

1个回答

有了这样的代码,首先要做的就是分析哪一部分是混淆算法,什么是实际代码。这并不难,因为所有代码都在上面。那么我们来一步步分析:

var norm = ["cookie", "toUTCString",...

定义一个包含将在应用程序中使用的字符串的数组。将它们放在数组中而不是代码中会使代码更难被人类理解,但机器仍将设法正确解析代码。

所以我们有一个数组...

下一步是什么?在数组之后有这个函数

(function(value, count) {
 var fn = function(selected_image) {
   for (; --selected_image;) {
     value["push"](value["shift"]());
   }
 };
 fn(++count);
})(norm, 144);

它的作用是创建一个可以对数组进行混洗的函数,并在最后一行中(norm, 144)使用我们前面提到的字符串数组来执行它,并且它的常量值144将用于计算混洗的轮数 ( +1-> fn(++count))。

所以在这之后我们不再知道字符串在我们定义的数组中的顺序norm为了知道它,我们必须执行这两条指令(如果您不明白自己在做什么,这可能很危险)或用另一种语言模仿类似的行为并获得结果。( ["object", "exports", "./IPv6",...]).

所以现在是混淆的第三部分 - 这个函数:

var $ = function(i, fn) {
  i = i - 0;
  var id = norm[i];
  return id;
};

它只是定义了一个名为的函数$,当传递一个参数i时,它会从我们的 shuffled array 中返回字符串norm

现在是实际的代码部分。每当您看到这样的代码时,$("0x1b1")您都必须通过运行(或模拟)$带有参数的函数调用来替换它并获得结果。在这种情况下,它将用于0x1b1 = "hxxps://www.bitonclick.com/jump/next.php?r=1967903"(没有 xx - 正确的地址),例如用于$("0x114") = "FuckAdBlock". 等等...

对所有调用执行此操作,您将提取所有代码,但手动执行此操作可能很普通且容易出错,因此拥有某种自动执行此活动的方式会很好。

这样做(甚至不是整个文件)可以更容易地理解代码,但从它的一部分来看,它看起来可能会在页面上注入一些广告(这可能不是它的唯一目的) - 作为一个可以在字符串“Ad”、“FuckAdBlock”和一些iframes.