保护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

    上一篇: Protect Android App from reverse engineering

    下一篇: Is NDK an alternative to reduce reverse engineering?