在编写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相关推荐

  1. arm shellcode 编写详析2

    前一篇中介绍了arm shellcode基本用法,现在涉及到arm和thumb状态 在前一篇中默认为arm32模式: text:00008074 ; Segment type: Pure code . ...

  2. HTML5安全风险详析之三:WebSQL攻击

    原文地址:http://blog.csdn.net/hfahe/article/details/8049414 一.WebSQL安全风险简介 数据库安全一直是后端人员广泛关注和需要预防的问题.但是自从 ...

  3. 溢出的原理及 shellcode 编写

    本讲的预备知识: 首先你应该了解intel汇编语言,熟悉寄存器的组成和功能.你必须有堆栈和存储分配方面 的基础知识,有关这方面的计算机书籍很多,我将只是简单阐述原理,着重在应用.其次, 你应该了解li ...

  4. 【移动安全高级篇】————3、Android系统ShellCode编写

    随着Android手机的普及,Android系统安全日益受人关注.漏洞攻防是安全的一大课题,其中自然少不了shellcode的编写.本文将以提出问题.解决问题的方式教你如何编写Android系统she ...

  5. [CTF/网络安全]攻防世界unserialize3解题详析及php序列化反序列化实例讲解

    [CTF/网络安全]攻防世界unserialize3解题详析及php序列化反序列化实例讲解 _wakeup()及php序列化反序列化 序列化字符串结构分析 _wakeup()的利用 解题思路 伪属性数 ...

  6. 如何判断立即数的合法性?(详解详析)

    如何判断立即数的合法性?(详解详析) <ARM体系结构与编程>一书中对立即数有这样的描述:每个立即数由一个8位的常数循环右移偶数位得到. 一个32位的常数,只有能够通过上面构造方法得到的才 ...

  7. 详析VC中坐标系的建立

    详析VC中坐标系的建立 建立一个合适的 坐标系可以为我们的绘图带来很大的方便 .下面介绍一下如何在VC中建立我们想要的坐标系. 一 设备坐标和逻辑坐标 设备坐标(Device Coordinate)又 ...

  8. ionice使用说明与参数详析

    Ionice使用说明与参数详析 命令功能: ionice – 获取或设置程序的IO调度与优先级. 命令格式: ionice [[-c class] [-n classdata] [-t]] -p PI ...

  9. WINDOWS的SHELLCODE编写高级技巧

    WINDOWS的SHELLCODE编写高级技巧 unix等系统因为有用户概念,所以往往溢出是使用先得到普通帐号,然后登陆后用溢出 再加载一个SHELL的办法得到ROOT权限,其系统调用又方便,所以SH ...

最新文章

  1. 倒计时1天 | 专属技术人的盛会,为你而来!
  2. [C++]C++11:Function与Bind
  3. mysql sqldump_mysql sqldump 备份
  4. appium 驱动 对应9.0 系统_第一章:appium
  5. 6.2(求一个整数各位数字之和)
  6. delphi 实现最小化系统托盘
  7. php中面向对象静态调用,php面向对象中static静态属性和静态方法的调用_PHP
  8. 嵌入式linux操作framebuffer显示bmp图片
  9. jupyter更改默认浏览器的方法
  10. 【机器人基础】标准D-H建模法(机器人建模与控制)
  11. 快速处理-小程序/uniapp,showToast没有效果
  12. java ssm框架论文,基于SSM框架的个人博客系统(源码+论文)
  13. excel2010设置列宽为像素_Excel2010中调整行高和列宽的方法
  14. PS长图快速切片_如何解决PS选择主体崩溃问题
  15. 上海电影院分布数据接口
  16. 【Hadoop】Build and Execute
  17. 【体系结构】山东大学计算机体系结构知识点清单
  18. Git下载代码到Windows再拷贝到Linux下编译时要关闭换行符自动转换
  19. 地球模型展示Three.js
  20. 更换计算机桌面背景的教案,《桌面背景换换样》教学设计

热门文章

  1. JavaScript每日学习日记(2)
  2. 如何阻止button默认的刷新页面操作
  3. php 流(Stream)
  4. $.post()提交了数据,return不给跳转
  5. 单行文本与多行文本省略文本
  6. eclipse中monokai插件的安装
  7. Java进阶 创建和销毁对象
  8. JavaScript获取URL参数
  9. python 调用c++库接口出错
  10. c语言实现图像拼接程序,opencv2实现10张图像上下左右拼接融合分享!