Здравствуйте, andrey.desman, Вы писали:
AD>Здравствуйте, IID, Вы писали:
IID>>- файл утилиты лежит в /system/xbin (ссылка из /system/bin), имеет chown 0.0 и chmod 06755
AD>Вроде же /system монтируется с опцией nosuid, не?
хз
rr — моя тулза
su — китайская
shell@T01:/ $ mount | grep /system
/dev/block/bootdevice/by-name/system /system ext4 ro,seclabel,relatime,data=ordered 0 0
shell@T01:/ $ rr
root@T01:/ # mount -o remount,rw /system
mount: Operation not permitted
255|root@T01:/ # exit
255|shell@T01:/ $ su
root@T01:/ # mount -o remount,rw /system
root@T01:/ # exit
shell@T01:/ $ mount | grep /system
/dev/block/bootdevice/by-name/system /system ext4 rw,seclabel,relatime,data=ordered 0 0
shell@T01:/ $
Еще что замечено:
1) китайская не работает без демона, запущенного от init. Демон — файл с точно таким же содержанием, но другим именем. Попытка грохнуть 2 процесса-демона и перезапутить демона от root вручную приводит к тому, что su с таким демоном сразу же завершается.
2) убитые процессы-демоны самостоятельно перезапускаются в течении ~минуты. Парент /init (pid=1). Механизм перезапуска пока не выяснил. Китайцы вообще мощно в систему внедрились, я около 10ка копий насчитал, это только бегло найденные.
3) в моей тулзе я не могу зайти в /data/local/tmp. Китайская же заходит без проблем.
IID>Ты в своей утилите логировал результаты вызова всех этих seteuid/getuid?
Все такие вызовы успешны. Отдизасмил частично китацев — они делают вот так:
if (setgid(0) || setuid(0))
return -1;
if (setresgid(-1, gid, -1) || setresuid(-1, uid, -1))
return -2;
if (setresgid(gid, gid, gid) || setresuid(uid, uid, uid))
return -3;
Эффекта это не даёт.
IID>А тулза делает fork/exec или просто exec?
моя
const char* sh = "/system/bin/sh";
if (execlp(sh, sh, NULL) < 0)
{
В китайской видел сисколлы execve, fork, vfork. Других, относящихся к запуску, нет.