保护Android应用程序免受逆向工程
我想100%保护我的应用程序,不想让黑客进入内部。
这些是我从堆栈溢出中找到的解决方案。
在应用程序中集成Proguard 。
在C / C ++中保留最重要的代码部分。
使用NDK将代码原生地写入.So文件。
使用MD5加密api密钥。
那么是否有其他方法可以完全保护我的Android应用程序免受黑客攻击,或者是上述提到的最佳解决方案。
这些是我找到的参考资料
如何避免反向工程的APK文件?
如何防止Android APK文件的逆向工程来保护代码?
根本没有办法完全防止你的应用程序的逆向工程。 如果有足够的资源,程序最终会得到逆向工程。 这一切都取决于你的对手的动机如何。
在应用程序中集成Proguard
针对逆向工程的最有效的反测量是混淆。 这就是Proguard所做的(但是,与我收集的不太一样)。 Proguard的网站说这是一个优化器,只是再次提供最低程度的保护。 混淆只会使逆向工程更难。 它不防止逆向工程。
在C / C ++中保留最重要的代码部分。
这是一种普遍的误解,即在本地代码中编写代码会阻止逆向工程。 使用C / C ++编写代码将编译并生成机器语言,该语言比Java字节码更难反向工程。 但是,它仍然无法完全阻止它。
另外,用C / C ++编写代码,除非你是一个硬核系统程序员,你有更多的机会引入大量的错误
除此之外,您可能最终会在您的应用中引入大量漏洞,从信息披露到缓冲区溢出。
允许你自己管理内存的语言(如C / C ++)非常强大。 所以,它也可以让你更容易地在脚下拍摄自己。 这是Java被认为通常更安全的另一个原因(因为内存是在GC的帮助下由JVM管理的)。
因此,除非绝对需要用C / C ++编写代码(比如说,你正在编写一个编解码器),否则请不要用C编写代码(只是为了缓解逆向工程)。
使用MD5加密api密钥
MD5是一种散列算法,它将数据散列成一个16字节的字符串。 它也被认为是坏的。 你只能用MD5散列,而不能用它加密。
即使您使用AES等算法对密钥进行加密,您仍然需要将密钥存储在某个地方以便将来进行解密。 攻击者可以很容易地从程序存储器(运行时)或持久存储中提取密钥,然后使用它来解密API密钥。
建议
代码的任何敏感部分(您希望防止进行反向工程)都会将其移至远程服务器。 说,你已经想出了一个很酷的算法,你不希望任何人进行逆向工程。
我建议,在接受来自客户端的数据的服务器中构建一个REST API,运行算法并返回结果。 无论何时您需要使用此算法,都可以从应用程序向您的服务器进行REST调用,然后利用您在应用程序中从那里获得的结果。
所有敏感和机密的数据(如API密钥)也可以存储在服务器中,并且绝不会直接在应用程序中显示。
这将确保您的代码的敏感部分不会透露给您的对手。
链接地址: http://www.djcxy.com/p/90711.html