如果不进行混淆,我如何向用户证明我的混淆代码不是恶意的?

信息安全 javascript 相信 混淆
2021-08-31 23:53:23

我创建了自己的反广告拦截系统,它的功能类似于BlockAdblock 之类的服务,除了我的以不同的方式进行 Adblocker 检测(到目前为止还不能像 BlockAdblock 那样绕过)。

如果您访问我的 Anti-Adblocker 页面并生成一些示例 anti-adblock 代码,您会注意到它都被混淆了(BlockAdblock 也这样做),我这样做是为了使过滤器和绕过方法更难为其开发。代码不能被混淆或篡改/编辑(这样做会导致它无法工作)。

这种混淆的反广告拦截代码的每一代都是独一无二的,但它们都执行相同的操作。

我可以看到我的工具的一些潜在用户可能不信任它,因为他们无法确定它是如何工作的——我是否能够在不透露实际未混淆源的情况下向我的用户证明生成的代码不是恶意的?(因为如果我要透露未混淆的源代码,它将首先破坏混淆的全部目的)

4个回答

如果不进行混淆,我如何向用户证明我的混淆代码不是恶意的?

可能,你不能。

也许,如果受信任的人愿意审核您的代码(受 NDA 等约束)并使用他们的 PGP 密钥签署静态版本,那么可能会有更多的人愿意安装您的脚本,并确信它已经过知情人的审查他们在说什么……

在这个世界上,一切都基于信任声誉所以我的建议是,如果你想从事编程事业,从现在开始建立这种信任并建立你的声誉。也考虑做一些开源代码,并在 GitHub 等平台上以自由许可证发布。而且我认为你实际上已经在 GitHub 上有了一些 repos,所以不要犹豫链接到你以前的工作。

如果人们可以看到您的历史并评估您的编码实践的质量(虽然当您想到它时会感到恐惧,这些是游戏规则......),他们可能更愿意信任您的代码。

也许有一天你会在一家软件公司工作,或者创建一家软件公司,然后你会出售像 MS-Windows 这样的封闭源代码、编译代码。如果您的声誉足够好,如果您的产品足够好、稳定且价格合适,您的客户就会像购买他们需要的其他软件产品一样接受它,即使他们永远不会看到源代码。

只是好奇,但是您是否尝试过像这样的在线 JavaScript 反混淆器?在使用这些工具之后,您的代码是否足够模糊?

您所实现的仍然是默默无闻的安全性,并且 JavaScript 代码也可以使用调试器进行跟踪。因此,有时间和足够经验的人可以弄清楚它是如何工作的。毕竟,这是客户端代码,甚至没有编译。

这不可能是地球上最困难的逆向工程工作分配。

在这一点上我不会太担心,我担心的是你的发明是时间敏感的,甚至可能被未来版本的 Firefox 或 Chrome 等淘汰。击败广告拦截器是一场永无止境的比赛,你在这个领域所做的一切都有有限的保质期。

如果用户无法阅读代码,则无法证明代码不是恶意的。您可能希望的最好结果是信任网络,其中第三方证明它不是恶意的,但这并不能解决信任问题——它只会产生一个额外的问题。

从最终用户的角度来看,您所询问的代码已经是恶意的,因为它试图绕过我的安全安排。我不需要看代码就知道这一点,而且我已经避免了告诉我关闭它的网站,因为它们已经表现出缺乏赢得我的习惯的愿望。

我是否能够向我的用户证明生成的代码不是恶意的......

可能不是。证明某些特定的黑盒(您的代码)具有特定的行为,并且只有这种行为是不可能的,除非首先完全描述预期的行为——这基本上意味着提供某种形式的代码。

例如,仅仅提供一些样本输入并让用户生成样本输出是不够的,因为某些特定的“魔法”输入仍然会触发后门或类似的东西。

把它放在一个权限有限的盒子里。证明,即使盒子里的代码是恶意的,它也不会造成伤害。