我正在尝试使用 android unity 应用程序ptrace_attach的主进程及其线程 ( /proc/<pid>/task) 来避免恶意用户调试该应用程序(这是一款游戏)。
我开发了一个 ndk 库,它从函数ptrace_attach内部的主进程和父进程(作为主进程)分叉JNI_OnLoad()。之后定期检查/proc/<pid>/task文件夹以附加新创建的线程。
问题是,这在普通应用程序中运行良好,但是当我尝试在统一制作的应用程序中运行它时,主进程停止并且屏幕变成黑屏或白屏没有响应。但是,如果您延迟附加几秒钟以查看屏幕上的动画效果,则附加工作正常。
代码大致是这样的:
if(!fork())
{
parentPid = getppid();
// attach parent process
if(ptrace(PTRACE_ATTACH,parentPid,0,0)<0)
exit(-1);
ptrace(PTRACE_SETOPTIONS, parentPid, 0, PTRACE_O_TRACEEXEC| PTRACE_O_TRACEVFORKDONE|PTRACE_O_TRACESYSGOOD |PTRACE_O_TRACEFORK |PTRACE_O_TRACEVFORK |PTRACE_O_TRACECLONE );
while(true)
{
// get signal from processes
stoppedPid = waitpid(-1,&stat_loc, 0);
...
// check if stoppedPid need to be attached
// if so, attach
ptrace(PTRACE_ATTACH,stoppedPid,0,0);
...
// else, just continue the stopped process
ptrace(PTRACE_CONT,stoppedPid,0,0);
}
}
也许我应该调整ptrace_setoptions?
提前致谢 :)