apk 文件可以防止被调试吗?

逆向工程 拆卸 调试 安卓 apk
2021-06-14 06:10:54

作为漏洞赏金计划的一部分,我正在尝试通过动态分析对 bumble android 移动应用程序进行逆向工程。我发现如果我使用 apktool 反汇编 apk 并重新组装它甚至不更改任何内容,该应用程序将停止运行。它能够启动,但它抱怨互联网连接有问题。apks 使用哪些方法来阻止调试,是否有任何已知的方法可以克服它们?

更新:实际上,当我提到调试时,我的意思是 smali 调试,其中将 apk 反汇编为 smali 代码,将 android:debuggable="true" 添加到清单中,然后重新编译 apk 以使其可调试。然后使用 IDE 将调试器附加到已运行的应用程序进程,其中通过反汇编的 smali 代码完成调试。详情:http : //d-kovalenko.blogspot.sg/2012/08/debugging-smali-code-with-apk-tool-and.html

3个回答

如果你重新编译apk,你需要重新签署应用程序,这将改变证书..并且应用程序可以使用一些方法来“检测”这种变化,这与x86下的“INT 3”检测非常相似......所以是的, 应用程序可以检查/使用其证书作为反调试/篡改的一种方式

另一种使更改更加“隐蔽”的方法是使用 xposed 模块挂钩可调试标志,但是,由于 xposed 模块引入了堆栈更改,程序也可以发现它,因此仍然可以检测到它。

底线是如果在调试和正常运行之间存在“增量”,则检测这种“增量”的方法是一种潜在的反调试技术。

从 Google Play 下载的 APK 几乎总是无法调试。这样做的原因是 APK 文件需要签名才能发布,并且对于已签名的 APK,以下标志:

android:debuggable="false"

在应用程序清单中自动分配。因此,除非开发人员将其设置为true(不太可能),否则就不走运了。

在任何情况下,您的问题都有些模棱两可,因为术语调试意味着源代码的存在。“调试”APK 的唯一方法是获取源代码、构建和编译它,从而调试它。这意味着您需要对APK进行反编译,并且有相当多的APK文件被DexGuard密封,无法进行逆向工程。

此外,还有许多其他技术使得从 APK 文件中提取源代码变得非常困难。例如,登录密钥和凭据等各种常量是持久存储的,而且它们以加密形式存储。这只是一个例子,但你去了。

经过几个小时的逆向工程,我终于发现该应用程序实际上抛出了FacebookAuthorizationException,其中apk中存储的密钥哈希与开发人员门户中的密钥哈希不匹配。(由于重新编译)。我想没有办法超越这一点,因为使用 facebook 登录需要访问令牌。因此,我相信我可以有把握地说,只允许使用 facebook 登录的 apk 几乎不可能修改(并且仍然有效),因为 facebook 不会返回授权所需的访问令牌。(除非逆向者能够登录开发人员的门户以添加新的密钥散列,但这是另一回事)