普通进程

反调试进程

源码:

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <errno.h>#include <sys/prctl.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/ptrace.h>#define eprintf(...) fprintf(stderr, ##__VA_ARGS__)void loop()
{while(true) {sleep(60);}
}bool may_cause_group_stop(int signo)
{switch(signo) {case SIGSTOP:case SIGTSTP:case SIGTTIN:case SIGTTOU:return true;break;default:break;}return false;
}void handle_events()
{int status = 0;pid_t pid = 0;do {pid = TEMP_FAILURE_RETRY(waitpid(-1, &status, __WALL));if (pid < 0) {perror("waitpid");exit(EXIT_FAILURE);}if (WIFEXITED(status)) {eprintf("%d exited, status=%d\n", pid,  WEXITSTATUS(status));} else if (WIFSIGNALED(status)) {eprintf("%d killed by signal %d\n", pid, WTERMSIG(status));} else if (WIFSTOPPED(status)) {int signo = WSTOPSIG(status);eprintf("%d stopped by signal %d\n", pid, signo);if (may_cause_group_stop(signo)) {signo = 0;}long err = ptrace(PTRACE_CONT, pid, NULL, signo);if (err < 0) {perror("PTRACE_CONT");exit(EXIT_FAILURE);}}} while (!WIFEXITED(status) && !WIFSIGNALED(status));}void safe_attach(pid_t pid)
{long err = ptrace(PTRACE_ATTACH, pid, NULL, NULL);if (err < 0) {perror("PTRACE_ATTACH");exit(EXIT_FAILURE);}int status = 0;err = TEMP_FAILURE_RETRY(waitpid(pid, &status, __WALL));if (err < 0) {perror("waitpid");exit(EXIT_FAILURE);}if (WIFEXITED(status)) {eprintf("%d exited, status=%d\n", pid,  WEXITSTATUS(status));exit(EXIT_SUCCESS);} else if (WIFSIGNALED(status)) {eprintf("%d killed by signal %d\n", pid, WTERMSIG(status));exit(EXIT_SUCCESS);} else if (WIFSTOPPED(status)) {int signo = WSTOPSIG(status);eprintf("%d stopped by signal %d\n", pid, signo);if (may_cause_group_stop(signo)) {signo = 0;}err = ptrace(PTRACE_CONT, pid, NULL, signo);if (err < 0) {perror("PTRACE_CONT");exit(EXIT_FAILURE);}} }void protect_father()
{pid_t ppid =  getppid();safe_attach(ppid);handle_events();
}int main()
{eprintf("main process pid: %d\n", getpid());// 设置可ptracprctl(PR_SET_DUMPABLE, 1, 0, 0, 0);pid_t pid = fork();if (pid < 0) {perror("fork");} else if (pid == 0) {eprintf("child process pid: %d\n", getpid());protect_father();exit(EXIT_SUCCESS);}eprintf("main process start loop...\n");loop();return 0;
}

可以通过hook fork或者调试子进程过反调试
查看子进程

转载于:https://blog.51cto.com/haidragon/2388665

android反调试之父子调试相关推荐

  1. android+反调试+方案,Android反调试笔记

    1)代码执行时间检测 通过取系统时间,检测关键代码执行耗时,检测单步调试,类似函数有:time,gettimeofday,clock_gettime. 也可以直接使用汇编指令RDTSC读取,但测试AR ...

  2. android 反调试 github,修改Android手机内核,绕过反调试

    本文博客链接:http://blog..net/qq1084283172/article/details/57086486 0x1.手机设备环境 Model number: Nexus 5 OS Ve ...

  3. Android内存泄漏分析及调试

    2019独角兽企业重金招聘Python工程师标准>>> Android内存泄漏分析及调试 分类: Android2013-10-25 11:31 5290人阅读 评论(5) 收藏 举 ...

  4. [免费专栏] Android安全之利用JDB调试Android应用程序(动态代码注入技术)

    也许每个人出生的时候都以为这世界都是为他一个人而存在的,当他发现自己错的时候,他便开始长大 少走了弯路,也就错过了风景,无论如何,感谢经历 Android安全付费专栏长期更新,本篇最新内容请前往: [ ...

  5. android studio 无线手机调试插件,Android Studio ADB Wifi 无线调试

    关于在Android studio中ADB WIFI插件实现无线调试的使用 一.安装Adb Wifi插件 打开File->perfrence->plugins->Browse rep ...

  6. 020 Android之so文件动态调试

    文章目录 ELF文件格式查看工具 so文件加载时的函数执行顺序 so文件动态调试 so文件调试技巧 使用ida动态调试的那些坑 进程显示不全 illegal segment bitness more ...

  7. dnSpy反编译、部署调试神器

    一.概要 在工作当中,当程序部署了之后就算打了日志遇到极个别的特殊异常没有在程序日志中体现出来或者没有详细的报错原因会让开发者非常头疼,不得不盲猜bug到底出在哪里.这里分享一下工作上经常会用到的工具 ...

  8. Android studio通过荣耀20调试Android程序

    Android studio通过荣耀20调试Android程序 通过Android studio通过荣耀20调试Android程序,要考虑三方面的因素: ·····手机····· ·····windo ...

  9. 【Android Studio】Android Studio ADB Wifi 无线调试

    1. ADB WiFi 安装Adb Wifi插件 打开File->perfrence->plugins->Browse repositories-->搜索 adb wifi-& ...

  10. adb命令 android 串口_Android adb 串口设备调试方法

    在目前android设备调试过程中,经常有客户需要用外挂串口设备,但是在后期联调时,由于环境因素,自己调试时不知道如何进行.因此下面就windows环境下android设备使用adb调试外挂串口设备调 ...

最新文章

  1. oracle 11g数据库以管理员身份登录不上
  2. 孕期出血是否先兆流产——B超看婴儿是否在子宫内+hcg值是否过低孕激素不足...
  3. ABP理论学习之开篇介绍
  4. 【大数据风控体系】理想大数据风控体系
  5. redis学习(二)
  6. 51Nod 1322 - 关于树的函数(树DP)
  7. java注意的一些细节问题
  8. Android Studio 创建第一个项目应用
  9. 逻辑卷备份mysql脚本_对MySQL进行逻辑卷备份与恢复
  10. Interview Common Sample Codes
  11. asp.net core webapi Session 内存缓存
  12. Centos-检查文件系统并尝试修复-fsck
  13. mysql 说说反模式设计_sql反模式分析1
  14. springcache使用笔记002_注释驱动的 Spring cache 按条件查询
  15. AS3.0常用第三方类库:TweenMax
  16. Centos7安装vlc
  17. 单片机、ARM与DSP对比
  18. windows server 2003 asp环境搭建
  19. Computer Science Theory for the Information Age-2: 高维空间中的正方体和Chernoff Bounds
  20. 前端社区的恶趣味之Vanilla JS

热门文章

  1. Flutter实战之Builder和StatefulBuilder
  2. php如何只删去汉字,php如何删除字符串中的中文
  3. iocp端口断开_关于iocp检测客户端异常断线
  4. android自定义手势解锁View
  5. ExpandableListView实现组内单选,组间多选功能
  6. 单片机c语言编程入门下載,51系列单片机C语言编程入门(下)
  7. linux 安装_linux 安装 powershell
  8. 查看linux文件的日期格式,5个在Linux中管理文件类型和系统时间的有用命令
  9. react router官方文档_利用 React 高阶组件实现一个面包屑导航
  10. python 加速方法_加速Python的几种方法