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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

利用Cydia Substrate进行Android HOOK(2)

發布時間:2025/3/15 Android 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用Cydia Substrate进行Android HOOK(2) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ?在前面關于Substrate的介紹中我們已經講了用Substrate hook java代碼,現在我們講下怎么用它hook native代碼。hook native代碼我們需要編寫Substrate extensions,它跟native庫一樣被視作標準的android包的一部分, 將作為一個共享庫被編譯 (使用復合擴展名.cy.so)。

一、相關API

(1)MSConfig
名稱描述
Filter:Executable開發者試圖hook的可執行文件的完整路徑。一般為zygote, "/system/bin/app_process"。
Filter:Library開發者試圖hook的lib庫的名稱,比如hook __android_log, 則指定 "liblog.so".
如: MSConfig(MSFilterExecutable, "/system/bin/app_process") MSConfig(MSFilterLibrary, "liblog.so")

(2)void MSHookFunction(void *symbol, void *hook, void **old);

參數描述
symbol??被替換代碼的地址,一般是一個函數
hookThe address of an ABI-compatible replacement for the code at the address referenced by?symbol.
old指向函數指針的指針,用來調用原函數的實現。如果不需要對原函數進行處理則為NULL
示例: 1 void *(*oldConnect)(int, const sockaddr *, socklen_t); 2 3 void *newConnect( 4 int socket, const sockaddr *address, socklen_t length 5 ) { 6 if (address->sa_family == AF_INET) { 7 sockaddr_in *address_in = address; 8 if (address_in->sin_port == htons(6667)) { 9 sockaddr_in copy = *address_in; 10 address_in->sin_port = htons(7001); 11 return oldConnect(socket, &copy, length); 12 } 13 } 14 15 return oldConnect(socket, address, length); 16 } 17 18 MSHookFunction(&connect, &newConnect, &oldConnect);

(3)void *MSFindSymbol(MSImageRef image, const char *name);

參數描述
image指定一個有效的image引用(通過調用MSGetImageByName返回的結果)。如果為NULL,則會搜索所有image
name待查找的原始鏡像符號的名稱。這并非如dlopen所加載的高級符號,它可能需要以下劃線為前綴或其他特定平臺的編碼。
return符號的地址(調整為ARM/Thumb類型),如果不能定位符號則返回NULL
示例: 1 MSImageRef image; 2 image = MSGetImageByName("/usr/lib/libSystem.B.dylib"); 3 4 void *(*palloc)(size_t); 5 palloc = (void *(*)(size_t)) MSFindSymbol(image, "_malloc"); 6 7 void *data = (*palloc)(1024); 8 free(data);

(4)MSImageRef MSGetImageByName(const char *file);

參數描述
file根據so或者動態庫的完整路徑加載image
return可以被其它API使用的image引用,如果image沒有加載則為NULL
示例: 1 MSImageRef image; 2 image = MSGetImageByName("/system/lib/libc.so"); 3 if (image != NULL) 4 /* image is loaded */;

二、使用示例

下面以前一篇過簽名驗證的hook代碼為例講解native hook的代碼編寫過程:

1.創建android native工程HookVerify,so層hook并不需要界面(作為Cydia Substrate的擴展模塊),所以在新建工程時無需建activity。接下來在工程目錄下新建jni文件夾,并將libsubstrate.so,libsubstrate-dvm.so,substrate.h三個文件拷貝至jni文件夾下。 在jni目錄下創建HookVerify.cy.cpp文件。

2.配置Manifest文件 需要添加權限:<uses-permission android:name="cydia.permission.SUBSTRATE"/> 由于我們只使用native code,將android:hasCode設為false。 3.Android.mk文件編寫: LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS) LOCAL_MODULE := substrate LOCAL_SRC_FILES := libsubstrate.so include $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS) LOCAL_MODULE := substrate-dvm LOCAL_SRC_FILES := libsubstrate-dvm.so include $(PREBUILT_SHARED_LIBRARY)include $(CLEAR_VARS) LOCAL_MODULE := HookVerify #一定要有.cy作后綴 LOCAL_SRC_FILES := HookVerify.cy.cpp LOCAL_LDLIBS := -llog LOCAL_ARM_MODE := arm LOCAL_LDLIBS += -L$(LOCAL_PATH) -lsubstrate-dvm -lsubstrate include $(BUILD_SHARED_LIBRARY) 4.HookVerify.cy.cpp代碼: 1 #include <jni.h> 2 #include "substrate.h" 3 #include <android/log.h> 4 #include <unistd.h> 5 #include <stdio.h> 6 #include <fcntl.h> 7 #include <sys/types.h> 8 #include <string.h> 9 #include <sys/stat.h> 10 #define TAG "HOOKDEMO" 11 #define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, TAG, __VA_ARGS__) 12 #define LOGI(...) __android_log_print(ANDROID_LOG_INFO, TAG, __VA_ARGS__) 13 char* AppName = NULL; 14 //指定要hook的lib 庫: 15 MSConfig(MSFilterLibrary, "/system/lib/libdvm.so"); 16 //保留原來的地址: 17 void *(*oldUnzOpen64)(const char* filepath); 18 //替換的函數 19 void *newUnzOpen64(const char* filepath){ 20 return oldUnzOpen64("/sdcard/myapk.apk"); 21 } 22 //Hook dvmLoadNativeCode 23 bool (*_dvmLoadNativeCode)(char* pathName, void* classLoader, char** detail); 24 bool My_dvmLoadNativeCode(char* pathName, void* classLoader, char** detail){ 25 bool b_Result = _dvmLoadNativeCode(pathName,classLoader,detail); //進行原來的調用,不影響程序運行 26 //LOGD("dvmLoadNativeCode AppName:%s", AppName); 27 if(strstr(pathName,"AppVerify") != NULL){ 28 LOGD("dvmLoadNativeCode Find Hook"); 29 MSImageRef image = MSGetImageByName(pathName); 30 if(image != NULL){ 31 void* mFun = MSFindSymbol(image, "unzOpen64"); 32 //開始Hook fork 33 if(mFun != NULL){ 34 LOGD("dvmLoadNativeCode Hook"); 35 //MSHookFunction(mFun,(void*)&My_fork,(void**)&_fork); 36             MSHookFunction(mFun, (void*)&newUnzOpen64, (void**)&oldUnzOpen64); 37 } 38 } 39 } 40 return b_Result; 41 } 42 //在初始化的時候進行hook,具體如下: 43 //Substrate entry point 44 MSInitialize{ 45 __android_log_print(ANDROID_LOG_ERROR, TAG, "Substrate initialized."); 46 MSImageRef image; 47 image = MSGetImageByName("/system/lib/libdvm.so"); //載入lib 48 if (image != NULL) 49 { 50 //注意這個是個c++函數,可以通過objdump來獲取 51 void * dvmload = MSFindSymbol(image, "_Z17dvmLoadNativeCodePKcP6ObjectPPc"); 52 if(dvmload == NULL) 53 { 54 LOGD("error find dvmLoadNativeCode "); 55 } 56 else{ 57 MSHookFunction(dvmload,(void*)&My_dvmLoadNativeCode,(void **)&_dvmLoadNativeCode); 58 } 59 } 60 else{ 61 LOGD("ERROR FIND LIBDVM"); 62 } 63 }

這樣就完成了hook代碼的編寫。安裝運行就行了。


原文地址:?http://www.cnblogs.com/goodhacker/p/4912904.html

總結

以上是生活随笔為你收集整理的利用Cydia Substrate进行Android HOOK(2)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 又爽又黄视频 | 久久久久久久久久久久久女国产乱 | 亚洲国产精品久久人人爱 | 51妺嘿嘿午夜福利 | 亚洲品质自拍 | 在线观看污视频网站 | 91精品国产乱码久久久张津瑜 | 日韩美一区二区三区 | 久久这里只有精品9 | 性欧美video另类hd尤物 | 武林美妇肉伦娇喘呻吟 | 日本少妇bbb | 国产精品外围 | 亚洲AV无码乱码国产精品牛牛 | 一级黄色性视频 | 久操伊人网 | 色妞在线 | 久久伊人在| 插插操操 | 第一福利在线视频 | a级一片| 国产精品情侣呻吟对白视频 | 日韩精品电影在线观看 | 日本三级吃奶头添泬无码苍井空 | a毛片大片| 午夜伦理影院 | 午夜寂寞视频 | 精品一区二区中文字幕 | 看一级黄色 | 韩国三级在线看 | 久久久久网站 | 美女爽爽爽 | 日韩精品久久久久久久 | 夜夜操av | av黄色影院| 亚洲欧美日韩动漫 | 国产一区日韩一区 | 亚洲国产无码精品 | 成人性免费视频 | 国产三级一区 | 中文字幕人成人乱码亚洲电影 | 日韩毛片免费观看 | 久久久精品一区二区 | 午夜精品久久久久久久99老熟妇 | 午夜精品在线观看 | 国产日韩欧美视频在线 | 亚洲成人麻豆 | 色老大影院 | 亚洲欧美高清 | 国产精品污www一区二区三区 | 在线高清观看免费观看 | 四虎永久在线精品免费网址 | 青青草久久伊人 | 国产 日韩 欧美 制服丝袜 | 国产亚洲精品久久久久久777 | 国产情趣视频 | 欧美一区二区三区 | 人成午夜 | www.久久久久久久 | 91人妻一区二区三区蜜臀 | 超碰国产97 | 日日夜夜精品免费 | 欧美在线视频播放 | 日韩有码第一页 | 免费国产黄色网址 | 天天cao| 欧美视频日韩 | 五月综合久久 | 国产精品视频99 | 国产精品国产三级国产aⅴ9色 | 79日本xxxxxxxxx18 婷婷亚洲一区 | 日本大尺度激情做爰hd | 国产精品99久久久久 | 看了下面会湿的视频 | 美女羞羞动态图 | 久久久久久免费精品 | 黄瓜视频污在线观看 | 人妖被c到高潮欧美gay | 一区二区 亚洲 | 老女人做爰全过程免费的视频 | 欧美日韩中文在线视频 | 91偷拍精品一区二区三区 | 五月婷婷丁香 | 精品h | 成片免费观看视频大全 | 免费的黄色片 | 国产超碰| 欧美精品成人久久 | 国产成人亚洲精品无码h在线 | 日本少妇高潮 | 久插视频 | 老司机深夜网站 | 一级a毛片免费观看久久精品 | 中文成人无字幕乱码精品区 | 九九热免费在线视频 | 欧美精品18videosex性欧美 | jizz一区 | 涩涩网站免费 | 无码人妻h动漫 |