使一行代码难以阅读

时间:2010-08-05 10:35:47

标签: java obfuscation

我正在编写一种检查客户序列号是否与我的硬编码号匹配的方法。有没有办法让这个难以阅读,以防不受欢迎的人得到他们的代码?

我在java工作。

例如(伪代码)

if(x!= y)跳出代码并返回错误

干杯,道歉,如果这有点奇怪

7 个答案:

答案 0 :(得分:19)

通过默默无闻的安全始终是一个坏主意。你不需要避免它,但你不应该完全相信它。

使用您在启动服务时键入的密钥加密序列号,或者只将序列号指定为十六进制或base64,而不是ASCII。

答案 1 :(得分:7)

执行此操作的常规方法是使用哈希。

  1. 创建序列代码的哈希值。
  2. 要验证客户端序列,请使用相同的函数进行哈希。
  3. 如果哈希匹配,则序列是正确的,即使序列本身不在代码中。
  4. 根据定义,从哈希来看,几乎不可能推导出原始代码。

答案 2 :(得分:6)

使代码看起来很复杂以避免被黑客攻击永远不会有帮助!

答案 3 :(得分:1)

您可以尝试SHA1或其他一些单向加密(MD5不太安全,但它非常好)。不要这样做:

if (userPassword equals myHardCodedpassword)

这样做:

if (ENCRYPTED(userPassword) equals myhardcodedEncryptedpassword)

因此,代码阅读器只能看到加密(非常非常难以解密)的值。

答案 4 :(得分:0)

纠缠已发布代码的控件结构?

例如,在代码中的随机点处输入不同变量下的数字,并在某个随机点使它们等于x和y?

http://en.wikipedia.org/wiki/Spaghetti_code

答案 5 :(得分:0)

有一个wikipedia article on code obfuscation。也许那里的技巧可以帮助你=)

答案 6 :(得分:0)

您可以实现其他方法,而不是尝试使代码变得复杂,而不会暴露您的硬编码序列号。

尝试将硬编码的数字存储在某个永久位置作为加密字节数组。这样就不可读了。为了比较,用相同的算法加密客户端串行代码并进行比较。