【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )

简介: 【Android 逆向】Android 进程注入工具开发 ( 注入代码分析 | 注入工具的 main 函数分析 )

文章目录

一、注入流程

二、注入工具的 main 函数分析





一、注入流程


开始分析 【Android 逆向】Android 进程注入工具开发 ( 编译注入工具 | 编译结果文件说明 | 注入过程说明 ) 博客中的 tool 工具代码 ;



tool 工具使用前 , 先获 取要注入的目标进程 进程号 , 使用


dumpsys activity top|grep pid


命令获取当前前台进程的进程号 ;


在 /data/system/debug/ 目录中 ( 之前将所有注入相关的文件都拷贝到该目录中 , 并赋予 777 权限 ) , 执行


./tool 2222


命令 , 即可 向目标进程注入 SO 动态库 ; 其中 2222 就是要注入 SO 动态库的 目标进程 进程号 ;






二、注入工具的 main 函数分析


该应用涉及到 CPU 寄存器操作 , 因此需要确定应用运行在指定的 CPU 架构中 , 使用


#if defined(__i386__)


判定当前的运行环境的 CPU 架构 ;



判断参数是否合法 , 正常情况下执行 ./tool 2222 命令 , 有 2 个参数 , 如果参数个数不是 2 个 , 直接报错 ;


/* 验证 参数个数是否合法 , 如果参数个数不是 2 个 , 报错 */
  if (argc != 2) {
  printf("Usage:%s pid\n", argv[0]);
  return 0;
  }



调用 atoi 函数 , 将参数 1 字符串数据 , 转为 pid_t 进程号类型 ;


pid_t target_pid;
  /* 字符串转 int */
  target_pid = atoi(argv[1]);
  if (-1 == target_pid) {
  printf("Can't find the process\n");
  return -1;
  }


获取进程号之后 , 开始 执行 SO 动态库注入 操作 :


// 注入 /data/system/debug/libbridge.so 路径的动态库
  inject_remote_process(target_pid, "/data/system/debug/libbridge.so", "load", NULL, 0);



main 函数完整代码 :


int main(int argc, char** argv) {
#if defined(__i386__)  
  /* 正确情况下应该进入该分支 */
  LOGW("__i386__\n");
#else
  /* 该应用是针对 x86 开发的 , 如果进入到这个分支就出错了 */
  LOGW("__arm__\n");
#endif
  pid_t target_pid;
  /* 验证 参数个数是否合法 , 如果参数个数不是 2 个 , 报错 */
  if (argc != 2) {
  printf("Usage:%s pid\n", argv[0]);
  return 0;
  }
  /* 字符串转 int */
  target_pid = atoi(argv[1]);
  if (-1 == target_pid) {
  printf("Can't find the process\n");
  return -1;
  }
  printf("%s %s\n", __DATE__, __TIME__);
  // 注入 /data/system/debug/libbridge.so 路径的动态库
  inject_remote_process(target_pid, "/data/system/debug/libbridge.so", "load", NULL, 0);
  return 0;
}


目录
相关文章
|
17天前
|
弹性计算 运维 监控
基于进程热点分析与系统资源优化的智能运维实践
智能服务器管理平台提供直观的可视化界面,助力高效操作系统管理。核心功能包括运维监控、智能助手和扩展插件管理,支持系统健康监控、故障诊断等,确保集群稳定运行。首次使用需激活服务并安装管控组件。平台还提供进程热点追踪、性能观测与优化建议,帮助开发人员快速识别和解决性能瓶颈。定期分析和多维度监控可提前预警潜在问题,保障系统长期稳定运行。
60 17
|
7月前
|
Linux
Linux源码阅读笔记10-进程NICE案例分析2
Linux源码阅读笔记10-进程NICE案例分析2
|
7月前
|
Linux
Linux源码阅读笔记09-进程NICE案例分析1
Linux源码阅读笔记09-进程NICE案例分析1
|
9月前
|
监控 Linux 应用服务中间件
探索Linux中的`ps`命令:进程监控与分析的利器
探索Linux中的`ps`命令:进程监控与分析的利器
179 13
|
3月前
|
调度 开发者
核心概念解析:进程与线程的对比分析
在操作系统和计算机编程领域,进程和线程是两个基本而核心的概念。它们是程序执行和资源管理的基础,但它们之间存在显著的差异。本文将深入探讨进程与线程的区别,并分析它们在现代软件开发中的应用和重要性。
122 4
|
4月前
|
运维 JavaScript jenkins
鸿蒙5.0版开发:分析CppCrash(进程崩溃)
在HarmonyOS 5.0中,CppCrash指C/C++运行时崩溃,常见原因包括空指针、数组越界等。系统提供基于posix信号机制的异常检测能力,生成详细日志辅助定位。本文详解CppCrash分析方法,涵盖异常检测、问题定位思路及案例分析。
144 4
|
4月前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
168 4
|
9月前
|
算法 Linux 编译器
技术笔记:LINUX2.6.32下的进程分析
技术笔记:LINUX2.6.32下的进程分析
45 0
|
6月前
|
Java Android开发 数据安全/隐私保护
Android中多进程通信有几种方式?需要注意哪些问题?
本文介绍了Android中的多进程通信(IPC),探讨了IPC的重要性及其实现方式,如Intent、Binder、AIDL等,并通过一个使用Binder机制的示例详细说明了其实现过程。
529 4
|
6月前
|
消息中间件 网络协议 Python
工具人逆袭!掌握Python IPC,让你的进程从此告别单打独斗
【9月更文挑战第9天】你是否曾遇到多个Python程序像孤岛般无法通信,导致数据孤立、任务难协同的问题?掌握进程间通信(IPC)技术,可助你打破这一僵局。IPC是不同进程间传递数据或信号的机制,在Python中常用的方法有管道、消息队列、共享内存及套接字等。其中,管道适用于父子或兄弟进程间简单数据传递;套接字则不仅限于本地,还能在网络间实现复杂的数据交换。通过学习IPC,你将能设计更健壮灵活的系统架构,成为真正的编程高手。
46 3

相关实验场景

更多