日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

arm shellcode 编写详析1

發布時間:2024/7/23 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。