Android源码定制添加反反调试机制

 

https://blog.csdn.net/Fly_hps/article/details/86172698

https://www.52pojie.cn/thread-940605-1-1.html

https://www.cnblogs.com/0616–ataozhijia/p/8561796.html

Kernel proc
内核修改
检测都是通过 proc 进行的,因此我们需要从 proc 入手
要修改的数据:
/fs/proc/base.c、/fs/proc/array.c
要修改对以下文件的写入:
status, stat
修改点:

  1. base line:285
  2. else{
  3. if(strstr(svmname, “trace”)){
  4. return sprint(buffer, “%s”, “sys_epoll_wait”);
  5. }
  6. return sprint(buffer, “%s”, symname);
  7. }
  8. array line: 134
  9. static const char * const task_state_array[] = {
  10. “R (running)”, /* 0*/
  11. “S (sleeping)”, /* 1*/
  12. “D (disk sleep)”, /* 2*/
  13. “S (sleeping)”, /* 4*/
  14. “S (sleeping)”, /* 8*/
  15. “Z (zombie)”, /* 16*/
  16. “X (dead)”, /* 32*/
  17. “x (dead)”, /* 64*/
  18. array line 187
  19. “Gid:\t%d\t%d\t%d\t%d\n”,
  20. get_task_state(p),
  21. task_tgid_nr_ns(p, ns),
  22. pid_nr_ns(pid, ns),
  23. ppid, /*tpid*/0,
  24. cred->uid, cred->euid, cred->suid, cred->fsuid
  25. cred->gid, cred->egid, cred->sgid, cred->fsgid);

修改完成后,编译内核,刷入系统
2. Demo 

导入内核源代码

定位到/fs/proc/base.c 文件中找到 status 相关的方法

status 文件中的信息如下图

task_name 方法

task_state 方法

想把status数据中的状态信息进行修改的话就要修改task_status_array内容( 修改点一),这样便绕过了 State

对 TracePid 进行绕过:TracePid 通常都是对父进程 pid 进行检测,这里将 ppid 改为 0,这样不管是否为调试状态,TracePid 都无法检测出

定位到 Stat 相关方法

Stat 文件中存放着用户属性的简短描述符

跳转到 do_task_start 方法

定位到写数据的相关代码

找到 state 的位置

跳转到 state 被赋值的地方

get_task_state 方法

修改相应的 state 数据就会绕过检测

对 wchan 文件的修改

whan 文件如果是在调试过程中会变成 Trace 数据

结果验证

 


发表评论

电子邮件地址不会被公开。 必填项已用*标注