背景

在android系统中,进程之间是相互隔离的,两个进程之间是没办法直接跨进程访问其他进程的空间信息的。那么在android平台中要对某个app进程进行内存操作,并获取目标进程的地址空间内信息或者修改目标进程的地址空间内的私有信息,就需要涉及到注入技术。
通过注入技术可以将指定so模块或代码注入到目标进程中,只要注入成功后,就可以进行访问和篡改目标进程空间内的信息,包括数据和代码。
Android的注入技术的应用场景主要是进行一些非法的操作和实现如游戏辅助功能软件、恶意功能软件。

zygote注入

zygote是一个在android系统中是非常重要的一个进程,因为在android中绝大部分的应用程序进程都是由它孵化(fork)出来的,fork是一种进程复用技术。也就是说在android系统中普通应用APP进程的父亲都是zygote进程。
zygote注入目的就是将指定的so模块注入到指定的APP进程中,这个注入过程不是直接向指定进程进程注入so模块,而是先将so模块注入到zygote进程。
在so模块注入到zygote进程后,在点击操作android系统中启动的应用程序APP进程,启动的App进程中包括需要注入到指定进程的so模块,太都是由zygote进程fork生成,因而在新创建的进程中都会包含已注入zygote进程的so模块。
这种的注入是通过间接注入方式完成的,也是一种相对安全的注入so模块方式。目前xposed框架就是基于zygote注入。
1.通过注入器将要注入的so模块注入到zygote进程;
2.手动启动要注入so模块的APP进程,由于APP进程是通过zygote进程fork出来的,所以启动的APP进程都包含zygote进程中所有模块;
3.注入的so模块劫持被注入APP进程的控制权,执行注入so模块的代码;
4.注入so模块归还APP进程的控制权,被注入进程正常运行。
(注入器主要是基于ptrace注入shellcode方式的进程注入)
通过ptrace进行附加到zygote进程。
调用mmap申请目标进程空间,用于保存注入的shellcode汇编代码。
执行注入shellcode代码(shellcode代码是注入目标进程中并执行的汇编代码)。
调用munmap函数释放申请的内存。
通过ptrace进行剥离zygote进程。
下面是关键的zygote代码注入实现


ptrace注入

ptrace注入实现上分类:
通过利用ptrace函数将shellcode注入远程进程的内存空间中,然后通过执行shellcode加载远程进程so模块。
通过直接远程调用dlopen、dlsym、dlclose等函数加载被注入so模块,并执行指定的代码。
ptrace直接调用函数注入流程:
通过利用ptrace进行附加到要注入的进程;
保存寄存环境;
远程调用mmap函数分配内存空间;
向远程进程内存空间写入加载模块名称和函数名称;
远程调用dlopen函数打开注入模块;
远程调用dlsym函数或需要调用的函数地址;
远程调用被注入模块的函数;
恢复寄存器环境;
利用ptrace从远程进程剥离。
关键的ptrace直接调用系统函数实现

shellcode注入

shellcode注入就是通过将dlopen/dlsym库函数的操作放在shellcode代码中,注入函数只是通过对远程APP进程进行内存空间申请,接着修改shellcode 代码中有关dlopen、dlsymdlclose等函数使用到的参数信息,然后将shellcode代码注入到远程APP进程申请的空间中,最后通过修改PC寄存器的方式来执行shellcode 的代码。
关键 的ptrace注入shellcode代码实现

修改ELF文件注入

在android平台Native层的可执行文件SO文件,它是属于ELF文件格式,通过修改ELF文件格式可以实现对so文件的注入。
通过修改ELF二进制的可执行文件,并在ELF文件中添加自己的代码,使得可执行文件在运行时会先执行自定义添加的代码,最后在执行ELF文件的原始逻辑。
修改二进制ELF文件需要关注两个重要的结构体:
其中ELF Header 它是ELF文件中唯一的,一个固定位置的文件结构,它保存着Program Header Table和Section Header Table的位置和大小信息。
修改ELF文件实现so文件注入实现原理为:通过修改 Program Header Table中的依赖库信息,添加自定义的so文件信息,APP进程运行加载被该修改过的ELF文件,它也同时会加载并运行自定义的so文件。
Program Header Table表项结构

程序头表项中的类型选项有如下

当程序头表项结构中的类型为PT_DYNAMIC也就是动态链接信息的时候,它是由程序头表项的偏移(p_offset)和p_filesz(大小)指定的数据块指向.dynamic段。这个.dynamic段包含程序链接和加载时的依赖库信息。
关键ELF文件修改代码实现


android下注入技术详解相关推荐

  1. DLL的远程注入技术详解

    DLL的远程注入技术详解 2008-12-01 20:28 DLL的远程注入技术是目前Win32病毒广泛使用的一种技术.使用这种技术的病毒体通常位于一个DLL中, 在系统启动的时候,一个EXE程序会将 ...

  2. android 命令使用详解,Android下pm 命令详解

    作者:Sam (甄峰) sam_code@hotmail.com Sam在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这 ...

  3. Android下pm命令详解

    在看相关PackageManager代码时,无意中发现Android 下提供一个pm命令,通常放在/system/bin/下.这个命令与Package有关,且非常实用.所以研究之. 0. Usage: ...

  4. python dll注入监听_HOOK -- DLL的远程注入技术详解(1)

    DLL 的远程注入技术是目前 Win32 病毒广泛使用的一种技术.使用这种技术的病毒体通常 位于一个 DLL 中,在系统启动的时候,一个 EXE 程序会将这个 DLL 加载至某些系统进程 (如 Exp ...

  5. 系统安全攻防战:DLL注入技术详解

    DLL注入是一种允许攻击者在另一个进程的地址空间的上下文中运行任意代码的技术.攻击者使用DLL注入的过程中如果被赋予过多的运行特权,那么攻击者就很有可能会在DLL文件中嵌入自己的恶意攻击代码以获取更高 ...

  6. android下sqlite操作详解

    一.SQLite简介 在Android平台上,集成了一个嵌入式关系型数据库-SQLite,SQLite3支持 NULL.INTEGER.REAL(浮点数字).TEXT(字符串文本)和BLOB(二进制对 ...

  7. Android 3D游戏开发技术详解与典型案例

    下载地址 <Android3D游戏开发技术详解与典型案例>主要以Android平台下3D游戏的开发为主题,并结合真实的案例向读者详细介绍了OpenGL ES的基础 知识及3D游戏程序开发的 ...

  8. android常用技术网站收藏过的网址 给 Android 开发者的 RxJava 详解 Android设备标识-没有完美的解决方案-只有取舍 - 小彼得的专栏 - 博客频道 - CSDN.NET

    收藏过的网址 http://www.jianshu.com/p/a7b36d682b6f?ref=myread  Android插件化快速入门与实例解析 http://www.cnblogs.com/ ...

  9. Linux下Android ADB驱动安装详解

    Developing with cocos2d-x for android on Linux http://blog.plicatibu.com/developing-with-cocos2d-x-f ...

  10. 【备注】【C24】《Android 3D游戏开发技术详解与典型案例》PDF 下载

    [C24]<Android 3D游戏开发技术详解与典型案例>PDF 下载 目前市面上的Android技术书籍还比较少,Android3D游戏开发的书籍更是没有.因此,在现在市面上,Andr ...

最新文章

  1. Android实用代码(不定期更新)
  2. html任务清单源码,JavaScript jQuery 任务清单 ToDoList
  3. 什么笔记本电脑好_买个什么价格的笔记本电脑好,如何选购笔记本电脑
  4. varnish缓存服务器构建疑问
  5. 关于__attribute__ ((packed))
  6. 彼聆智能语音机器人_电销行业的人工智能:智能语音电话机器人
  7. Docker : Error response from daemon: Get https://docker.elastic.co/v2/: net/http: TLS handshake time
  8. 挑战程序设计竞赛(第2版)》
  9. 以京东为代表电商平台成中华老字号销售增速最快渠道
  10. 第一篇:CUDA 6.0 安装及配置( WIN7 64位 / 英伟达G卡 / VS2010 )
  11. MATLAB之ODE
  12. 前端js下载mp4、flv格式的文件流
  13. 微信修改步数 Android,安卓微信怎么改步数
  14. (C语言)2048游戏实现
  15. 学奥数对孩子究竟有哪些好处?
  16. PPP 协议及配置解析
  17. 【国内博客】国内常见的 博客 主页 (IT)
  18. 微信小程序如何申请开通流量主
  19. 模型剪枝,“剪”掉了什么?
  20. DNS域名解析服务详解

热门文章

  1. 给tftp服务器传文件,袖针文件传输服务器Tftpd32
  2. JS === 实现多个光标跟随事件
  3. 病毒手动查杀(威金 q盗 熊猫烧香)
  4. dell笔记本驱动安装失败_戴尔笔记本win7系统声卡驱动无法安装的问题分析与解决方案...
  5. js解析QQ表情和emoji表情
  6. 两台计算机如何打印机共享打印机,两台计算机如何共享一个打印机?
  7. 2019大前端浪潮下的年度终结
  8. 【电赛最全备赛资源】电赛历年赛题源码+老学长挥泪经验之谈(文章较长全网最全)+电赛论文写作模板及评分标准【19电磁炮、17板球、15风力摆、13倒立摆、94-21全国大学生电子设计竞赛历年真题】
  9. 哪里可以下载免费字体,免费可商用字体解决你的烦恼
  10. 西门子PLC S7 200 SMART 没有触摸屏的仿真