我想100%保护我的应用,不希望黑客进入内部。

这些是我从Stack Overflow中找到的解决方案。

  • 在应用程序中集成 Proguard
  • 在C/C++中保留代码的最重要部分。
  • 使用NDK将代码本地写入.So文件。
  • 使用MD5加密api key 。

  • 因此,有没有其他方法可以完全保护我的Android应用免受黑客攻击,或者是上述方法中最好的解决方案。

    这些是我发现的引用

    How to avoid reverse engineering of an APK file?

    How to prevent reverse engineering of an Android APK file to secure code?

    最佳答案

    根本无法完全防止应用程序的逆向工程。如果有足够的资源,程序最终将进行反向工程。这完全取决于您的对手有多积极。

    对抗逆向工程最有效的应对措施是混淆。这就是Proguard所做的(但是,从我收集的信息中可以看出not too well)。 Proguard的网站说它是一个优化器,并且只提供最小的保护。混淆只会使逆向工程的过程更加困难。它不能防止逆向工程。

    这是一个普遍的误解,认为以 native 代码编写代码会阻止逆向工程。用C/C++编写将可以将您的代码编译并构建成机器语言,这比Java字节码更难进行逆向工程。但是,它仍然不能完全阻止它。
    另外,用C/C++编写代码,除非您是核心系统程序员,否则您有更多机会引入很多错误

  • 讨厌的segmentation faults
  • memory leaks
  • use after free

  • 最重要的是,您可能最终在应用程序中引入了许多漏洞,从信息泄露到缓冲区溢出。
    允许您自己管理内存的语言(如C/C++)非常强大。因此,这也使 footer 射击更加容易。这是Java通常被认为更安全的另一个原因(因为内存是由JVM在GC的帮助下进行管理的)。
    因此,除非绝对需要使用C/C++编写代码(例如,您正在编写编解码器),否则请不要使用C语言编写(只是为了减轻逆向工程)。

    MD5是一种哈希算法,可将数据哈希为16个字节的字符串。并且它也被认为是坏的。您只能使用MD5进行哈希处理,而不能使用它进行加密。
    即使您使用诸如AES之类的算法对 key 进行加密,将来也需要将 key 存储在某个地方以对其进行解密。攻击者可以轻松地从程序存储器中(运行时)或从持久性存储中提取 key ,然后使用它来解密您的API key 。
    建议
    您希望防止对代码进行敏感的任何敏感部分,然后将其移至远程服务器。说,您想出了一个很酷的算法,您不希望任何人进行逆向工程。
    我建议在服务器上构建一个REST API,以接收来自客户端的数据,运行算法并返回结果。每当需要使用此算法时,都可以从应用程序对服务器进行REST调用,然后仅在应用程序中利用从那里获得的结果。
    所有敏感和 secret 数据(例如您的API key )也可以存储在服务器中,并且永远不会直接在应用程序中公开。
    这样可以确保您的代码的敏感部分不会泄露给您的对手。

    关于android - 保护Android应用免受逆向工程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43601498/

    10-10 08:24