Android 如何在没有源代码的情况下调试已签名的apk?

Android 如何在没有源代码的情况下调试已签名的apk?,android,debugging,apk,Android,Debugging,Apk,我想问一下,是否有可能在没有源代码的情况下调试发布版apk,以及如何防止用户执行此操作 我原以为没有源代码就无法调试apk(manifest默认为android:debuggable=“false”),直到我将其发送给客户机,他要求我禁用可调试模式,因为他遇到了这个问题。我试图重现这个问题,我想如果他做了反向工程。我们无法调试apk 如果用于发布构建,则只能检查日志 在底部的Android studio中打开Android监视器 并从左上角出现的下拉列表中选择“无过滤器” 你将能够看到发布的

我想问一下,是否有可能在没有源代码的情况下调试发布版apk,以及如何防止用户执行此操作

我原以为没有源代码就无法调试apk(manifest默认为android:debuggable=“false”),直到我将其发送给客户机,他要求我禁用可调试模式,因为他遇到了这个问题。我试图重现这个问题,我想如果他做了反向工程。

我们无法调试apk

如果用于发布构建,则只能检查日志

  • 在底部的Android studio中打开Android监视器
  • 并从左上角出现的下拉列表中选择“无过滤器”

你将能够看到发布的日志。apk

我看到你可以通过反向工程来完成这项工作。检查此链接,也许会有所帮助。

您可以使用许多不同的工具调试已签名的APK。大多数方法将被视为逆向工程的一种形式。在高层,一种常见的方法(用于动态“实时”调试)是:

  • 用于通过AndroidManifest.xml中的属性启用调试。对齐并签署新修改的APK
  • 用于将新的“可调试”APK推送到设备/仿真器
  • 使用调试器,例如(NDK包括带有arm工具链的gdbserver)
  • 值得一提的是,静态分析也可以是一种选择,通过这种选择,可以将APK解包并反编译为SMALI/Java


    有许多工具可用于帮助反转和调试APK。我经常使用的一些是;dex2jar、JDGUI、APK Studio、JEB、IDA Pro、VisualGDB。

    您可以使用3.0及更高版本在没有源代码的情况下调试APK

    • 首先确保
    • 要开始调试APK,请单击Android上的配置文件或调试APK 工作室欢迎屏幕。或者,如果您已经打开了一个项目,请单击 文件>从菜单栏配置或调试APK。在下一个对话框中 窗口中,选择要导入Android Studio的APK,然后 单击确定

    一些针对调试的预防技巧:

    1。正在检查ApplicationInfo中的可调试标志

    android清单中的
    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文件?