- 1、本文档共10页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android系统shellcode编写
Android 系统shellcode 编写
文/ promised lu
随着Android 手机的普及,Android 系统安全日益受人关注。漏洞攻防是安全的一大课
题,其中自然少不了 shellcode 的编写。本文将以提出问题、解决问题的方式教你如何编写
Android 系统 shellcode 。由于篇幅限制,本文将不对ARM 指令集进行介绍,建议没有基础
的读者先参考相关手册。
1. 基础部分
使用什么工具?
GNU ARM 汇编器as 和GNU ARM 连接器ld 是编写Android 系统shellcode 必不可少的两
个工具。Android NDK 提供了Cygwin、Mac 和 Linux 版本的as 和 ld,为了方便在Windows
环境下开发,笔者在附件中提供了Windows 版本的as 和ld。
as 和ld 的使用方法很简单,假设sc.s 是我们编写好的shellcode 源文件,先使用as sc.s -o
sc.o 命令将sc.s 汇编成目标文件sc.o,再使用ld sc.o -o sc 将sc.o 连接成可执行文件sc 。文中
用到的为数不多的as 汇编伪指令将在相关注释中说明,具体请参考“Using as”手册。
除了as 和ld,我们还要用IDA 作为反汇编器,IDA 的使用想必不用多做介绍。用IDA 记
录下sc 中shellcode 的头部和尾部,就可以用十六进制编辑器从sc 中提取shellcode 了。
函数参数如何传递?
函数参数从左到右依次存入R0~R3,如果参数个数大于4 个,则剩余参数从右到左依次
入栈,返回值存入R0。
如何给shellcode 瘦身?
ARM 处理器支持两种指令集:ARM 指令集和Thumb 指令集。ARM 指令集指令长度为
32 位,Thumb 指令集指令长度为16 位。Thumb 指令集的限制更多,比如立即数大小只能在
0 到0xFF 范围内。
为了给shellcode 瘦身,我们更倾向于使用Thumb 指令集编写shellcode 。ARM 处理器总
是从ARM 指令集开始执行,所以我们的shellcode 头部是一段ARM 指令集程序,负责切换
到Thumb 指令集。
如何自定位?
自定位是编写 shellcode 的关键技术之一,也就是所谓GetPC 。在x86 环境下,通常有
CALL GetPC、FSTENV GetPC、SEH GetPC 三种方式。而在ARM 环境下,事情就变得简单很多,
因为指令指针PC 可以直接访问。
ARM 汇编还提供了ADR 伪指令,汇编器会将其转换为相对PC 寻址的指令,所以我们不
用担心自定位问题。值得注意的是,LDR 指令通过绝对地址寻址,当基地址改变时根据重定
位段信息进行重定位。用 LDR 指令寻址一个符号在 shellcode 编写中是错误的,这点和x86
类似。
如何定位函数?
定位函数是编写 shellcode 的关键技术之二。在Windows 环境下,通常通过 PEB 定位
kernel32 基地址,然后遍历kernel32 输出表定位API 。在Linux 环境下,直接系统调用。
Android 系统调用由gensyscalls.py 自动生成,以execve.S 为例,代码如下:
/* autogenerated by gensyscalls.py */
#include sys/linux-syscalls.h
.text @表示代码段
.type execve, #function @定义符号类型
.globl execve @导出符号到连接器
.align 4 @对齐到4字节边界
.fnstart
execve:
.save {r4, r7}
stmfd sp!, {r4, r7} @保存r4和r7
ldr r7, =__NR_execve @r7存放系统调用号
swi #0 @通过调用软中断,切换到特权模式,执行系统调用
ldmfd sp!, {r4, r7} @恢复r4和r7
您可能关注的文档
- 2016年1月期总第52期.PDF
- 2016年北京电影学院文学系电影剧本创作在职艺术硕士复试考研真题资料.pdf
- 2016年对外经济贸易大学金融硕士考研笔记资料真题16.pdf
- 2016年天津心理三级模拟题.pdf
- 2016年年报.PDF
- 2016年度股东大会文件.PDF
- 2016年成都市金牛区义务教育段各学校一年级登记范围.PDF
- 2016年秋季六年级金杯、精英班选拔考试.PDF
- 2016年跑步鞋比较试验结果汇总表.PDF
- 2016生物制药与技术中国展.PDF
- 2025年高考数学圆锥曲线常用二级结论.docx
- 甘肃省靖远县高三下学期第二次联考数学(理)试题扫描版含答案.doc
- 四川省德阳五中高三二诊考试英语试卷扫描版含答案.doc
- 广东省高三第一次模拟考试英语试题扫描版含答案.doc
- 四川省德阳五中高三二诊考试数学(文)试卷扫描版含答案.doc
- 山西省高三第一次模拟考试理科综合试题扫描版含答案.doc
- 四川省广安眉山内江遂宁高三第三次诊断性考试理综化学试题扫描版含答案.doc
- 河南省六市高三下学期第一次联考试题(3月)数学(文)扫描版含答案.doc
- 山西省忻州市2017-2018学年高二上学期期末考试生物试题扫描版.doc
- 2025年国有企业领导班子、市行政审批和政务信息管理局党组书记、局长对照“四个带头”含违纪行为为典型案例检视剖析材料【2篇文】.docx
文档评论(0)