ptrace检测

  1. ptrace自己: 如果一个进程已经被 ptrace 附加,则再次调用 ptrace(PTRACE_ATTACH, …) 会失败,返回 -1 并设置 errno 为 EPERM
  2. 检查/proc/[pid]/status文件里的TracerPid
  3. 看看父进程是谁/proc/self/stat

检查地址开头来判断hook

  1. native函数, 检查函数开头的几个字节, 是否跟常规的函数一致. 一般hook会修改成特定的跳转指令.
  2. native函数, 也可以对比so文件和内存中指令的一致性来判断是否被hook.
  3. 一些hook手段通过将ArtMethod函数通过修改accessflags转为native函数来进行劫持的hook, 检查方法属性可以判断.