是不是有很多初学者认为没有拿到源码就不可以调试Android应用了?不是这样子的。只要通过反编译拿到smali代码工程,再加上smalidea调试神器,分分钟就可以在Android Studio中调试应用。即便核心代码被放到了JNI层,我们也可以使用IDA Pro继续调试,而且实例开发中能放进JNI层实现的核心代码实在有限。
为了对抗动态调试,可以考虑在源码中随意穿插相关的检测代码,在检测到动态调试时,直接进程自杀,异常退出虚拟机。
大致实现如下:
/**
*检测动态调试
*/
public void detectedDynamicDebug(){
If(!BuildConfig.DEBUG){
If(Debug.isDebuggerConnected()){
//进程自杀
int myPid = android.os.Process.myPid();
android.os.Progress.killProcess(myPid);
//异常退出虚拟机
System.exit(1);
}
}
}
这只是一个简单的例子,市面上还有很多为了加固产品做出的动态调试对抗措施,就希望大家自己去发掘了。