首页
社区
课程
招聘
关于getModuleBase的问题,家人们,谁懂呀
2023-5-18 23:23 5749

关于getModuleBase的问题,家人们,谁懂呀

2023-5-18 23:23
5749

在substrate hook时,只使用if(strstr(buff, "r-xp")判断,是可以正确获取到base_addr(比如 libil2cpp.so),如果多加一个|| strstr(buff, "r--p")判断,此时就会获取到错误地址,从而崩溃

 

但GOT hook时,只使用if (strstr(buff, "r-xp")判断,获得的base_addr,就会提示error:memcmp

1
2
3
4
5
6
Elf_Ehdr *header = (Elf_Ehdr*)(base_addr);
if (memcmp(header->e_ident, ELFMAG, SELFMAG) != 0)//if (memcmp(header->e_ident, "\177ELF", 4) != 0)
{
    LOGE("error:memcmp");
    return;
}

如果多加一行|| strstr(buff, "r--p")判断,就可以获取到正确地址,也就不会error:memcmp

 

那么问题来了,什么时候多加这行|| strstr(buff, "r--p")判断合适呀,家人们,谁懂呀,哪个好心的哥哥,姐姐能给个完美封装函数


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

收藏
点赞1
打赏
分享
最新回复 (1)
雪    币: 132
活跃值: (83)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
vmoveq 2023-5-19 21:34
2
0

明明都写出判断了,却不在获取基址前调用,你在获取基址后才来判断,这不是一般的6。

```

        if (strstr(buf, name)) {

            sscanf(buf, "%lx-%lx %s %lx %*x:%*x %*u %s\n",

                             &base, &end, flags, &ptr, path);


            if (memcmp((void *)base, ELFMAG, SELFMAG) == 0) {

                break;

            } else {

                base= 0;

            }

        }

```

游客
登录 | 注册 方可回帖
返回