Android安全(三)—so注入(inject)

  • A+
所属分类:逆向工程

*注入分类

我们平时所说的代码注入,主要静态和动态两种方式

·静态注入,针对是可执行文件,比如平时我们修改ELFDEX文件等等,相关的辅助工具也很多,比如IDAJEBApkTool等等;

· 动态注入,针对是进程,比如修改进程的寄存器、内存值等等;

动态跟静态最大的区别是,动态不需要改动源文件,但需要高权限(通常是root权限),而且所需的技术含量更高。

 

· 本质

动态注入技术,本质上就是一种调度技术。想想平时我们调试一个进程时,可以做哪些功能?一般有下列几项:

· 查看变量值

· 修改变量值

· 跟踪进程跳转

· 查看进程调用堆栈

· 等等

所谓的SO注入就是将代码拷贝到目标进程中,并结合函数重定向等其他技术,最终达到监控或改变目标进程行为的目的。Android是基于Linux内核的操作系统,而在Linux下SO注入基本是基于调试API函数ptrace实现的,同样Android的SO注入也是基于ptrace函数,要完成注入还需获取root权限。

注入过程如下:

0x01 获取目标进程的pid,关联目标进程;

0x02 获取并保存目标进程寄存器值;

0x03 获取目标进程的dlopen,dlsym函数的绝对地址;

0x04 获取并保存目标进程的堆栈,设置dlopen函数的相关参数,将要注入的SO的绝对路径压栈;

0x05 调用dlopen函数;

0x06 调用dlsym函数,获取SO中要执行的函数地址;

0x07 调用要执行的函数;

0x08 恢复目标进程的堆栈,恢复目标进程寄存器值,解除关联,完成SO动态库注入;


以下为so动态注入步骤:

连接root过的Android设备或者打开模拟器。将inject和libhello.so拷入设备,设执行权限,执行:

Android安全(三)—so注入(inject)

将inject权限提升到777

然后另运行CMD

先看看被注入进程(surfaceflinger)的mmap,可以看到我们的so已经被加载了,紧接着的那一块就是我们mmap出来的:

Android安全(三)—so注入(inject)


从logcat中也可以看到so注入成功,并且以被注入进程的身份执行了so中的代码:

Android安全(三)—so注入(inject)

 

简单的注入成功


一如既往的学习,一如既往的整理,一如即往的分享。感谢支持Android安全(三)—so注入(inject)

Android安全(三)—so注入(inject)


Android安全(三)—so注入(inject)

HW攻防演练总结:安全数据分析

水坑攻击的原理和预防措施

利用系统溢出漏洞提权

浅谈APP漏洞挖掘之逻辑漏洞

蜜罐调研与内网安全

2020HW热门0day分析与复现

红队技能:Hash读取与端口转发

民航业网络安全工作思考

2020hw系列文章整理(中秋快乐、国庆快乐、双节快乐)

HW中如何检测和阻止DNS隧道




扫描关注LemonSec

Android安全(三)—so注入(inject)


Android安全(三)—so注入(inject)


本文始发于微信公众号(LemonSec):Android安全(三)—so注入(inject)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: