ARMv7, перехват SVC syscall
От: wl. Россия  
Дата: 24.12.22 12:22
Оценка:
Подскажите, что можно придумать, чтобы перехватывать syscall в АРМе?
задача в следующем: я хочу загрузить код приложения и линкуемых системных библиотек от PSVita на андроиде, и хочу его выполнить (напрямую процессором, без эмуляции). Подменить экспорт из библиотеки, к примеру, ::open(...) на свою реализацию ещё можно, но вот начальную инициализацию библиотек уже подменить нельзя, и если там встретится syscall, всё плохо.

Как бы обойти эту ситуацию попроще?
Единственное, что мне приходит в голову, проанализировать весь код загружаемой библиотеки программным дизассемблером, найти там эти syscall и заменить на что-то. На крайний случай вручную поменять, чтобы уже пропатченные загружались.
На что можно заменить, так чтобы моя программа смогла перехватить? Breakpoint, invalid instruction, ещё что-то? (да, хостовая программа, загружающая и исполняющая код, на C++, но, думаю, можно что-то и с ассемблером подумать, главное, чтобы это можно было провернуть в usermode)

если что-то подобное можно провернуть и на x64, тоже интересно, там ровно та же проблема, но для системных библиотек от PS4 — функции инициализации библиотек вызывают syscall
Отредактировано 24.12.2022 12:24 wl. . Предыдущая версия .
Re: ARMv7, перехват SVC syscall
От: vsb Казахстан  
Дата: 24.12.22 12:37
Оценка:
strace разве не это делает?
Re[2]: ARMv7, перехват SVC syscall
От: wl. Россия  
Дата: 24.12.22 13:11
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>strace разве не это делает?


глянул мельком исходники, и похоже, что нет. Он перехватывает более высокий уровень, экспорты ФУНКЦИЙ из системных библиотек, это просто и такое и мне придется делать, чтобы не падало об различия ОС, мне же нужно либо перехватить этот ОПКОД, либо изменить его так, чтобы вместо него вызывался мой обработчик.

Если использовать эмулятор, как это делает Vita3k, то там прямо бэкенд Dynamic перехватывает svc:
void CallSVC(u32 swi) override
Re[3]: ARMv7, перехват SVC syscall
От: vsb Казахстан  
Дата: 24.12.22 13:14
Оценка:
Здравствуйте, wl., Вы писали:

vsb>>strace разве не это делает?


wl.>глянул мельком исходники, и похоже, что нет. Он перехватывает более высокий уровень, экспорты ФУНКЦИЙ из системных библиотек, это просто и такое и мне придется делать, чтобы не падало об различия ОС, мне же нужно либо перехватить этот ОПКОД, либо изменить его так, чтобы вместо него вызывался мой обработчик.


strace использует специальные системные вызовы, при которых ядро останавливает выполнение, когда целевая программа производит системный вызов и даёт возможность произвести какие-то действия. По крайней мере на x86 должно быть так. Конечно это требует ядра с нужными опциями, как там в андроиде — не знаю.
Re: ARMv7, перехват SVC syscall
От: ononim  
Дата: 09.04.23 15:27
Оценка:
seccomp?
PS
извиняюсь за некропостинг, сам не понимаю как так получилось, вроде месага в топе была
Как много веселых ребят, и все делают велосипед...
Отредактировано 09.04.2023 15:29 ononim . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.