当前位置: 首页 > news >正文

Android检测当前进程或者应用是否被调试

Linux 中的 ptrace 及其他调试相关机制

ptrace 是 Linux 提供的一个强大的系统调用,用于进程跟踪和调试。它允许一个进程(跟踪者)观察和控制另一个进程(被跟踪者)的执行,主要功能包括:

  • 跟踪函数调用和执行:可以跟踪被跟踪进程的函数调用和执行流程。

  • 内存调试:可以读取和修改被跟踪进程的内存内容。

  • 单步执行:可以单步执行被跟踪进程的代码。

  • 信号处理:可以捕获和处理被跟踪进程的信号。

  • 寄存器操作:可以读取和设置目标进程的寄存器值。

  • 线程信息获取:可以获取目标进程的所有线程信息。

其他调试相关机制

  • GDB(GNU Debugger):基于 ptrace 实现,用于调试程序。它通过设置断点、单步执行等方式帮助开发者分析程序运行状态。

  • strace:用于跟踪进程的系统调用和信号。它通过 ptrace 获取系统调用的详细信息,帮助开发者分析程序的系统交互行为。

  • /proc 文件系统:提供了丰富的进程信息,如 /proc/[pid]/status/proc/[pid]/maps,用于查看进程状态和内存映射。

在 Android 应用中检测调试行为的方法

1. 检测 TracerPid

/proc/self/status 文件中,TracerPid 字段表示调试进程的 PID。如果该值非零,则意味着当前进程被调试。可以通过以下代码检测:

#include <stdio.h>
#include <stdlib.h>int checkTracerPid() {FILE* fp = fopen("/proc/self/status", "r");if (!fp) return -1;char line[256];while (fgets(line, sizeof(line), fp)) {if (strncmp(line, "TracerPid:", 10) == 0) {int pid;sscanf(line + 10, "%d", &pid);fclose(fp);return pid;}}fclose(fp);return 0;
}

如果返回值非零,则表示当前进程正在被调试。

2. 使用 ptrace 自检测

 一个进程最多只能被一个进程跟踪。可以尝试让当前进程调用 ptrace(PTRACE_TRACEME, 0, NULL, NULL),如果返回值为 -1,则说明当前进程已经被其他调试器附加。示例代码如下:

#include <sys/ptrace.h>
#include <unistd.h>
#include <sys/types.h>
#include <signal.h>void ptraceCheck() {if (ptrace(PTRACE_TRACEME, 0, NULL, NULL) == -1) {// 被调试kill(getpid(), SIGKILL); // 终止进程}
}

3,检测调试端口

/proc/self/maps 文件中包含了内存映射信息。如果发现有调试器相关的内存映射,说明进程正被调试。

参考: 

移动安全面试题—调试&反调试 

http://www.lryc.cn/news/574616.html

相关文章:

  • 安卓android com.google.android.material.tabs.TabLayout 设置下拉图标无法正常显示
  • 国产化条码类库Spire.Barcode教程:如何使用 C# 读取 PDF 中的条码(两种方法轻松实现)
  • 【数字后端】- 什么是NDR规则?
  • vscode打开.c文件后中文乱码
  • ros(一)使用消息传递图像+launch启动文件
  • 通过Prompt提示构建思维链
  • git操作练习(3)
  • WHAT - React Native 的 Expo Router
  • 华为云Flexus+DeepSeek征文|华为云ModelArts Studio:利用New API实现大模型网关与AI资产管理的无缝对接
  • 梳理React中的fiber架构
  • 学历信息查询API (IVYZ9A2B) 的对接实战 | 天远API
  • WPF/Net Core 简单显示PDF
  • WEB安全--Java安全--jsp webshell免杀1
  • 原子操作(CAS)
  • 【AI大模型】Spring AI 基于Redis实现对话持久存储详解
  • 打包上传到Linux部署并启动
  • 鸿蒙 FolderStack 组件全解析:折叠屏悬停布局开发指南
  • kvm console 的使用
  • linux网 络
  • 计算机基础和Java编程的练习题
  • 储能系统的离网,并网,构网,跟网 简介
  • 【HTTP】取消已发送的请求
  • Linux线程概念及常用接口(1)
  • OSS客户端签名直传实践:Web端安全上传TB级文件方案(含STS临时授权)
  • 从牛顿流体到弹性固体:旋转流变仪的高精度流变特性测定与工业应用
  • Unity_UI_NGUI_UI组件
  • 对人工智能的厌倦感是真实存在的,而且它给品牌带来的损失远不止是参与度的下降
  • 【Linux网络编程】多路转接I/O(一)select,poll
  • 51c嵌入式~电路~合集8
  • 一、永磁同步电机矢量控制——电机数学模型