gpt4 book ai didi

android - 了解 rootadb 如何在 ELF 二进制文件中查找方法调用

转载 作者:太空狗 更新时间:2023-10-29 16:09:54 30 4
gpt4 key购买 nike

在 Android 设备上运行的 android 调试桥守护进程 adbd 可以在没有 root 支持的情况下编译 (ALLOW_ADBD_ROOT=0)。有一个名为 rootadb 的工具,它能够通过(据我所知)替换对 setuid() 的调用来修补现有的 adbd 二进制文件和带有 NOP 指令的 setgid(),有效地防止它放弃它的特权。

我不明白the code找到系统调用在二进制文件中的位置。

据我所知,它遍历所有字节并检查字节是否匹配:

u32 *sgid = (u32*)&setgid;

int fd = open( "/sbin/adbd", O_RDWR );
fstat( fd, &st );
buf = memalign( 32, st.st_size );
read( fd, buf, st.st_size );
lseek64( fd, 0, SEEK_SET );

for( start = buf, end = start + st.st_size - 0x20; start < end; start++ )
if( !memcmp( &start[1], &sgid[1], sizeof( u32 ) * 2 ) )
memcpy( &start[1], patch, sizeof( patch ) );

这是如何运作的?sgid__setuid 实际填充了什么样的数据?

最佳答案

我不是 100% 确定,但我有一个合理的想法。

第一行代码加载了一个指向setgid地址的指针,并将其视为一个32位指针。

循环遍历二进制文件,并查找等于 setgid 函数地址的 8 个字节的出现。如果找到一个,它会应用补丁,从该位置的第一个字节开始。

关于android - 了解 rootadb 如何在 ELF 二进制文件中查找方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58153620/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com