分享:Android中利用机器码注册机制防止破解
来源:互联网 发布:诸暨法院淘宝网拍卖网 编辑:程序博客网 时间:2024/06/05 11:46
最近做一个Android应用时遇到这个问题,客户要求功能必须注册才能使用,而程序本身又不是联网在线使用的,这就要在程序中加入机器码注册码机制了。
众所皆知Android应用是基于Java开发,如不做处理的话,直接反编译APK就能看到源码算法,要破解就没什么难度了。
关于Android防破解,网上有价值的内容较少。我收集了一些零碎的资料,总结起来大概有以下几种防破解的思路方式:
1.代码混淆。2.3的Android SDK已经支持直接混淆生成APK。混淆能加大反编译破解的难度,但光混淆不能解决问题,对于有经验的人来说,在混淆代码中找到注册检查代码进行强行破解也不是难事。
2.签名比对。APK中可使用签名进行处理,不过APK的签名不能防止反编译,只是反编译后不能再使用同一个签名而已。虽然可在代码中进行比对签名,但比对代码本身也可能被修改掉。因此签名的作用不大。
3.联网注册。程序启动后自动连接到服务器进行注册验证,并把一部分核心功能放到服务端。这种方式是最安全,不过对于单机程序就不合适了,总不能在一个记事本程序中也要求用户登录服务器吧。
4.dex或class动态加载。这种方式理论不错,把一小部分核心算法做成dex或class文件,加密为资源文件,注册成功后才解密并加载到内存中。但这个方式实现起来难度很高,我似乎没有在网上找到实现的文章,实现后维护代码成本也高。另外,如果将程序完全反编译后进行调试,也仍然能下断点把解密的dex或class文件给导出来。
5.使用NDK(或JNI)本地C/C++动态库。对于单机应用程序来说,这个是比较好的解决办法了。NDK编译的原生C/C++程序调试破解的难度比较高,代码维护也方便。
要加大破解难度,还有其它一些要注意的:可对关键内容或算法进行加密;把检测算法分解成零碎片段多处调用;另外注册相关的敏感字符串(如“注册失败”之类的消息)一律不以明文出现,等等。
我最终选择的注册机制方案是:代码混淆+NDK库+内容加密。简单说明如下:
1.对所有JAVA代码进行混淆。我之前写的程序是Android2.2的,不支持直接混淆;后来我下载了最新的SDK,将程序的SDK版本号target设置为13,在default.properties中增加proguard.cfg,然后在工程中右键Tools导出签名的APK完成混淆打包过程。
2.用NDK C语言实现机器码的生成、注册码的检测和内容的解密。在JAVA界面中只做机器码的显示、注册码的输入和调用加解密接口,而核心的机器码注册码加解密全在C程序中完成。机器码要跟硬件ID之类的结合,稍为要注意下的是不能直接用WIFI的MAC地址,因为WIFI的MAC地址容易被修改;最好是用CPU序列号,如果没有的话可考虑用设备ID IMEI或USB的MAC码,但最好不要在JAVA代码中获取,而是要在JNI C代码里获取,以免被反编译后篡改。生成过程这里就不细述了,以后有时间再写一下。
3.对部分资源文件进行加解密处理。程序运行中要使用文件系统中的资源文件才能运行,因此我把这些文件事先在PC上加密,并把解密密钥放在注册码中。根据机器码生成注册码,生成器注册码时将解密密钥加入。由于解密的密钥包含在注册码中,破解者即使将注册检测绕过,也无法解密文件运行;只能获得一个注册码才能执行解密。由于注册码检测和解密过程在NDK程序中完成,因此即使有一个注册码,也难以获得解密的密钥和算法。
当然了,防止破解是相对的,没有完全绝对不能破解的程序,只是让破解的难度成本高到还不如直接注册就行了。反过来说,如果你的程序本身没什么价值或没多少人会用,那基本上防破解也没什么必要。
- 分享:Android中利用机器码注册机制防止破解
- Android中利用机器码注册机制防止破解
- 如何破解软件机器码
- android 4.4中broadcast 注册机制变化
- 利用fail2ban防止ssh暴力破解
- Android Proguard apk防止破解
- 软件加密-防止非法注册机制作
- 利用denyhosts防止ssh暴力破解+脚本防破解
- 防止黑客利用wifi攻击方法分享
- 学会软件破解,让注册机制形同虚设
- 根据机器码实现软件注册
- Android中利用java反射机制Reflect
- Android中利用java反射机制Reflect
- Android--利用Handler消息转发机制实现倒计时(内含防止内存泄露处理)
- Android分享机制总结
- 利用签名机制进行程序自检——Android防破解
- Linux----利用hosts.deny 防止暴力破解ssh
- 浅谈利用RSA算法防止非法注册机的制作
- 一些经久不衰的linux 视频教程列表
- 实战剖析三层架构1
- UBUNTU 使用简明手册(07年为公司普及LINUX写的简明使用文档)
- 手动diy编写防ARP攻击批处理文件
- eclipse 打包插件fat jar
- 分享:Android中利用机器码注册机制防止破解
- JBPM学习日志(四)
- 嵌入式Linux之我行——内核访问外设I/O资源的方式
- DAILY CHECK SQL
- Debian scim 输入法
- 安装GoldenGate错误OGG-01756
- dwr+ibatis 问题集
- 【超佩服】解决ubuntu系统不能使用技嘉(GA)主板内置网卡(芯片R8168)的问题
- FILETIME 、SYSTEMTIME的转换