对 javascript 文件进行反混淆

逆向工程 去混淆 javascript
2021-06-24 19:59:44

我有一个混淆的 JS 文件,我想对其进行反混淆(而不是美化它)。我在这里看到了类似问题的答案,我尝试使用 JSUnpack 和 JSDetox 的在线版本对文件进行去混淆处理。但是,我仍然无法对其进行反混淆。JS 文件不是恶意软件,但它用于将广告注入网页。因此,任何分析文件的分析器都不会发现任何恶意内容。问题在于 JS 将(十六进制)字符串存储在字符串数组中并使用它来连接代码。JSDetox 至少对文件开头的字符串数组进行解码。然而,可读性并没有提高,因为整个代码都使用了字符串数组。如果有人想查看该文件,可以在此处找到

任何形式的帮助将不胜感激!谢谢。

编辑:我现在也尝试过 Malzilla,因为我在这里找到了类似的技术但是,脚本可能存在一些 Chrome 可以容忍的错误。但是,当我在 Malzilla 中单击“运行脚本”时,我收到一条消息说“脚本无法编译”。我尝试使用“调试脚本”按钮调试脚本,窗口突出显示了“未定义 InterYeildOptions”的某行,但我不知道该怎么做。:-/

2个回答

那么,您可以使用带有 unescape 可打印字符的http://jsbeautifier.org/来解码顶部 var,然后,如果仔细观察,您应该看到 var 的值随索引一起使用,所以您只需编写一个快速脚本即可将其替换为实际值。最终结果在这里

Python替换var:

#Replace.py //probably not optimized, so dont be too harsh on me
_0x4b6a=[copy-pasteValueDecodedFromScript]
with open('EncodedScript.js') as fp:
    for line in fp:
        for i in range(0,608):
            line = line.replace("_0x4b6a["+str(i)+"]", _0x4b6a[i])      
        print line

我会这样做:

据我所知,带有字符串的主数组是静态的。它没有改变。这意味着您可以在从十六进制形式解码所有内容后,用其内容(在“”中)替换该数组成员的所有外观。

我会用 python 脚本来做,你可以用你选择的工具来做。

这是 python 脚本(js.js 是您脚本的副本):

    initial_array = [... here should be the copy of initial array _0x4b6a ...]
    def stringify(s):
        return "\""+s.replace("\"", "\\\"")+"\""

    f = open("js.js", "r")
    data = f.read()

    for idx in range(len(initial_array)):
        member = "_0x4b6a[%d]" % idx
        data = data.replace(member, stringify(initial_array[idx]))

    print data

结果放在这里:这里

请注意,结果在语法上不正确。为了使它更好,您应该在脚本中使用 stringify 函数