针对字节码的java常量反向工程

我想知道我是否可以对已编译的java文件中的字符串进行加密。 例如,我需要用解码对称密钥一个zip文件,我需要在一个Java类,钥匙存放在私人常数:针对字节码的java常量反向工程

private static final String ZIP_PASSW="secret" 

但我不希望这样一个简单的倒车字节码显示原始密码...你认为存在一些东西来避免它?

谢谢

PS:我不明白为什么S.O.说我的问题不符合其标准没有这个PS

回答:

当你说你需要用一个对称密钥解码一个zip文件,那是肯定是你需要做什么?不要考虑如何将密码存储为明文或如何对密码进行编码等细节,您可能需要查看整体架构。例如,也许你的代码可以调用一个安全的web服务来获得密钥而不是存储它?显然,如果没有一个更好的照片来说明你的目标是什么,很难提出一个可行的选择,但是你所描述的将很难保持适当的安全 - 它会被默默无闻地保护下来,但它不会很强对决定找到你的钥匙的人。

如果这对于您所需要做的不够安全,那么最标准的响应可能会集成某种PGP密钥交换,而不是使用对称加密。

回答:

如何存储已加密的密码?

回答:

不,如果你存储了一个加密的密码,你仍然需要在某个时候解密它,而一个破解者可以反汇编你的代码并找出算法,并从中获得密码。

回答:

你能做的最好的事情就是让它更难访问。任何加密的字符串都可以使用代码中存储的密码进行解密。您可以采取措施隐藏密码,但使用私有常量不是这种措施之一。

回答:

真正的黑客仍然可以解密密码,但如果不将密码存储为字符串文字,则可能会使其更难一点。你可以使用:

private static final String KEY = new String(new char[]{'s', 'e', 'c', 'r', 'e', 't'}); 

这将导致字节代码:

javap -c -v TestObfuscate 

static {};

Code:

Stack=6, Locals=0, Args_size=0

0: new #10; //class java/lang/String

3: dup

4: bipush 6

6: newarray char

8: dup

9: iconst_0

10: bipush 115

12: castore

13: dup

14: iconst_1

15: bipush 101

17: castore

18: dup

19: iconst_2

20: bipush 99

22: castore

23: dup

24: iconst_3

25: bipush 114

27: castore

28: dup

29: iconst_4

30: bipush 101

32: castore

33: dup

34: iconst_5

35: bipush 116

37: castore

38: invokespecial #12; //Method java/lang/String."<init>":([C)V

41: putstatic #16; //Field KEY:Ljava/lang/String;

44: return

private static final String ZIP_PASSW="secret" 

回报

Constant pool: 

const #8 = String #9; // secret

请注意,我没有打电话常数PASSWORD o r ZIP_PASSW(如果字符串是公开的,这一点很重要)。

作为替代方案或除此之外,您可以使用混淆工具,如ProGuard。

回答:

如果将密钥存储在代码中,则始终可以通过逆向工程检索密钥。在编译之前或之后存储密钥也无关紧要。

您无法使用您的程序传递任何种类的(未加密的)密钥而无法对其进行反向工程。这就是为什么首先发明非对称加密的原因。

因此,如果您坚持使用对称加密,则必须将密钥存储在应用程序之外(例如,以文本文件形式),并将该文件以安全通道的形式交付给程序用户。 (谁当然可以使用任何他们想要的方式)。

如果这不是你想要的,你应该研究非对称加密技术。

以上是 针对字节码的java常量反向工程 的全部内容, 来源链接: utcz.com/qa/263824.html

回到顶部