有什么方法可以调试第三方android应用程序(您没有源代码的应用程序)?我想逐条逐步介绍APK指令,并可能在某些API或某些smali指令上设置断点。

我尝试使用apktool进行反编译,加载到netbeans中,并连接到仿真器,并且我也尝试过使用IDA Pro,但总是会遇到“ JDWP错误:对等重置连接”的错误。我已经尝试过使用默认的Android模拟器和带有Android 5.0.1的Genymotion。

有人在此方面取得过成功吗?您能描述一下您使用的设置和工具吗?

评论

当所有其他方法均失败时,总是进行printf(即Log.e)调试。

#1 楼

要调试不带源代码的APK,您需要执行以下操作:


在APK中启用调试模式(使用apktool来实现)
对APK进行签名(使用keytool和jarsigner)
使用Android调试监视器或DDMS安装应用程序并标识应用程序的调试端口
使用支持JDWP的IDE(例如NetBeans指向带有反编译的Java或smali的项目)。

您可以在此博客中找到要使用的命令(第5节动态分析和调试)在Android应用程序上执行渗透测试的第一步

评论


我试过了,但是我无法设置断点。我确保在调试模式下都进行反编译和构建。这是错误:无法提交断点LineBreakpoint ChessFreeActivity $ 1.java:28,原因:类uk.co.aifactory.chessfree.ChessFreeActivity $ 1中第28行没有可用的可执行位置。

–gsingh2011
15年9月24日在6:51

这意味着您项目中的代码与IDE不同步。反编译的代码可能不允许这样做。使用smali并尝试使用Intellij(如果可行)。

– 3asm_
2015年9月24日23:13在

您使用smali是什么意思?我以为我们必须使用apktool -d生成的“伪” Java代码,否则IDE将无法识别它。可以在Intellij中将smali添加为源文件吗?

–gsingh2011
15年9月24日在23:38

@ gsingh2011检查此:github.com/JesusFreke/smali/wiki/smalidea

–贝鲁兹(Behrouz.M)
17年2月27日在10:10

@pixar很棒的工具,太糟糕了,它不再被维护。

– 3asm_
18年1月6日在13:27