簡介
每個App的用于程式都是通過父行程zygote進行fork出來的子行程,所以zygote也是所有app的父行程,
那么對于zygote行程可以用于檢測判斷app應該是否處于被除錯狀態,
檢測父行程原理
有的時候不使用apk附加除錯的方法進行逆向,而是寫一個.out可執行檔案直接加載so進行
除錯,這樣程式的父行程名和正常啟動apk的父行程名是不一樣的,
實驗測驗
1、正常啟動的apk程式:父行程是zygote
2、除錯啟動的apk程式:在AS中用LLDB除錯發現父行程還是zygote
3、附加除錯的apk程式:父行程是zygote
4、vs遠程除錯 用可執行檔案加載so:父行程名為gdbserver
實驗結論:父行程名非zygote的,判定為除錯狀態
代碼實作
int CheckApkParents()
{
// 設定buf
char strPpidCmdline[0x100]={0};
snprintf(strPpidCmdline, sizeof(strPpidCmdline), "/proc/%d/cmdl ine", getppid());
// 呼叫系統的open函式進行打開檔案
int file=open(strPpidCmdline,O_RDONLY); if(file<0)
{
//打開失敗,
LOGA("CheckApkParents open錯誤!\n");
return -1;
}
// 檔案內容讀入記憶體
memset(strPpidCmdline,0,sizeof(strPpidCmdline));
//呼叫系統read函式進行讀記憶體操作
ssize_t ret=read(file,strPpidCmdline,sizeof(strPpidCmdline));
if(-1==ret)
{
//讀取記憶體資料失敗
LOGA("CheckApkParents read錯誤!\n");
return -1;
}
// 沒找到回傳0
char sRet=strstr(strPpidCmdline,"zygote");
if(NULL==sRet)
{
// 執行到這里,判定為除錯狀態
LOGA("父行程cmdline沒有zygote子串!\n");
return 0;
}
return 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/292074.html
標籤:其他
