使用cydiasubstrate來進行androidnativehook
cydia不僅可以hook java程式碼,同樣可以hook native程式碼,下面舉一個例子來進行android native hook
我是在網上找到的supermathhook這個專案,在他基礎上修改的,本來是為了倉促應對阿里的ctf
這個專案位置:
這個專案是用來hook jni 程式碼的,而我是用來hook dvmDexFileOpenPartial這個函式的,所以必須使用
Mshookfunction這個函式,這個函式在libsubstrate.so中,自己去官網下載就可以了。
接下來將如何hook。
首先:
- 指明要hook的lib :
MSConfig(MSFilterLibrary,”/system/lib/libdvm.so”)
-
在初始化的時候進行hook,具體如下:
MSInitialize
{
__android_log_print(ANDROID_LOG_ERROR, TAG, “Substrate initialized.”);
MSImageRef image;
image = MSGetImageByName(“/system/lib/libdvm.so”); 載入lib
if (image != NULL)
{
//注意這個是個c++函式,可以通過objdump來獲取
void * dexload=MSFindSymbol(image,”_Z21dvmDexFileOpenPartialPKviPP6DvmDex”);
if(dexload==NULL)
{
LOGD(“error find _Z21dvmDexFileOpenPartialPKviPP6DvmDex “);
}
else{
MSHookFunction(dexload,(void*)&mydvmdexfileopen,(void **)&olddexfileopen);·
}
}
else{
LOGD(“ERROR FIND LIBDVM”);
}
}
相關其他的函式:
int (* olddexfileopen)(const void * addr,int len,void ** dvmdex); 保留原來的地址
int mydvmdexfileopen(const void * addr,int len,void ** dvmdex) 新的函式
{
LOGD(“call my dvm dex!!:%d”,getpid());
{ //write to file
char buf[200];
sprintf(buf,”/sdcard/dex.%d”,random()); 匯出dex檔案
FILE * f=fopen(buf,”wb”);
if(!f)
{
LOGD(“error open sdcard file to write”);
}
else{
fwrite(addr,1,len,f);
fclose(f);
}
}
return olddexfileopen(addr,len,dvmdex); 進行原來的呼叫,不影響程式執行
}
相關文章
- 使用索引掃描來進行排序索引排序
- 在 Django 中使用 Celery 來進行耗時操作Django
- 使用Dstat來進行Linux綜合效能診斷Linux
- 使用版本控制來進行翻譯協作
- 使用aop來監控方法進行增強處理
- oracle中使用plsql來進行平面檔案解除安裝OracleSQL
- 使用DataPump的Sample引數來進行資料抽樣
- vue 中使用driver.js來進行頁面分步引導VueJS
- 使用Redis進行限流Redis
- 深入學習rollup來進行打包
- 使用Microsoft的IoC框架:Unity來對.NET應用進行解耦ROS框架Unity解耦
- 使用C++11新特性來實現RAII進行資源管理C++AI
- VS2015 使用Xunit來進行單元測試
- 使用pprof進行效能分析
- 使用gerrit進行code reviewView
- 使用sqlmap進行sql注入SQL
- 使用 useSeoMeta 進行 SEO 配置
- linux下如何使用檔案來模擬硬碟進行ASM測試Linux硬碟ASM
- 大家平時都喜歡使用哪套cms來進行開發呢?
- 【CSS模組化之路3】 使用?styled-components來進行react開發CSSReact
- 【PWA學習與實踐】(7)使用Notification API來進行訊息提醒API
- 「Js」物件按照鍵名來進行排序JS物件排序
- 業務需求:使用遊標對查詢出來的記錄進行更新過程中,不允許其它人進行更改
- 在vue專案中 使用driver.js來進行頁面分步引導VueJS
- django不使用序列化器來進行查詢結果序列化Django
- EBS R12.1.2下使用admrgpch來merge patch進行applyAPP
- 對請求來源進行白名單限制
- nlssort可以用來進行語言排序排序
- 使用 HTTPie 進行 API 測試HTTPAPI
- 使用PostMan進行API測試PostmanAPI
- 使用Devstack進行開發dev
- 使用容器Docker進行開發Docker
- 使用 ngrok 進行內網穿透內網穿透
- 使用nginx進行負載均衡Nginx負載
- 使用 Swift 進行 JSON 解析SwiftJSON
- 使用shell進行日誌分析
- 使用 Devstack 進行開發dev
- 使用Project進行專案管理Project專案管理