Android中如何防止ptrace反调试?

问题描述 投票:0回答:1

简介:
我必须对 Android APK 进行逆向工程,并且想使用依赖于

ptrace
的工具来实现这一点。

APK 似乎已经实现了一个反调试机制,它会启动两个进程。然后,“辅助进程”在“主进程”上使用

ptrace
。由于
ptrace
在任何给定时间只能在一个进程上使用,因此可以防止其他进程调试“主”进程。错误可能如下所示:

attach: ptrace(PTRACE_SEIZE, PID): Operation not permitted

我正在 root 模拟器上运行,我可以在其他进程上使用

ptrace
,杀死“辅助进程”将导致“主进程”也终止,在“”上使用
ptrace
时也是如此。辅助进程”本身:

strace: Process PID attached
wait4(PID,  <unfinished ...>)          = ?
+++ killed by SIGKILL +++

我已经尝试过:

ptrace scope
设置为
0
以防止内核硬化:

echo 0| tee /proc/sys/kernel/yama/ptrace_scope

确认

cat /proc/sys/kernel/yama/ptrace_scope

yield

0
,步骤成功。

这不起作用后,我尝试使用

LD_PRELOAD
覆盖APK使用的现有
ptrace shared object
,以下每个命令都是从同一个
adb shell
运行的:

我的

ptrace.c

long ptrace(int request, int pid, void *addr, void *data) {
    return 0;
}

编译:

gcc -shared -fPIC ptrace.c -o ptrace.so

设置环境变量:

export LD_PRELOAD=./ptrace.so

启动应用程序(我还使用了

-e
标志,我不确定它是否可以用于环境变量,但它也不会造成任何伤害):

am start -n the.app.id/the.app.id.MainActivity -e LD_PRELOAD ./ptrace.so

可悲的是,跑步:

cat /proc/PID/status | grep TracerPid

仍然显示

tracer PID
是“辅助进程”而不是 0。没有其他进程可以在“主进程”上使用
ptrace

android linux debugging reverse-engineering ptrace
1个回答
0
投票

使用 frida 和 Interception.attach,你可以做的是 hook ptrace 并始终返回 0。

以下是挂钩 ptrace 并返回 0 的代码行,以便您可以绕过它: https://github.com/apkunpacker/FridaScripts/blob/1c2c4538c1b37394c6e2a57a72c9f743bbb75d29/AntiDebug.js#L45。里面还有一个解决反调试方法的列表。

其他的反hook、反调试,可以看视频:Forging Golden Hammer Against Android App Protections by Georges-Bastien Michel。该视频仅包含想法,因此您必须根据该想法实现您自己的想法。

© www.soinside.com 2019 - 2024. All rights reserved.