gpt4 book ai didi

javascript - 如何击败混淆的 javascript 代码的反混淆?

转载 作者:行者123 更新时间:2023-11-29 14:42:07 24 4
gpt4 key购买 nike

这是一个普遍的问题

我在一些网站上看到 javascript 被混淆了

当您尝试使用标准反混淆器(deobfuscatejavascript.com、jsnice.org 和 jsbeautifier.org)对代码进行反混淆时, 代码不易反混淆

我知道避免去混淆几乎是不可能的。我想让攻击者很难对其进行反混淆

请提出一些我可以实现的方法

我是否应该编写自己的混淆器,然后使用另一个在线混淆器对输出进行混淆。这会打败它吗?

提前致谢

P.S:我尝试了 google 闭包编译器、​​uglifyjs、js-obfuscator 和许多其他工具。它们(单独使用或组合使用)都无法击败反混淆器

最佳答案

混淆可以在多个复杂级别上完成。

大多数可用的混淆器会打乱(缩小?)标识符并删除空格。漂亮地打印代码可以恢复漂亮的缩进;汗水和大量的猜测可以通过足够的努力恢复合理的标识符名称。所以人们说这是弱混淆。他们是对的;有时就足够了。[加密不是混淆;它被简单地颠倒了]。

但是可以用更复杂的方式混淆代码。特别是,可以利用 Turing Tarpit 以及关于混淆程序的推理在实践中可能很难/不可能这一事实。可以通过扰乱控制流并注入(inject)不透明控制流控制谓词来做到这一点,这些谓词很难进行图灵推理;您可以通过多种方式构建此类谓词。例如,包括基于构建人工指针别名(或等效的数组下标)问题的测试,其形式为“*p==*q”,因为 p 和 q 是从杂乱复杂的图形数据结构计算的指针。

此类混淆程序更难逆向工程,因为它们建立在图灵难以解决的问题之上。

这是一个 example paper that talks about scrambling control flow .这是 a survey on control flow scrambling, including opaque predicates .

OP 想要的是一个在这个更复杂的级别上运行的混淆器。这些可用于 Java 和 C#,我相信,因为一旦您拥有程序的字节代码表示而不仅仅是其文本,构建程序分析器以确定(和利用)控制流就相对容易了。它们不适用于其他语言。可能只是时间问题。

(完全披露:我的公司构建了一种更简单的混淆器。我们偶尔会考虑更高级的混淆器,但经常会被 Shiny 的物体分散注意力)。

关于javascript - 如何击败混淆的 javascript 代码的反混淆?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37216841/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com