Android 如何在没有源代码的情况下调试已签名的apk?
我想问一下,是否有可能在没有源代码的情况下调试发布版apk,以及如何防止用户执行此操作 我原以为没有源代码就无法调试apk(manifest默认为android:debuggable=“false”),直到我将其发送给客户机,他要求我禁用可调试模式,因为他遇到了这个问题。我试图重现这个问题,我想如果他做了反向工程。我们无法调试apk 如果用于发布构建,则只能检查日志Android 如何在没有源代码的情况下调试已签名的apk?,android,debugging,apk,Android,Debugging,Apk,我想问一下,是否有可能在没有源代码的情况下调试发布版apk,以及如何防止用户执行此操作 我原以为没有源代码就无法调试apk(manifest默认为android:debuggable=“false”),直到我将其发送给客户机,他要求我禁用可调试模式,因为他遇到了这个问题。我试图重现这个问题,我想如果他做了反向工程。我们无法调试apk 如果用于发布构建,则只能检查日志 在底部的Android studio中打开Android监视器 并从左上角出现的下拉列表中选择“无过滤器” 你将能够看到发布的
- 在底部的Android studio中打开Android监视器
- 并从左上角出现的下拉列表中选择“无过滤器”
你将能够看到发布的日志。apk我看到你可以通过反向工程来完成这项工作。检查此链接,也许会有所帮助。
您可以使用许多不同的工具调试已签名的APK。大多数方法将被视为逆向工程的一种形式。在高层,一种常见的方法(用于动态“实时”调试)是:
有许多工具可用于帮助反转和调试APK。我经常使用的一些是;dex2jar、JDGUI、APK Studio、JEB、IDA Pro、VisualGDB。您可以使用3.0及更高版本在没有源代码的情况下调试APK
- 首先确保
- 要开始调试APK,请单击Android上的配置文件或调试APK 工作室欢迎屏幕。或者,如果您已经打开了一个项目,请单击 文件>从菜单栏配置或调试APK。在下一个对话框中 窗口中,选择要导入Android Studio的APK,然后 单击确定
android:debugable
标志确定是否为应用程序启动JDWP线程。它的值可以通过应用程序的ApplicationInfo对象以编程方式确定。如果设置了该标志,则说明清单已被篡改并允许调试
public static boolean isDebuggable(Context context){
return ((context.getApplicationContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
}
2。isDebuggerConnected
Android调试系统类提供了一个静态方法来确定是否连接了调试器。该方法返回一个布尔值
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签名。如果没有源代码,则无法进行调试code@Imen,在没有源代码的情况下无法调试apk,但是可以通过将arr文件导入项目来调试arr文件。什么是arr文件?