日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

android 禁用dlsym_Android7.0对dlopen的改变——读取私有.so结果变化

發(fā)布時(shí)間:2024/2/28 Android 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 android 禁用dlsym_Android7.0对dlopen的改变——读取私有.so结果变化 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

兩個(gè)內(nèi)存段

在同一個(gè)進(jìn)程空間中dlopen一個(gè).so文件,理論上在內(nèi)存中是同一片區(qū)域,但實(shí)際調(diào)試中發(fā)現(xiàn)Android7.0(read "/proc/self/maps")中,先后讀同一個(gè).so內(nèi)存中居然出現(xiàn)兩個(gè)段!

這在低版本Android(比如4.x)中不曾出現(xiàn)。

如下一些blog中分析,與Android7.0對(duì)dlopen的改寫(xiě)有關(guān),可能是不同命名空間下讀取結(jié)果不一樣,可能是對(duì)安全性的提升。

NDK 應(yīng)用鏈接至平臺(tái)庫(kù)

7.0對(duì)已加載.so的引用/Hook

由于以上分析,自己的代碼中dlopen的.so文件與目標(biāo)程序中加載的.so在不同內(nèi)存段中,故不能直接Hook,要想方法拿到目標(biāo)程序加載的.so的內(nèi)存地址。

可以用base_addr + offset得到目標(biāo)方法的地址,base_addr通過(guò)查找 “/proc/self/maps” 得到

//這個(gè)方法來(lái)自 android inject 用于獲取地址

void* get_module_base(int pid, const char* module_name)

{

FILE *fp;

long addr = 0;

char *pch;

char filename[32];

char line[1024];

if (pid < 0) {

/* self process */

snprintf(filename, sizeof(filename), "/proc/self/maps", pid);

}

else {

snprintf(filename, sizeof(filename), "/proc/%d/maps", pid);

}

fp = fopen(filename, "r");

if (fp != NULL) {

while (fgets(line, sizeof(line), fp)) {

if (strstr(line, module_name)) {

pch = strtok(line, "-");

addr = strtoul(pch, NULL, 16);

if (addr == 0x8000)

addr = 0;

break;

}

}

fclose(fp);

}

return (void *)addr;

}

參考blog:

總結(jié)

以上是生活随笔為你收集整理的android 禁用dlsym_Android7.0对dlopen的改变——读取私有.so结果变化的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。