介绍:
我必须反向工程一个Android APK,并希望使用依赖于ptrace
的工具。
APK似乎已经实现了一个反调试机制,它启动了两个进程。然后,“helper进程”在“main进程”上使用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
型
得到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
。
1条答案
按热度按时间7cwmlq891#
在Interception.attach中使用frida,您可以做的是钩住ptrace并始终返回0。
下面是挂接ptrace并返回0的代码行,以便您可以绕过它:里面https://github.com/apkunpacker/FridaScripts/blob/1c2c4538c1b37394c6e2a57a72c9f743bbb75d29/AntiDebug.js#L45还列出了使用反调试的方法。
对于其他防挂机、防调试,可以查看视频:Forging Golden Hammer Against Android App Protections by Georges-Bastien Michel。视频只包含想法,所以你必须从想法中实现自己的。