返回列表 发新帖

【反调试】常用反调试方案总结

[复制链接]

39

主题

349

回帖

1676

积分

高中生

Rank: 4

金币
643
好评
11
信誉
125

考神MT论坛新人MT论坛最佳新人

发表于 2023-7-5 14:04:52 | 显示全部楼层 | 阅读模式  来自 江苏
本帖最后由 ggggmllll 于 2023-7-5 14:13 编辑

对网上常用的反调试方案进行了实践,发现不都能用,以下内容是实践总结(测试机:未root的蓝叠模拟器),大佬勿喷


1,调试进程名检测
方案:遍历所有进程,将获取到的进程名与某些固定进程名对比
实现:
  1. int compareProcess()
  2. {
  3.     FILE* pfile=NULL;
  4.     char buf[0x1000]={0};

  5.     pfile=popen("ps","r");
  6.     if(NULL==pfile)
  7.     {
  8.         //LOGA("SearchObjProcess popen打开命令失败!\n");
  9.         return -1;
  10.     }
  11.     // 获取结果
  12.     //LOGA("popen方案:\n");
  13.     while(fgets(buf,sizeof(buf),pfile))
  14.     {

  15.         char* strA=NULL;
  16.         char* strB=NULL;
  17.         char* strC=NULL;
  18.         char* strD=NULL;
  19.         strA=strstr(buf,"android_server");//通过查找匹配子串判断
  20.         strB=strstr(buf,"gdbserver");
  21.         strC=strstr(buf,"gdb");
  22.         strD=strstr(buf,"fuwu");
  23.         if(strA || strB ||strC || strD)
  24.         {
  25.             return 1;
  26.             // 执行到这里,判定为调试状态

  27.         }
  28.     }
  29.     pclose(pfile);
  30.     return 0;
  31. }
复制代码

结果:只获取到了自身进程和一些无关紧要的进程,高版本的android无法获取所有进程


2,Ptrace检测
方案:使用PTRACE_TRACEME占位,使其他进程无法附加
实现:
  1. extern "C"
  2. JNIEXPORT jstring JNICALL
  3. Java_com_test_antidebug_MainActivity_antiDebug(JNIEnv *env, jobject thiz) {
  4.     if (ptrace(PTRACE_TRACEME, 0, 0, 0) < 0) {
  5.         __android_log_print(ANDROID_LOG_ERROR, "gml", "error: %d", errno);
  6.         return chars2jstring(env, "反调试失败");
  7.     }
  8.     return chars2jstring(env, "反调试成功");
  9. }
复制代码
结果:没用,selinux限制了ptrace函数,这种反调试形同虚设


3,TracerPid检测
方案:读取/proc/self/status来判断tracer pid是否为0
实现:
  1. extern "C"
  2. JNIEXPORT jint JNICALL
  3. Java_com_test_antidebug_MainActivity_getTracerPid(JNIEnv *env, jobject thiz) {
  4.     char buf[1024];
  5.     int pid = 0;
  6.     int fd = open("/proc/self/status", O_RDONLY); //TracerPid:        0
  7.     read(fd, buf, 1024);
  8.     char* tracer = strstr(buf, "TracerPid:");
  9.     sscanf(tracer, "TracerPid:\t%d\n", &pid);
  10.     close(fd);
  11.     return (jint) pid;
  12. }
复制代码
结果:成功获取tracer pid,比较好用


4,java层的校验方案
本人Java水平较差,有需要可以看看正己大佬的帖子


总结
随着android版本的更新,很多反调试方案无法使用了
lz的水平有限,目前知道的反调试方法只有这么多,欢迎大佬补充
回复

使用道具 举报

39

主题

349

回帖

1676

积分

高中生

Rank: 4

金币
643
好评
11
信誉
125

考神MT论坛新人MT论坛最佳新人

发表于 2023-7-5 14:05:12 | 显示全部楼层  来自 江苏
自古沙发归楼主
回复

使用道具 举报

13

主题

5044

回帖

1万

积分

博士生

E●机甲FK

Rank: 7Rank: 7Rank: 7

金币
3850
好评
22
信誉
100

MT论坛最佳新人MT论坛帅哥MT论坛新人考神MT论坛活跃会员挂机大佬

QQ
发表于 2023-7-5 14:12:41 来自手机  | 显示全部楼层  来自 安徽
感谢分享
回复

使用道具 举报

16

主题

2126

回帖

5619

积分

硕士生

Rank: 6Rank: 6

金币
122
好评
1
信誉
110

考神MT论坛新人MT论坛最佳新人MT论坛帅哥

QQ
发表于 2023-7-5 14:18:43 来自手机  | 显示全部楼层  来自 广西
感谢分享
回复

使用道具 举报

41

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
6142
好评
3
信誉
98
发表于 2023-7-5 14:38:00 来自手机  | 显示全部楼层  来自 山东
感谢分享
回复

使用道具 举报

7

主题

979

回帖

3309

积分

大学生

Rank: 5Rank: 5

金币
3674
好评
0
信誉
100
发表于 2023-7-5 15:33:13 来自手机  | 显示全部楼层  来自 新疆
感谢分享
回复

使用道具 举报

24

主题

3542

回帖

7232

积分

硕士生

萌新

Rank: 6Rank: 6

金币
864
好评
23
信誉
122

MT论坛新人考神MT论坛活跃会员MT论坛帅哥

发表于 2023-7-5 15:46:57 来自手机  | 显示全部楼层  来自 江西
感谢分享
回复

使用道具 举报

18

主题

9045

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
4987
好评
3
信誉
202

考神

发表于 2023-7-5 16:17:05 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

0

主题

6570

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
6322
好评
0
信誉
108

考神MT论坛新人MT论坛帅哥

发表于 2023-7-5 17:08:00 来自手机  | 显示全部楼层  来自 江苏
感谢分享
回复

使用道具 举报

0

主题

3328

回帖

8016

积分

硕士生

Rank: 6Rank: 6

金币
1353
好评
0
信誉
100

考神

发表于 2023-7-5 18:07:52 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

4

主题

6254

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
3952
好评
5
信誉
96

考神MT论坛帅哥MT论坛新人

发表于 2023-7-5 19:58:53 来自手机  | 显示全部楼层  来自 河南
多谢分享
回复

使用道具 举报

24

主题

6184

回帖

1万

积分

博士生

Rank: 7Rank: 7Rank: 7

金币
2658
好评
12
信誉
384

考神

发表于 2023-9-27 03:02:38 来自手机  | 显示全部楼层  来自 江苏
感谢分享
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表