如何在代码中隐藏文字

Mis*_*ith 5 literals hard-coding security-by-obscurity

在代码中隐藏文字值的主要现有方法是什么,因此只使用hexdumper或反编译器就不能轻易跟踪它们?

例如,而不是编码:

    static final int MY_VALUE = 100;
Run Code Online (Sandbox Code Playgroud)

我们可以有:

    static final int MY_VALUE = myFunction1();

    private int myFunction1(){
        int i = 23;
        i += 8 << 4;
        for(int j = 0; j < 3; j++){
            i-= (j<<1);
        }
        return myFunction2(i);
    }

    private int myFunction2(int i){
        return i + 19;
    }
Run Code Online (Sandbox Code Playgroud)

这只是我们要做的事情的一个例子.(是的,我知道,编译器可以优化它并预先计算常量).

免责声明:我知道这根本不会提供任何安全性,但它使代码更加模糊(或有趣)进行逆向工程.这样做的目的只是为了强制攻击者调试程序,并在其上浪费时间.请记住,我们这样做只是为了好玩.

hai*_*img 3

由于您试图隐藏在程序的简单转储中可见的文本,因此您可以使用某种简单的加密来混淆您的程序并隐藏该文本以防止窥探。

详细说明:

  1. 访问ROT47.com并在线编码您的文本。您还可以使用此网站进行更通用的 ROTn 编码。
  2. 将字符串常量的内容替换为编码文本。
  3. 当您需要时,使用代码中的解码器将文本转换回其原始形式。ROT13 维基百科文章包含一些有关实现的注释,这里是StackOverflow 上ROTn 的 Javascript 实现。使其适应您使用的任何语言都很简单。

为什么要使用众所周知的弱加密 ROT47?

最后,您的代码将如下所示:

解密数据 = 解密Str(MY_ENCRYPTED_CONSTANT)
useDecrypted(解密数据)

无论您的密码有多强大,任何配备调试器的人都可以设置断点useDecrypted()并恢复明文。因此,密码的强度并不重要。然而,使用 Rot47 这样的东西有两个明显的优点:

  1. 您可以在线对文本进行编码,无需编写专门的程序来对文本进行编码。
  2. 解密非常容易实现,因此您不会将时间浪费在不会为客户增加任何价值的事情上。
  3. 任何阅读您代码的人(您的同事或 5 年后的您自己)都会立即知道这不是真正的安全性,而是默默无闻的安全性。
  4. 对于任何只是窥探你编译的程序的人来说,你的文本仍然会显示为乱码,所以任务完成了。