这篇文章是上一篇博客的后续分析,主要介绍向init进程发送热拔插信息后init进程的处理流程

首先我们来了解一个数据结构,uevent,如下

struct uevent {

const char *action;

const char *path;

const char *subsystem;

const char *firmware;

int major;

int minor;

};

内核收到的信息如下,ACTION=addDEVPATH=/../data/local/tmpSUBSYSTEM=firmwareFIRMWARE=../../../data/local/tmp/hotplug

通过如下函数parse_event进行解析

static void parse_event(const char *msg, struct uevent *uevent)

{

while(*msg) {

if(!strncmp(msg, "ACTION=", 7)) {

msg += 7;

uevent->action = msg;

} else if(!strncmp(msg, "DEVPATH=", 8)) {

msg += 8;

uevent->path = msg;

} else if(!strncmp(msg, "SUBSYSTEM=", 10)) {

msg += 10;

uevent->subsystem = msg;

} else if(!strncmp(msg, "FIRMWARE=", 9)) {

msg += 9;

uevent->firmware = msg;

} else if(!strncmp(msg, "MAJOR=", 6)) {

msg += 6;

uevent->major = atoi(msg);

} else if(!strncmp(msg, "MINOR=", 6)) {

msg += 6;

uevent->minor = atoi(msg);

}

while(*msg++);

}

}

经过解析之后,uevent的结构为:

action="add"

path="/../data/local/tmp"

subsystem="firmware"

firmware="../../../data/local/tmp/hotplug"

之后来到处理firmware的核心函数

static void process_firmware_event(struct uevent *uevent)

{

l = asprintf(&root, SYSFS_PREFIX"%s/", uevent->path);

//root为/sys/../data/local/tmp/=/data/local/tmp/

l = asprintf(&loading, "%sloading", root);

//loading为/data/local/tmp/loading

l = asprintf(&data, "%sdata", root);

//data为/data/local/tmp/data   其内容为指向/proc/sys/kernel/hotplug的符号链接

l = asprintf(&file, FIRMWARE_DIR"/%s", uevent->firmware);

//file为/etc/firmware/../../../data/local/tmp/hotplug=/data/local/tmp/hotplug

loading_fd = open(loading, O_WRONLY);

data_fd = open(data, O_WRONLY);

fw_fd = open(file, O_RDONLY);

load_firmware(fw_fd, loading_fd, data_fd);

}

最后来到load_firmware函数,把hotplug中的数据写到/proc/sys/kernel/hotplug中

其内容变为/data/local/tmp/exploid

static int load_firmware(int fw_fd, int loading_fd, int data_fd)

{

while (len_to_copy > 0) {

char buf[PAGE_SIZE];

nr = read(fw_fd, buf, sizeof(buf));

len_to_copy -= nr;

while (nr > 0) {

nw = write(data_fd, buf + nw, nr);

nr -= nw;

}

}

}

终于/proc/sys/kernel/hotplug中写入了我们的恶意程序了,只要再次受到如wifi打开、usb插入等热拔插信息,内核就会以root权限加载我们的程序再一次执行,从而达到提权的目的

Android提权root漏洞,【转】结合init源码剖析android root提权漏洞(CVE相关推荐

  1. 【Android 安装包优化】WebP 应用 ( libwebp 源码下载 | Android.mk 和 Application.mk 构建脚本修改 | libwebp 函数库编译 )

    文章目录 一. libwebp 源码下载 二. libwebp 源码编译脚本修改 三. libwebp 函数库编译 四.参考资料 一. libwebp 源码下载 Google 提供了一系列的 WebP ...

  2. 戴眼镜检测和识别3:Android实现戴眼镜检测和识别(含源码,可实时检测)

    Android实现戴眼镜检测和识别(含源码,可实时检测) 目录 Android实现戴眼镜检测和识别(含源码,可实时检测) 1.戴眼镜检测和识别方法 2.戴眼镜人脸检测 3.戴眼镜识别模型训练 4.戴眼 ...

  3. 结合源码探讨Android系统的启动流程

    结合源码探讨Android系统的启动流程 由于本人能力有限,所考虑或者疏忽错漏的地方或多或少应该存在.同时,Android从启动过程开始,实际上就涉及多个技术难点和多种通信机制的知识点. 基于上面两个 ...

  4. ARouter init 源码解析(自动注册的实现)

    概要 使用ARouter,我们只需要在必要的地方加上注解,然后在application中init Arouter就可以直接通过代码进行路由跳转了. 为什么我们可以不用写任何注册的代码,就直接跳转到相关 ...

  5. 人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码)

    人脸识别4:Android InsightFace实现人脸识别Face Recognition(含源码) 目录 人脸识别4:Android InsightFace实现人脸识别Face Recognit ...

  6. Android图片爬虫,看妹纸神器项目源码,ListView单张图片查看

    Android图片爬虫,看妹纸神器项目源码 刚自学完安卓,国庆7七天花了6天纯手写入门级app,从集成图片爬虫到整个项目结束真是一步一个坑. 整个项目没有用框架,都是手写纯属练手,项目中主要用到的技术 ...

  7. 安卓Android与H5双向交互MathJax展示数学公式(源码+解析)

    安卓Android与H5双向交互MathJax展示数学公式(源码+解析) 博主就今天周五又做了个需求(安卓Android与H5交互),原来上线的功能是服务器配置过来的学习报告(一个H5页面)并提供原始 ...

  8. android 随手记 170多个示例demo源码

    下载地址:http://pan.baidu.com/s/101PEN 2012-10-1513:03   2,098,836     AdXmpp(Openfire+asmack+spark) .zi ...

  9. 视频直播源码在Android端实现1对1音视频实时通话

    我们要使用 WebRTC 进行音视频互动时需要申请访问硬件的权限,至少要申请以下三种权限 Camera 权限 Record Audio 权限 Intenet 权限 在Android中,申请权限分为静态 ...

最新文章

  1. 自己动手在 Linux 系统实现一个 everything 程序
  2. mysql的Innodb为什么使用B+树
  3. 做开源 18 年,他想把中国开源带向世界 | 人物志
  4. 数论及Python实践
  5. OpenGL基础51:泛光
  6. python开发自动化创建一个任务下发到手机_django2 +requests+ddt+unittest+HTMLestRunner接口自动化测试平台...
  7. HDU 6623 Minimal Power of Prime(思维)题解
  8. python变量赋值方式_【Python入门学习】详谈python变量和变量赋值语句
  9. Elastic 技术栈之 Logstash 基础
  10. vm虚拟机的安装使用装系统有序列号
  11. 手把手教你c语言队列实现代码,通俗易懂超详细!
  12. 全面了解IDC数据中心
  13. 娱乐圈有缘无份的明星
  14. 关于webpack登堂入室的必经之路(1)
  15. 2022.11.16 英语背诵
  16. java校验身份证的合法性
  17. 微软修补Windows零日漏洞,该漏洞允许在Windows计算机上远程执行
  18. 常微分方程-差分方程
  19. 分析样布/面料的七个口诀
  20. 修改远程计算机时间,win10电脑中的远程协助时间限制怎么设置

热门文章

  1. 2459: 爱你多少年呢
  2. linux怎么复制文件夹全部内容,linux局域网怎么复制文件夹下的全部文件到另外文件夹...
  3. 计算机考试上机安排,全国计算机等级考试模拟上机安排(最终版).doc
  4. error:lnk2005 已经在*.obj中定义_如何在 Spring 中自定义 scope
  5. ES 集中式日志分析平台 Elastic Stack(介绍)
  6. 还在用 Redux,要不要试试 GraphQL 和 Apollo?
  7. nagios监控oralce数据库的表空间大小
  8. playframework 打包在tomcat里部署
  9. CSS3质感分析——表面线性渐变
  10. HRBUST 1473 教主的遗产【状态压缩】