似乎我公司的一个成功应用程序已被重新打包为 torjan 并在 3rd 方市场(谷歌播放之外)上分发。我正在寻找一种强大的解决方案,以保护我们的应用程序在未来免受此类问题的影响。
到目前为止,我已经看到:
但似乎两者都没有提供全面的解决方案。
有什么想法吗?
似乎我公司的一个成功应用程序已被重新打包为 torjan 并在 3rd 方市场(谷歌播放之外)上分发。我正在寻找一种强大的解决方案,以保护我们的应用程序在未来免受此类问题的影响。
到目前为止,我已经看到:
但似乎两者都没有提供全面的解决方案。
有什么想法吗?
我认为您从错误的角度看待它。不确定您的确切情况,但通常重新打包的应用程序不是“逆向工程”。即恶意软件的家伙几乎不关心您的应用程序的内部结构。特洛伊木马可以简单地附加在您的应用程序的入口点,在这种情况下,木马程序将执行,然后继续运行您的应用程序。在这种情况下,混淆不会做任何事情,只会减慢您的应用程序的速度。
基本上,有 5 种方法可以保护您的 APK 被破解/反转/重新打包:
1.隔离Java程序
最简单的方法是让用户无法访问Java Class 程序。这是最基本的方式,它有多种具体的方式来实现。例如,开发者可以将关键的Java Class放在服务器上,客户端通过访问服务器的相关接口来获取服务,而不是直接访问Class文件。所以黑客没有办法反编译Class文件。目前,通过接口提供的标准和协议服务越来越多,如HTTP、Web Service、RPC等,但也有很多应用不适合这种保护。例如,独立程序中的 Java 程序是无法隔离的。
2.加密类文件
为了防止Class文件被直接反编译,很多开发者都会对一些关键的Class文件进行加密,比如注册号、序列号管理等相关类。在使用这些加密的类之前,程序需要先解密这些类,然后将这些类加载到JVM中。这些类可以通过硬件或软件解密。
开发人员经常通过自定义的 ClassLoader 类加载加密类(Applet 不支持自定义的 ClassLoader,因为安全原因)。Customed ClassLoader 将首先找到加密类,然后解密它们。最后将解密的类加载到 JVM。自定义类加载器是这个保护方法中非常重要的一个类。因为它本身没有加密,所以它可能是黑客的第一个目标。如果已经攻克了相关的解密密钥和算法,那么加密的类就可以很容易地被解密。
3.转换为原生代码
将程序转换为本机代码也是防止反编译的有效方法。因为本机代码通常很难被反编译。开发人员可以将整个应用程序转换为原生代码,也可以只转换关键模块。如果只是转换模块的关键部分,Java程序在使用这些模块时需要JNI技术调用。在使用这种方法保护Java程序时,它放弃了Java的跨平台特性。对于不同的平台,我们需要维护不同版本的原生代码,这会增加软件支持和维护的工作量。但对于一些关键模块,有时这种方案往往是必要的。为了保证这些原生代码不会被修改或替换,开发人员经常需要对这些代码进行数字签名。在使用这些原生代码之前,开发人员经常需要对这些本地代码进行身份验证,以确保这些代码没有被黑客更改。如果签名检查通过,则开发者可以调用相关的 JNI 方法。
4.代码混淆
代码混淆是对Class文件进行重新组织和处理,使处理后的代码与未处理的代码完成相同的功能(语义)。但是混淆后的代码很难反编译,即反编译后的代码很难理解,因此反编译人员很难理解真正的语义。理论上,如果黑客有足够的时间,混淆代码仍有可能被破解。甚至有些人正在开发去混淆工具。但从实际情况来看,由于混淆的多元化发展,混淆理论的成熟,Java代码混淆后可以很好地防止反编译。
5.在线加密
APK Protect ( http://www.apkprotect.com/ ) 是 APK 的在线加密网站。提供Java代码和C++代码保护,达到反调试和反编译效果。操作过程简单易行。
我建议您使用最后一种方法,因为它可以为您节省更多时间。我试过了。操作非常简单,不会花很长时间。