has*_*ikh 8 security android reverse-engineering
我想100%保护我的应用程序并且不希望黑客进入内部.
这些是我从Stack Overflow中找到的解决方案.
在应用程序中集成Proguard.
在C/C++中保留代码中最重要的部分.
使用NDK将代码本机编写到.So文件中.
使用MD5加密api密钥.
那么有没有其他方法可以完全保护我的Android应用程序免受黑客攻击,或者这是上述提到的最佳解决方案.
这些是我发现的参考文献
gtu*_*tux 15
根本没有办法完全阻止您的应用程序的逆向工程.如果有足够的资源,程序最终会进行逆向工程.这一切都取决于你的对手的动机.
在应用程序中集成Proguard
反向逆向工程最有效的反制是混淆.这就是Proguard的作用(但是,与我收集的不太一样).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密钥)也可以存储在服务器中,而不会直接在应用程序中公开.
这将确保您的敏感部分代码不会泄露给您的对手.
你可以从逆向工程中阅读我关于 Medium Protect Android App 的文章。
我将向您展示如何防止安卓应用程序被盗。我们问题的大局是应用程序的数据而不是代码,所以为什么没有处理混淆字符串的内置框架取决于开发人员的指纹。
我知道 Proguard 是处理混淆函数和类名称的框架。你知道每次我破解一个应用程序时我都不需要知道函数或类名:)
但我需要知道基本数据 URL 或在屏幕上向用户显示的所有字符串。
因此,保护 APK 的有效方法是使用开发人员的指纹混淆字符串,因此当我要反编译应用程序时,我无法获取服务 URL 或在没有原始指纹的情况下显示在屏幕上的任何重要字符串。
有一个框架可以做到这一点,称为 StringCare https://github.com/StringCare/AndroidLibrary。
| 归档时间: |
|
| 查看次数: |
7464 次 |
| 最近记录: |