arm shellcode 编写详析2

前一篇中介绍了arm shellcode基本用法,现在涉及到arm和thumb状态

在前一篇中默认为arm32模式:

text:00008074 ; Segment type: Pure code
.text:00008074                 AREA .text, CODE
.text:00008074                 ; ORG 0x8074
.text:00008074                 CODE32
.text:00008074
.text:00008074                 EXPORT _start
.text:00008074 _start
.text:00008074                 MOV     R2, #0x10
.text:00008078                 ADR     R1, ascii       ; "hello shell\n"
.text:0000807C                 MOV     R0, #1
.text:00008080                 MOV     R7, #4
.text:00008084                 SVC     0
.text:00008088                 SUB     R0, R0, R0
.text:0000808C                 MOV     R7, #1
.text:00008090                 SVC     0
.text:00008090 ; ---------------------------------------------------------------------------
.text:00008094 ascii           DCB "hello shell",0xA,0 ; DATA XREF: .text:00008078o
.text:000080A1                 DCB 0, 0, 0
.text:000080A1 ; .text         ends

若要转化为thumb状态则需要先得到thumb状态的地址存放到r6,然后通过bx r6命令来转换:

.section .text
.global _start_start:.code  32#thumb-Mode onadd r6, pc, #1bx r6.code 16mov r2, #16adr r1, asciimov r0, $0x1mov r7, $0x4svc 0// _exitsub r0, r0, r0mov	r7, #1svc 0ascii:.string "hello shell\n".balign 4

效果如下:

.text:00008074                 AREA .text, CODE
.text:00008074                 ; ORG 0x8074
.text:00008074                 CODE32
.text:00008074
.text:00008074                 EXPORT _start
.text:00008074 _start
.text:00008074                 ADR     R6, (loc_807C+1)
.text:00008078                 BX      R6 ; loc_807C
.text:0000807C ; ---------------------------------------------------------------------------
.text:0000807C                 CODE16
.text:0000807C
.text:0000807C loc_807C                                ; CODE XREF: .text:00008078j
.text:0000807C                                         ; DATA XREF: .text:_starto
.text:0000807C                 MOVS    R2, #0x10
.text:0000807E                 ADR     R1, ascii       ; "hello shell\n"
.text:00008080                 MOVS    R0, #1
.text:00008082                 MOVS    R7, #4
.text:00008084                 SVC     0
.text:00008086                 SUBS    R0, R0, R0
.text:00008088                 MOVS    R7, #1
.text:0000808A                 SVC     0
.text:0000808A ; ---------------------------------------------------------------------------
.text:0000808C ascii           DCB "hello shell",0xA,0 ; DATA XREF: .text:0000807Eo
.text:00008099                 DCB 0, 0xC0, 0x46
.text:00008099 ; .text         ends

若主函数是thumb状态,而子函数是32位arm的话,需要用到blx指令来做状态转换,可以这样做:

.section .text
.global _start_start:.code  32#thumb-Mode onadd r6, pc, #1bx r6.code 16//blx	_writeblx	j_writemov r2, #16adr r1, ascii2mov r0, $0x1mov r7, $0x4svc 0// _exitsub r0, r0, r0mov	r7, #1svc 0j_write:.code 32b _write
_write:STMFD           SP!, {R0-R7,LR}mov r2, #16adr r1, asciimov r0, $0x1mov r7, $0x4svc 1LDMFD           SP!, {R0-R7,PC}
ascii:.string "hello shell\n".balign 4
ascii2:.string "shell storm\n".balign 4

效果如下:

.text:00008074                                         AREA .text, CODE
.text:00008074                                         ; ORG 0x8074
.text:00008074                                         CODE32
.text:00008074
.text:00008074                         ; =============== S U B R O U T I N E =======================================
.text:00008074
.text:00008074
.text:00008074                                         EXPORT _start
.text:00008074                         _start
.text:00008074 01 60 8F E2                             ADR     R6, (loc_807C+1)
.text:00008078 16 FF 2F E1                             BX      R6 ; loc_807C
.text:0000807C                         ; ---------------------------------------------------------------------------
.text:0000807C                                         CODE16
.text:0000807C
.text:0000807C                         loc_807C                                ; CODE XREF: _start+4j
.text:0000807C                                                                 ; DATA XREF: _starto
.text:0000807C 00 F0 08 E8                             BLX     j_write
.text:00008080 10 22                                   MOVS    R2, #0x10
.text:00008082 0F A1                                   ADR     R1, ascii2      ; "shell storm\n"
.text:00008084 01 20                                   MOVS    R0, #1
.text:00008086 04 27                                   MOVS    R7, #4
.text:00008088 00 DF                                   SVC     0
.text:0000808A 00 1A                                   SUBS    R0, R0, R0
.text:0000808C 01 27                                   MOVS    R7, #1
.text:0000808E 00 DF                                   SVC     0
.text:0000808E                         ; End of function _start
.text:0000808E
.text:00008090                                         CODE32
.text:00008090
.text:00008090                         ; =============== S U B R O U T I N E =======================================
.text:00008090
.text:00008090
.text:00008090                         j_write                                 ; CODE XREF: _start:loc_807Cp
.text:00008090 FF FF FF EA                             B       _write
.text:00008094                         ; ---------------------------------------------------------------------------
.text:00008094
.text:00008094                         _write                                  ; CODE XREF: j_writej
.text:00008094 FF 40 2D E9                             STMFD   SP!, {R0-R7,LR}
.text:00008098 10 20 A0 E3                             MOV     R2, #0x10
.text:0000809C 0C 10 8F E2                             ADR     R1, ascii       ; "hello shell\n"
.text:000080A0 01 00 A0 E3                             MOV     R0, #1
.text:000080A4 04 70 A0 E3                             MOV     R7, #4
.text:000080A8 01 00 00 EF                             SVC     1
.text:000080AC FF 80 BD E8                             LDMFD   SP!, {R0-R7,PC}
.text:000080AC                         ; End of function j_write
.text:000080AC
.text:000080AC                         ; ---------------------------------------------------------------------------
.text:000080B0 68 65 6C 6C 6F 20 73 68+ascii           DCB "hello shell",0xA,0 ; DATA XREF: j_write+Co
.text:000080BD 00 00 00                                DCB 0, 0, 0
.text:000080C0 73 68 65 6C 6C 20 73 74+ascii2          DCB "shell storm",0xA,0 ; DATA XREF: _start+Eo
.text:000080CD 00 00 00                                DCB 0, 0, 0
.text:000080CD                         ; .text         ends



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/499597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

openssl c++实现bouncycastle中AES加解密

0x01 为什么要用bouncycastle 先说说JCE(Java Cryptography Extension)是一组包,它们提供用于加密、密钥生成和协商以及 Message Authentication Code(MAC)算法的框架和实现。 它提供对对称、不对称、块和流密码的加密…

zlib数据格式及解压缩实现

0x01 zlib和其他压缩的魔术头 一般来说压缩文件都有个魔术头,用于区分不同的压缩文件对应不同的解压缩算法。 7z文件: 00000000 37 7A BC AF 27 1C 00 03 CD F7 CC 2E 66 6A 33 00 7z集 枉?fj3 tar.xz文件 00000000 FD 37 7A 58 5A 00 00 04 E6 D6 B4 …

python3 Crypto环境

前言 最开始想尝试在windows下面安装python3.6,虽然python安装成功,但在安装Cryto模块用pip3 install pycrypto老是会报错。老夫搞了半天,最终决定在linux下面去做。 以下流程限于linux系统: 0x00 安装python apt-get install p…

win10用Eclipse+OpenJTag对S3C2440开发板进行动态调试

0 背景在S3C2400开发板裸板调试程序中,常用调试手段有三种:点灯法,串口打印,OpenOCD。OpenOCD又分命令行和图形界面(Eclipse)。点灯发和串口打印调试效率都很低,若能掌握第三种调试方法,会让开发过程变得高…

无源码情况下动态调试混淆的java程序

逆向工程JAVA通常是非常简单的,因为优秀的JAVA二进制反编译器已经存在多年。类似于jd-gui工具和恢复java二进制文件源代码功能也做的非常出色的。在这种情况下我们需要动态调试java反编译java程序的情况下,可以从反编译导出然后导入java IDE如Eclipse作为…

mdb access2000 中文密码破解

access数据库破解工具很多,密码能不用费多大功夫就能破解出来,但是对于包含特殊字符包括中文字符的密码,就算破解出来后想通过数据库工具查看,复制粘贴到密码输入框实际都起不了作用 已迁移到:分享最前沿的安全信息-a…

OpenJTAG调试S3C2440裸板程序

0x00 懵逼当你写好的初始化代码head.S和链接脚本uart.lds共同编译出来的*.bin,烧录到NandFlash中的时候,发现串口输出一片空白,这时你的想法是什么,砸电脑还是干点其他有用的事?还是老实的搭建调试环境吧,上…

APK逆向之静态分析篇

0x00 APK包结构0x01 APK反编译-apktool啰嗦一句,反编译之前配置好java环境,具体JDK安装过程,请参照之前的文章。下载最新版本的apktool.jar,并在当前目录下编辑脚本apktool.bat,内容如下: echo off set PAT…

S3C2440 lds链接脚本解析

1. SECTIONS到底意味着什么在一个裸版程序里面含有*.lds文件,而lds文件意味着如果你的程序烧录在nandflash,那在nandflash的内存将根据lds文件指定偏移来分布,下面从不同场景来解释SECTIONS的内容。2. 小于4K程序若程序小于4K,那…

安装qt5.9.5 windows环境

下载:用国外链接下载慢,还是乖乖用国内链接地址吧,我这里5.9.5http://mirrors.ustc.edu.cn/qtproject/archive/qt/5.9/5.9.5/qt-opensource-windows-x86-5.9.5.exe。安装: 在安装的时候需要创建qt账号,然后根据你的vis…

qt在visual studio 2015下的使用

创建工程: 打开visual studio,按上一篇文章的方式创建新工程QtGuiApplication1,默认我们可以看到里面会出现QtGuiApplication1这个类是继承于QMainWindow这个类的。在创建过程中注意下图选项:有三个对象分别是QMainwindow&#xf…

qt 收缩窗体

效果图:功能拆分图:代码: QtStubOption.cpp QtSubOption::QtSubOption(QWidget *parent): QLabel(parent) {ui.setupUi(this);m_GuiShow SHOWGUI;setMouseTracking(true);m_PicStatus[SHOWGUI] ":/QtGuiApplication3/tile";m_Pic…

Android的ELF文件重定位详解,包括64位

0x01 引言 ELF文件格式,主要基于两种,一种是基于链接视图,链接视图即是基于节(Section)来进行解析,一种是基于执行视图,执行视图即是基于段(Segment)来进行解析。前一种是用于静态分析的时候,譬如IDA载入。…

lua安全之关于lua扩展第三方库

android lua require第三方扩展库有三种方式: 1. 用c实现独立的lua模块作为android的第三方动态库来引入,优点是lua扩展库独立方便更新替换,缺点是需要修改虚拟机,开启宏支持dlopen调用的方式,并且还需要设置lua寻找so…

IBinder获取手机服务信息异常

小米8 利用IBinder transact获取服务的接口名字,结果出现以下异常: W/System.err: java.lang.SecurityException W/System.err: at android.os.BinderProxy.transactNative(Native Method) W/System.err: at android.os.BinderProxy.transact(B…

服务动态选择域名问题

服务动态选择域名三种方案: 1. 通过DNS就近调度。缺点:DNS的ip采集库维护很麻烦。优点:业务无缝接入。 2. sim卡和语言判断国家,做国家与域名的映射,缺点:国际漫游不准确。优点:一般能准确路由…

安装openCV到VS2010,Win764位机时遇到的问题的解决办法

安装了一天的OpenCV,终于成功了,打算把遇到的问题和解决方案记录下来,以便以后再遇到时不要重蹈覆辙。 首先最常规的步骤就不说了,我是完全安装OpenCV中文网上的教程一步一步配置的。链接如下: http://wiki.opencv.o…

初学C遇到的一些知识点汇总

<span style"font-family: arial, courier new, courier, 宋体, monospace; white-space: pre-wrap;">本人是以C#为入门语言&#xff0c;现在开始学习数字图像处理&#xff0c;正在学习c语言&#xff0c;在这方面还是小白&#xff0c;所以打算把遇到的问题进行…

利用OpenCV的Haar特征目标检测方法进行人脸识别的尝试(一)

一、前言 由于还处于学习阶段&#xff0c;大多数内容都是从网上学习借鉴的&#xff0c;重复的内容就不多赘述&#xff0c;只是将自己的经验和想法分享出来。感觉不错的学习资源如下 http://www.cnblogs.com/tornadomeet/archive/2012/03/28/2420936.html http://www.cnblog…

Haar特征原理与icvCreateIntHaarFeatures方法的具体实现附详细注释—— 人脸识别的尝试系列(二)

带着强烈的兴趣&#xff0c;上周开始人脸识别的尝试与学习&#xff0c;并且将具体的操作过程记录了下来 链接如下&#xff1a;http://blog.csdn.net/u011583927/article/details/44627493 这周开始了对于算法的深入学习&#xff0c;下面进入正题。 Haar特征的原理是什么&…