首页 文章

保护Android App免受逆向工程

提问于
浏览
5

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

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

  • 在应用程序中集成 Proguard .

  • 在C / C中保留代码中最重要的部分 .

  • 使用NDK将代码本机写入.So文件 .

  • 使用MD5加密api密钥 .

那么有没有其他方法可以完全保护我的Android应用程序免受黑客攻击,或者是上述提到的最佳解决方案 .

这些是我发现的参考文献

How to avoid reverse engineering of an APK file?

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

1 回答

  • 8

    根本没有办法完全阻止您的应用程序的逆向工程 . 如果有足够的资源,程序最终会进行逆向工程 . 这一切都取决于你的对手的动机 .

    在应用程序中集成Proguard

    对逆向工程最有效的反制是混淆 . 这就是Proguard所做的事情(但是,我收集的是not too well) . Proguard的网站称它是一个优化器,只能再次提供最小的保护 . 混淆只会使逆向工程的过程更加困难 . 它不会阻止逆向工程 .

    在C / C中保留最重要的代码部分 .

    这是一种普遍的误解,即在本机代码中编写代码将阻止逆向工程 . 用C / C编写将编译和构建代码到机器语言,这比Java字节码更难逆向工程 . 但是,它仍然没有完全阻止它 .

    另外,用C / C编写代码,除非你是一个硬核系统程序员,你有更多的机会引入很多bug

    除此之外,您最终可能会在应用程序中引入大量漏洞,从信息泄露到缓冲区溢出 .

    允许您自己管理内存的语言(如C / C)非常强大 . 因此,它也更容易射击自己的脚 . 这就是为什么Java被认为通常更安全的另一个原因(因为内存是由JVM在GC的帮助下管理的) .

    因此,除非绝对需要在C / C中编写代码(比如说,您正在编写编解码器),否则请不要用C语言编写(只是为了减轻逆向工程) .

    使用MD5加密api密钥

    MD5是一种散列算法,它将数据散列为16字节的字符串 . 它也被认为是破碎的 . 您只能使用MD5进行哈希处理,而不能使用它进行加密 .

    即使您使用AES等算法加密密钥,您也需要将密钥存储在某处以便将来解密 . 攻击者可以从程序内存(运行时)或持久存储中轻松提取密钥,然后使用它来解密API密钥 .

    建议

    您希望阻止逆向工程的代码的任何敏感部分将其移动到远程服务器 . 说,你已经提出了一个很酷的算法,你不希望任何人进行逆向工程 .

    我建议,在服务器中构建一个REST API,接受来自客户端的数据,运行算法并返回结果 . 每当您需要使用此算法时,您可以从应用程序对服务器进行REST调用,然后只使用您在应用程序中获得的结果 .

    所有敏感和机密数据(如API密钥)也可以存储在服务器中,并且不会直接在应用程序中公开 .

    这将确保您的敏感部分代码不会泄露给您的对手 .

相关问题