Недавно я пытался изучить программирование командной оболочки iOS. Я мог бы успешно написать простую программу Hello World на ассемблере следующим образом:
.global _main
.align 2
.text
_main:
mov x0, 1
mov x2, 14
adr x1, hello_txt
mov x16, 4
svc 0
mov x16, 1
svc 0
hello_txt: .ascii "Hello, World!\n"
Затем я начал писать шелл-код execve на основе значений системных вызовов: https://thog.github.io/syscalls-table-aarch64/latest.html на основе этого образца: https://github.com/johnjohnsp1/shellcode-1/blob/master/os/linux/arm64/execve.s
.global _main
.align 2
.text
_main:
// execve("/bin/sh", NULL, NULL);
adr x0, sh // x0 = "/bin/sh"
eor x1, x1, x1 // x1 = NULL
eor x2, x2, x2 // x2 = NULL
mov x16, 221 // x16 = execve
svc 0
sh:
.ascii "/bin/sh\0"
К сожалению, программа не имеет оболочки. Я пробовал /bin/ls и т. д., но не мог и не работать.
Позже я вызвал execve из программы на C, она успешно запустила /bin/ls, но не запустила /bin/bash. Кажется, iOS не позволяет вызывать /bin/bash из системы или execve.
Мой вопрос; есть ли способ обойти это? Или как я могу прогрессировать больше? Большое спасибо.
ОБНОВИТЬ
Спасибо за отзыв Siguza, у меня может быть рабочий шеллкод сборки (на взломанном устройстве):
.global _main
.align 2
.text
_main:
// execve("/bin/sh", NULL, NULL);
adr x0, sh // x0 = "/bin/sh"
eor x1, x1, x1 // x1 = NULL
eor x2, x2, x2 // x2 = NULL
mov x16, 59 // x16 = execve
svc 0
sh:
.ascii "/bin/bash\0"
execve
возвращает ошибку, что он говорит? Есть ли в iOS, производной от BSD ОС,bash
, оболочка проекта GNU? - person Margaret Bloom   schedule 25.04.2021