通过反编译和开发人员将密钥保护到Android应用程序中

问题描述 投票:-1回答:3

我正在开发一个项目,需要将密钥隐藏在Android应用程序的某个地方,这样即使在反编译后它也无法取出。该要求甚至声明密钥不应该对开发人员可见,这意味着它应该嵌入到一些预编译的库中。我试过以下的事情:

  1. 制作Jar并混淆jar,之后变得无法使用。它使用Strings的无用方法(它不加密字符串)。
  2. 制作C库并使用该库(NDK)。使用linux命令可以轻松读取字符串。示例:'$ strings'。

我试图找出其他方法可以做到这一点。请帮我解决一下这个。如果您有任何想法,请分享。我不仅仅是有责任的。

谢谢。

java android security android-ndk obfuscation
3个回答
1
投票

这是一个难题。你正在与逆向工程你的应用程序作斗争。有为此建立的工具,特别是DexGuardArxan。 Arxan非常非常聪明,但它比DexGuard这样的解决方案要花费更多。


2
投票

你的应用程序可以做的任何事情,也可以由一个坚定的有能力的黑客进行逆向工程,所以不要指望一些神奇的方法来使这个密钥永久保护。

如果您的目标是提供将被许可给不同开发人员的SDK,那么简单的方法是为每个开发人员分配一个唯一的密钥,并让他们负责将其隐藏在黑客之外。

另一方面,如果我按字面意思读取您的要求,那么密钥字符串将不会以纯文本形式出现在APK中。简单的解决方案是对其进行编码。你可以做一些像key64的base64编码那样简单的事情,或者像提供一个动态计算这个键的C函数一样棘手(因此密钥的痕迹不会出现在strings的输出中)。


0
投票

你好,

对于aar和jar防止反编译你可以使用Quixxi。当然,努力的目的是尽可能地提高整体保护,不可能是什么。但是这个解决方案加入了你所提出的两点中的最佳点。会发生以下转换:

输入:未受保护的jar文件

input jar file

output:调用本机层的java文件

output jar file

您[或需要管理包含您的库的应用程序的开发人员]以后可以按照相同的链接进行集成。此外,如果需要保护整个应用程序的其他部分,则可以使用相同的工具对其进行保护

希望它有所帮助并度过美好的一天, 安东尼

© www.soinside.com 2019 - 2024. All rights reserved.