如何避免反向工程的APK文件?
我正在开发针对Android的付款处理应用程序 ,并且我想阻止黑客访问APK文件中的任何资源,资产或源代码。
如果有人将.apk扩展名更改为.zip,那么他们可以将其解压缩并轻松访问所有应用程序的资源和资产,并使用dex2jar和Java反编译器,还可以访问源代码。 对一个Android APK文件进行反向工程非常简单 - 有关更多详细信息,请参阅堆栈溢出问题从APK文件反向工程到项目。
我已经使用了Android SDK提供的Proguard工具。 当我对使用签名的密钥库和Proguard生成的APK文件进行反向工程时,我得到了混淆的代码。 但是,Android组件的名称保持不变,并且某些代码(如应用中使用的键值)保持不变。 根据Proguard文档,该工具不能混淆Manifest文件中提到的组件。
现在我的问题是:
1.如何完全避免Android APK的逆向工程? 这可能吗?
AFAIK,完全避免逆向工程没有任何窍门。
而且@inazaruk也说得很好:无论你对代码做什么,潜在的攻击者都能够以任何方式改变它,或者他认为可行。 你基本上不能保护你的应用程序不被修改。 并且您放入的任何保护都可以禁用/删除。
2.如何保护所有应用程序的资源,资产和源代码,使黑客无法以任何方式破解APK文件?
尽管如此,你可以使用不同的技巧来使黑客更加困难。 例如,使用混淆(如果它是Java代码)。 这通常会显着减缓逆向工程。
3.是否有办法让黑客更加困难甚至不可能? 我还能做些什么来保护APK文件中的源代码?
正如大家所说,并且你可能知道,没有100%的安全性。 但是,谷歌内置的Android开始之地是ProGuard。 如果您可以选择包含共享库 ,则可以在C ++中包含所需的代码来验证文件大小,集成等。如果您需要将外部本机库添加到每个构建的APK库文件夹中,则可以使用它由下面的建议。
将库放置在默认为项目文件夹中的“libs”的本机库路径中。 如果你为'armeabi'目标构建了本地代码,那么把它放在libs / armeabi下 。 如果它是用armeabi-v7a构建的,那么把它放在libs / armeabi-v7a下。
<project>/libs/armeabi/libstuff.so
AFAIK,你不能保护/ res目录中的文件,而不是保护它们。
但是,您可以采取一些措施来保护您的源代码,或者至少如果不是所有内容都会执行哪些操作。
10000
硬币。 不要直接保存10000
,而应使用像((currency*2)+1)/13
这样的算法进行保存。 所以不是10000
,而是将1538.53846154
节省到SharedPreferences中。 然而,上面的例子并不完美,你必须努力想出一个不会损失货币的等式来舍入错误等。 $200
。 与其向服务器发送$200
的原始价值,不如发送一系列更小,预定义的值,这些值合计高达$200
。 例如,在服务器上有一个文件或表格,用于将文字与值相等。 因此,假设Charlie
对应$47
, John
对应$3
。 因此,不要发送$200
,你可以发送Charlie
四次, John
发送四次。 在服务器上,解释它们的含义并将其添加。 这可以防止黑客发送任意值到您的服务器,因为他们不知道什么字与什么值相对应。 作为安全措施的附加措施,您也可以有类似于第3点的公式,并每n
天更改一次关键字。 总而言之,无法保护您的应用程序100%。 你可以让它变得更难,但并非不可能。 您的网络服务器可能会受到攻击,黑客可以通过监控多个交易金额和您为其发送的关键字来计算出您的关键字,黑客可以通过源代码精心查找哪些代码是虚拟的。
你只能反击,但永远不会赢。
在计算史上,从来没有人可以在向攻击者提供工作副本时阻止对软件进行逆向工程。 而且,大多数情况下, 它永远不可能 。
有了这个理解,有一个明显的解决方案:不要把你的秘密给你的攻击者。 虽然您无法保护APK的内容,但您可以保护的是您不会分发的任何内容。 通常,这是服务器端软件,用于激活,支付,规则执行和其他多汁代码。 您可以通过不将它们分发到APK中来保护有价值的资产。 相反,建立一个服务器来响应来自你的应用程序的请求,“使用”这些资产(无论这可能意味着什么),然后将结果发送回应用程序。 如果这种模式不适用于您想要的资产,那么您可能需要重新考虑您的策略。
另外, 如果您的主要目标是防止应用程序盗版 :甚至不打扰。 你已经在这个问题上花费了更多时间和金钱,而不是任何反盗版措施可能会希望拯救你的东西。 解决这个问题的投资回报如此之低,甚至连想都没有意义。
链接地址: http://www.djcxy.com/p/16113.html