针对字节码的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