破解主要分为四个步骤:反编译,静态分析,动态调试,重编译
对抗反编译
寻找反编译工具处理apk或dex时的缺陷,思路就是阅读其源码或者给大量的apk给这个工具进行压力测试
对抗静态分析
1.代码混淆技术–用SDK自带的ProGuard
2.NDK保护
3.外壳保护(爱加密,娜迦,梆梆,阿里的,360等)
对抗动态调试
1.检测调试器
在AndroidManifest.xml文件的Application标签中加入android:debuggable="false"让程序不可调试,这样,如
果别人想调试该程序就必然会修改它的值,我们在代码中检查它的值来判断程序是否被修改过
2.检测模拟器
模拟器与真实的Android设备有着许多差异,我们可以在命令提示符下执行“adb shell getprop”查看并对比它们的
属性值,经过对比发现,有如下几个属性值可以用来判断软件是否运行在模拟器中:
ro.product.model:该值在模拟器中为sdk,通常在正常手机中它的值为手机的型号。
ro.build.tags:该值在模拟器中为test-keys,通常在正常手机中它的值为release-keys。
ro.kernel.qemu:该值在模拟器中为1,通常在正常手机中没有该属性。
防止重编译
-
检测签名(看看程序签名的hash值是否有变化,有变化就退出)
-
检验保护(检验classed.dex的hash或者CRC都可以)