arm shellcode 编写详析1
在编写arm shell code 之前,先介绍下arm中r0-r15寄存器的主要用途:
Register Alt. Name Usage
r0 a1 First function argument Integer function result Scratch register
r1 a2 Second function argument Scratch register
r2 a3 Third function argument Scratch register
r3 a4 Fourth function argument Scratch registerr4 v1 Register variable
r5 v2 Register variable
r6 v3 Register variable
r7 v4 Register variable
r8 v5 Register variable
r9 v6
rfp Register variable Real frame pointerr10 sl Stack limit
r11 fp Argument pointer
r12 ip Temporary workspace
r13 sp Stack pointer
r14 lr Link register Workspace
r15 pc Program counte
r0-r3 一般用于传递函数参数,从左到右分别为参数1-参数4。r4-r9一般作为临时变量。在另一方面r7用来存储syscall的地址r13指向栈顶, r15指向下一条执行指令的地址。如果我们想要编写shellcode功能函数的话,我们需要先查找 syscall的地址,譬如_write和_exit函数,我们可以查找NDK里面的文件\android-ndk-r10e\platforms\android-19\arch-arm\usr\include\asm\unistd.h里面有:
#define __NR_write (__NR_SYSCALL_BASE+ 4)
#define __NR_writev (__NR_SYSCALL_BASE+146)
#define __NR_pwrite64 (__NR_SYSCALL_BASE+181)
#define __NR_pciconfig_write (__NR_SYSCALL_BASE+273)
#define __NR_exit (__NR_SYSCALL_BASE+ 1)
#define __NR_exit_group (__NR_SYSCALL_BASE+248)
然后我们可以建立maintest.s文件里面简单的用上_write和_exit
.section .text
.global _start_start:# _write()mov r2, #16 //sizeadr r1, ascii //void* bufmov r0, #0x1 //fdmov r7, #0x4 //syscall addrsvc 0# _exit()sub r0, r0, r0mov r7, $0x1svc 0ascii:
.string "hello shell\n".balign 4
在当前目录建立一个编译的批处理命令:
E:\andorid\android-ndk-r10e\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\arm-linux-androideabi\bin\as.exe -o .\maintest.o .\maintest.s
E:\andorid\android-ndk-r10e\toolchains\arm-linux-androideabi-4.8\prebuilt\windows-x86_64\arm-linux-androideabi\bin\ld.exe -o .\maintest .\maintest.o
adb push E:\task\dirtycow\androidtest\maintest /data/local/tmp/
adb shell "chmod 777 /data/local/tmp/maintest"
pause
运行结果:
E:\task\dirtycow\androidtest>E:\andorid\android-ndk-r10e\toolchains\arm-linux-an
droideabi-4.8\prebuilt\windows-x86_64\arm-linux-androideabi\bin\as.exe -o .\main
test.o .\maintest.s
.\maintest.s: Assembler messages:
.\maintest.s: Warning: end of file not at end of a line; newline insertedE:\task\dirtycow\androidtest>E:\andorid\android-ndk-r10e\toolchains\arm-linux-an
droideabi-4.8\prebuilt\windows-x86_64\arm-linux-androideabi\bin\ld.exe -o .\main
test .\maintest.oE:\task\dirtycow\androidtest>adb push E:\task\dirtycow\androidtest\maintest /dat
a/local/tmp/
[100%] /data/local/tmp/maintestE:\task\dirtycow\androidtest>adb shell "chmod 777 /data/local/tmp/maintest"E:\task\dirtycow\androidtest>pause
请按任意键继续. . .
C:\Users\Administrator>adb shell
shell@pisces:/ $ /data/local/tmp/maintest
hello shellshell@pisces:/ $
arm shellcode 编写详析1相关推荐
- arm shellcode 编写详析2
前一篇中介绍了arm shellcode基本用法,现在涉及到arm和thumb状态 在前一篇中默认为arm32模式: text:00008074 ; Segment type: Pure code . ...
- HTML5安全风险详析之三:WebSQL攻击
原文地址:http://blog.csdn.net/hfahe/article/details/8049414 一.WebSQL安全风险简介 数据库安全一直是后端人员广泛关注和需要预防的问题.但是自从 ...
- 溢出的原理及 shellcode 编写
本讲的预备知识: 首先你应该了解intel汇编语言,熟悉寄存器的组成和功能.你必须有堆栈和存储分配方面 的基础知识,有关这方面的计算机书籍很多,我将只是简单阐述原理,着重在应用.其次, 你应该了解li ...
- 【移动安全高级篇】————3、Android系统ShellCode编写
随着Android手机的普及,Android系统安全日益受人关注.漏洞攻防是安全的一大课题,其中自然少不了shellcode的编写.本文将以提出问题.解决问题的方式教你如何编写Android系统she ...
- [CTF/网络安全]攻防世界unserialize3解题详析及php序列化反序列化实例讲解
[CTF/网络安全]攻防世界unserialize3解题详析及php序列化反序列化实例讲解 _wakeup()及php序列化反序列化 序列化字符串结构分析 _wakeup()的利用 解题思路 伪属性数 ...
- 如何判断立即数的合法性?(详解详析)
如何判断立即数的合法性?(详解详析) <ARM体系结构与编程>一书中对立即数有这样的描述:每个立即数由一个8位的常数循环右移偶数位得到. 一个32位的常数,只有能够通过上面构造方法得到的才 ...
- 详析VC中坐标系的建立
详析VC中坐标系的建立 建立一个合适的 坐标系可以为我们的绘图带来很大的方便 .下面介绍一下如何在VC中建立我们想要的坐标系. 一 设备坐标和逻辑坐标 设备坐标(Device Coordinate)又 ...
- ionice使用说明与参数详析
Ionice使用说明与参数详析 命令功能: ionice – 获取或设置程序的IO调度与优先级. 命令格式: ionice [[-c class] [-n classdata] [-t]] -p PI ...
- WINDOWS的SHELLCODE编写高级技巧
WINDOWS的SHELLCODE编写高级技巧 unix等系统因为有用户概念,所以往往溢出是使用先得到普通帐号,然后登陆后用溢出 再加载一个SHELL的办法得到ROOT权限,其系统调用又方便,所以SH ...
最新文章
- 倒计时1天 | 专属技术人的盛会,为你而来!
- [C++]C++11:Function与Bind
- mysql sqldump_mysql sqldump 备份
- appium 驱动 对应9.0 系统_第一章:appium
- 6.2(求一个整数各位数字之和)
- delphi 实现最小化系统托盘
- php中面向对象静态调用,php面向对象中static静态属性和静态方法的调用_PHP
- 嵌入式linux操作framebuffer显示bmp图片
- jupyter更改默认浏览器的方法
- 【机器人基础】标准D-H建模法(机器人建模与控制)
- 快速处理-小程序/uniapp,showToast没有效果
- java ssm框架论文,基于SSM框架的个人博客系统(源码+论文)
- excel2010设置列宽为像素_Excel2010中调整行高和列宽的方法
- PS长图快速切片_如何解决PS选择主体崩溃问题
- 上海电影院分布数据接口
- 【Hadoop】Build and Execute
- 【体系结构】山东大学计算机体系结构知识点清单
- Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换
- 地球模型展示Three.js
- 更换计算机桌面背景的教案,《桌面背景换换样》教学设计