有没有办法隐藏或加密JavaScript代码,以防止人们查看,复制和/或修改专有程序?
我想知道是否有人在他自己的商业产品上使用商业/免费java混淆器.我只知道一个项目实际上在发布的ant构建步骤中有一个混淆步骤.
你混淆了吗?如果是这样,你为什么要混淆?
它真的是一种保护代码的方式,还是对开发人员/经理来说更好的感觉?
编辑:好的,我确切地说我的观点:你是否混淆保护你的IP(你的算法,你投入产品的工作)?出于安全原因,我不会混淆,这感觉不对.所以我只是谈论保护你的应用程序代码免受竞争对手的影响.
@staffan有一个好点:
远离链接代码流的原因是其中一些更改使JVM无法有效地优化代码.实际上,它实际上会降低应用程序的性能.
是否可以隐藏/编码/加密php文件/源代码,让其他人安装系统并在其计算机上运行?
在网页上放置电子邮件地址时,请将它们放置为如下文本:
joe.somebody@company.com
Run Code Online (Sandbox Code Playgroud)
或使用一个聪明的伎俩试图欺骗电子邮件地址收割机机器人?例如:
HTML转义字符:
joe.somebody@company.com
Run Code Online (Sandbox Code Playgroud)
Javascript Decrypter:
function XOR_Crypt(EmailAddress)
{
Result = new String();
for (var i = 0; i < EmailAddress.length; i++)
{
Result += String.fromCharCode(EmailAddress.charCodeAt(i) ^ 128);
}
document.write(Result);
}
XOR_Crypt("êïå®óïíåâïäùÀãïíðáîù®ãïí");
Run Code Online (Sandbox Code Playgroud)
人体解码:
joe.somebodyNOSPAM@company.com
joe.somebody AT company.com
Run Code Online (Sandbox Code Playgroud)
你用什么或者你甚至打扰?
我想弄清楚我是否可以构建一个隐藏其所有内部对象和函数等的静态库,除了我要导出的接口.我正在尝试使用Xcode(gcc 4.2).
我__attribute__((visibility("hidden")))根据这个文档在一些C++类上使用了该属性.我还将小辅助C函数定义为文件本地(静态)等.
但是,当我运行strings生成的.a库文件时,即使在Release配置中编译,我仍然会看到表面上隐藏的类的名称,以及它们的方法名称,甚至是那里散布的文件本地函数的名称同样.
我已经添加了-fvisibility=hidden甚至-fno-rtti是gcc标志.虽然这减少了一些字符串,但类名,方法名和静态函数名仍然以简单或错误但可读的形式存在.
是否有一种可靠的方法让编译器构建这些东西而不必将所有内部内容的字符串名称发送到二进制文件中?没有必要为任何外部客户端链接.
(澄清一下:我问的是内部命名的混淆,以及文字导出绑定的需要.我很遗憾所有内部工作都可以通过strings命令看到,无论这些符号是否正式导出.)
谢谢.
我有一段时间想知道一些软件如何隐藏秘密密钥,以至于无法轻易发现它们.举几个例子:
显然,这些程序不仅仅是在字节[]中使用密钥,因为这样可以轻松窃取密钥并生成自己的序列号等.
使用了哪些策略来隐藏这些键,以便无法轻易找到它们?
我希望访问者能够直接在我的网页上点击(或复制)电子邮件地址.但是,如果我能够(有点)让机器人和其他爬虫更难获得所述电子邮件地址并将其注册到垃圾邮件列表中,那就太棒了.
我发现了不同的方法(即编码mailto HTML链接),使用JavaScript或纯HTML,但你们推荐什么?JavaScript技术似乎更复杂,但这可能会影响关闭它的用户,以及像Google这样的合法抓取工具.
另一方面,HTML一个看起来有点基础,机器人编写者应该现在已经弄明白了...
我是否应该费心去做这件事,还是垃圾邮件发送者会收到我的电子邮件?我知道反垃圾邮件过滤器越来越好,但如果我能做更多的事情来减缓垃圾邮件发送者的速度,我会的.
proguard会工作来模糊静态字符串常量吗?
在阅读dzone上发布的这篇文章时,我发现了一段最初由Marcus Lagergren在Twitter上发布的JavaScript片段.
以下代码显然打印字符串 "fail"
(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]];
Run Code Online (Sandbox Code Playgroud)
这涉及隐式类型转换,我试图理解这条线的解释方式.
我已经隔离了每个角色
(![]+[])[+[]] 版画 "f"(![]+[])[+!+[]] 版画 "a"([![]]+[][[]])[+!+[]+[+[]]] 版画 "i"(![]+[])[!+[]+!+[]] 版画 "l"我还设法打破了每个字母除外的表达式 "i"
"f"![]空数组是一个对象,它根据ECMAScript的文档,点9.2的计算结果为true当转换为一个boolean,所以这是false
false+[]根据Point 11.6.1,二元+运算符的两个参数都转换为String,因此我们得到"false"+"",它进行求值"false"
+[]如果参数是a,则一元加号运算符会导致ToNumber转换,然后ToPrimitive转换Object.通过调用[[DefaultValue]]对象的内部方法来确定这种转换的结果.如果是空数组,则默认为0.(ECMAScript的文档,章节:11.4.6,9.3,9.1)
"false"[0]我们正在访问索引处的字符0,因此"f"
"a"同样的故事,这里唯一的区别是方括号中的部分中的额外转换(其计算为指向字符串中另一个字符的数字"false"),由使用一元+和!运算符触发.
+[]0 …
我正在寻找一个免费的开源工具集,它将编译各种"经典"脚本语言,例如Korn Shell,ksh,csh,bash等作为可执行文件 - 如果脚本调用其他程序或可执行文件,对于它们包含在单个可执行文件中.
原因:
混淆代码交付给客户,以便不泄露我们的知识产权 - 交付到客户自己的机器/系统上,我无法控制我可以设置的访问权限,因此程序文件必须是二进制的通过在文本编辑器或hexdump查看器中查看,无法轻易看到工作.
为客户制作单个,简单部署的程序,而不需要/或少量任何外部依赖项.
我更喜欢简单的东西而不需要包管理器,因为:
我不能依靠客户的知识来执行(联合国)包装说明和
我不能依赖管理其机器的策略来安装软件包(实际上是来自第三方).
最简单的首选方法是能够将正常运行的单个可执行文件编译为正确的机器代码,而不会产生任何依赖性.
obfuscation ×10
encryption ×3
java ×2
javascript ×2
android ×1
binary ×1
compilation ×1
ecmascript-5 ×1
email ×1
encoding ×1
executable ×1
gcc ×1
html ×1
mailto ×1
php ×1
proguard ×1
scripting ×1
spam ×1
symbols ×1
types ×1
xcode ×1