注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

[原创]Android下so注入汇总  

2014-12-17 16:54:39|  分类: Android开发与逆 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

/*
*  作者:蟑螂一号
*  原文链接:http://www.sanwho.com/133.html
*  转载请注明出处
*/

Android下so注入是基于ptrace系统调用,因此要想学会android下的so注入,首先需要了解ptrace的用法。

ptrace用法可以参考博客:http://blog.sina.com.cn/s/blog_4ac74e9a0100n7w1.html,也可以在ubuntu下输入man ptrace命令,查看具体描述。

android中进程系统调用劫持可参考博客:http://www.kanxue.com/bbs/showthread.php?t=180461,这是一个android简单的ptrace监控远程进程监控调用的例子。

Android系统是基于Linux系统,在linux系统中可以通过ptrace系统调用实现进程注入。ptrace注入过程大致过程如下:

(1)基于shellcode加载

[1]编写shellcode,shellcode是使用汇编语言写一段汇编程序,该程序实现so库的加载、so库函数查找以及执行库中的函数。

[2]通过远程进程pid,ATTACH到远程进程。

[3]获取远程进程寄存器值,并保存,以便注入完成后恢复进程原有状态。

[4]获取远程进程系统调用mmap、dlopen、dlsym调用地址。

[5]调用远程进程mmap分配一段存储空间,并在空间中写入shellcode、so库路径以及函数调用参数。

[6]执行远程进程shellcode代码。

[7]恢复远程进程寄存器。

[8]detach远程进程。

基于shellcode注入可看雪古河大哥写的libInject,网址: http://bbs.pediy.com/showthread.php?t=141355

(2)直接加载

[1]通过远程进程pid,ATTACH到远程进程。

[2]获取远程进程寄存器值,并保存,以便注入完成后恢复进程原有状态。

[3]获取远程进程系统调用mmap、dlopen、dlsym调用地址。

[4]调用远程进程mmap分配一段存储空间,并在空间中写入so库路径以及函数调用参数。

[5]执行远程进程dlopen,加载so库。

[6]执行远程进程dlsym,获取so库中需要执行的函数地址。

[7]执行远程进程中的函数。

[7]恢复远程进程寄存器。

[8]DETACH远程进程。

目前android  so注入的版本基本上都是基于古河大哥的libInject修改而来。关于so注入的项目,还可以参考洗大师的一个开源项目,网址:https://code.google.com/p/libandroidinjector/downloads/list。洗大师注入需要修改elf文件。

提供一个方便测试so注入成功与否的小测试库,代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <unstd.h>
 
#include <stdio.h>
 
#include <android/log.h>
 
#define LOG_TAG    "test"
 
__attribute__((constructor))   void   inject () {
 
__android_log_print(ANDROID_LOG_DEBUG,LOG_TAG,"Hello,I am  injected.");
 
}

说明:若函数被设定为constructor属性,则该函数会在main()函数执行之前被自动的执行。因此,so注入测试中,只需注入以上代码编译的so库,无需调用注入so的相关函数,即可测试是否注入到远程进程。

版权所有,转载请注明出处。
  评论这张
 
阅读(352)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017