如何使用PHP混淆JavaScript?

3
例如,我该如何对以下示例代码进行混淆:
/*
The code below will write
to a heading and to a paragraph,
and will represent the start of
my homepage:
*/
document.getElementById("myH1").innerHTML="Welcome to my Homepage";
document.getElementById("myP").innerHTML="This is my first paragraph.";

转换为表单:

var _0xcc34=["\x69\x6E\x6E\x65\x72\x48\x54\x4D\x4C","\x6D\x79\x48\x31","\x67\x65\x74\x45\x6C\x65\x6D\x65\x6E\x74\x42\x79\x49\x64","\x57\x65\x6C\x63\x6F\x6D\x65\x20\x74\x6F\x20\x6D\x79\x20\x48\x6F\x6D\x65\x70\x61\x67\x65","\x6D\x79\x50","\x54\x68\x69\x73\x20\x69\x73\x20\x6D\x79\x20\x66\x69\x72\x73\x74\x20\x70\x61\x72\x61\x67\x72\x61\x70\x68\x2E"];document[_0xcc34[2]](_0xcc34[1])[_0xcc34[0]]=_0xcc34[3];document[_0xcc34[2]](_0xcc34[4])[_0xcc34[0]]=_0xcc34[5];

使用PHP?

我知道可以使用http://javascriptobfuscator.com/实现此功能,但是我需要在我的PHP文件中完成,因为它会动态更改。


11
混淆是没有意义的。 - user557846
3
现今,通过正确的工具,他们可以反编译C/C++二进制文件,而我们正在尝试使用PHP混淆JavaScript。唯一能够真正永久性混淆某物的方法是将其锁在自己的盒子里,不让任何人使用。如果它是公共的,那么它已经是公开的了,只是时间问题。 - Jack_of_All_Trades
3
混淆是无意义的,因为它会给人一种虚假的安全感。你可能不能立即看出脚本的内容,但只要有一定的JavaScript知识,就可以轻松地重新创建未经混淆的代码。最终,它只会让作为开发人员的你的生活更加糟糕:想象一下调试这样的混淆代码(“错误发生在哪个行号上?”),或多个使用相同混淆器的脚本(可能会导致混淆变量名冲突)。与其为了(虚假的)安全而进行混淆,不如尝试通过进行代码缩减和压缩来提高加载速度! - Mattias Buelens
4
想要知道如何做这件事并没有什么本质上的错误。发帖者将亲自发现它在实际情况中是否有价值。为什么不直接回答问题呢? - cssyphus
2
因为“安全通过混淆”是一种可怕的做法,大多数回答者不会浪费时间在这上面。 - Fabrício Matté
显示剩余4条评论
1个回答

1

好的。如何混淆的理论。

  • 你需要了解编程语言,因为你需要一个解析器以获得良好的结果。
  • 当你知道每个元素时,你可以开始替换它们。

例如,将所有实例的 document.getElementById('string'); 替换为 ab(cd('fgevat');

function cd(s) { /* ROT13 implemented here*/ } function ab(s) { return document.getElementById(s); } ab(cd('fgevat');
  • 你可以使用eval来避免对明文进行解包。然后你就可以像这样进行操作

如此这般

function h(s) { /*implement hexdecode in an ugly way, and run eval() on the resulting string */} h('2020202066756e6374696f6e206364287329207b202f2a20524f54313320696d706c656d656e74656420686572652a2f207d2066756e6374696f6e206162287329207b2072657475726e20646f63756d656e742e676574456c656d656e74427949642873293b207d206162286364282766676576617427293b'); // which is the above code.

这是全部r=1的东西。如果更深入地了解语言,可以做得更好,而且这些都非常容易被逆转。

总体上我完全同意你的答案。然而,1)要处理PHP,你需要一个真正知道如何处理PHP的解析器;字符串操作和正则表达式是不够的;作为实际问题,OP将无法“使用PHP做到这一点”。而且,真正的解析器很难找到/构建(我知道,我曾构建过一个,请参阅我的个人简介)。2)应用适当的转换可能非常难以撤消,特别是如果它们重叠(控制流平面化,在指针嵌套中编码数据,...)。3)我目前不认识任何人会使用PHP进行这样的操作。 - Ira Baxter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接