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

时间:2017-03-14 11:29:22

标签: android debugging apk

我想询问是否有可能在没有源代码的情况下调试版本apk以及我们如何阻止用户执行此操作?

我认为我无法在没有源代码的情况下调试apk(默认情况下清单有 android:debuggable =" false" ),直到我将其发送到客户端他要求我禁用可调试模式,因为他遇到了这个问题。我尝试重现这个问题,并且我在考虑他是否进行了逆向工程。

4 个答案:

答案 0 :(得分:11)

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

  1. 使用APKTool通过AndroidManifest.xml中的属性启用调试。对齐并签署新修改的APK。
  2. 使用ADB将新的“可调试”APK推送到设备/模拟器。
  3. 使用GDB之类的调试器(NDK包含带有arm工具链的gdbserver)。
  4. 值得一提的是,静态分析也可以是一个选项,因此APK可以解压缩并反编译为SMALI / Java。

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

答案 1 :(得分:1)

我们无法调试apk。

如果用于发布版本,则只能检查日志。

  • 在Android工作室的底部打开Android Monitor
  • 并从左下角选择No Filter from下拉列表。

您将能够看到已发布的.apk

的日志

答案 2 :(得分:1)

我看到你可以通过逆向工程检查这个链接,也许会有所帮助。 https://reverseengineering.stackexchange.com/questions/10902/debugging-third-party-android-apks

答案 3 :(得分:0)

使用Android Studio 3.0及更高版本,您无需源代码即可调试APK

  • 首先请确保Enable Debugging
  •   

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

enter image description here

一些防止调试的技巧:

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签名进行检查。