我想询问是否有可能在没有源代码的情况下调试版本apk以及我们如何阻止用户执行此操作?
我认为我无法在没有源代码的情况下调试apk(默认情况下清单有 android:debuggable =" false" ),直到我将其发送到客户端他要求我禁用可调试模式,因为他遇到了这个问题。我尝试重现这个问题,并且我在考虑他是否进行了逆向工程。
答案 0 :(得分:11)
您可以使用多种不同的工具调试已签名的APK。大多数方法都被认为是逆向工程的一种形式。在高层次上,一种常见的方法(用于动态“实时”调试)将是:
答案 1 :(得分:1)
我们无法调试apk。
如果用于发布版本,则只能检查日志。
您将能够看到已发布的.apk
的日志答案 2 :(得分:1)
我看到你可以通过逆向工程检查这个链接,也许会有所帮助。 https://reverseengineering.stackexchange.com/questions/10902/debugging-third-party-android-apks
答案 3 :(得分:0)
使用Android Studio 3.0及更高版本,您无需源代码即可调试APK
要开始调试APK,请在Android上单击个人资料或调试APK Studio欢迎屏幕。或者,如果您已经打开了一个项目,请单击 从菜单栏中文件>配置文件或调试APK 。在下一个对话框中 窗口中,选择要导入到Android Studio中的APK ,然后 点击确定。
一些防止调试的技巧:
1。检查ApplicationInfo中的可调试标志
Android清单中的android:debuggable
标志确定是否为该应用程序启动了JDWP线程。可以通过应用程序的ApplicationInfo对象以编程方式确定其值。如果设置了该标志,则清单已被篡改并允许调试。
public static boolean isDebuggable(Context context){
return ((context.getApplicationContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
}
2。 isDebuggerConnected
Android Debug系统类提供了一种静态方法来确定是否连接了调试器。该方法返回一个布尔值。
public static boolean detectDebugger() {
return Debug.isDebuggerConnected();
}
可以通过访问DvmGlobals全局结构通过本地代码调用相同的API。
JNIEXPORT jboolean JNICALL Java_com_test_debugging_DebuggerConnectedJNI(JNIenv * env, jobject obj) {
if (gDvm.debuggerConnected || gDvm.debuggerActive)
return JNI_TRUE;
return JNI_FALSE;
}
3。 APK签名检查
如果APK辞职,其签名将会更改。对照您原始的APK签名进行检查。