Frida反調(diào)試

前言

逆向某app時辕漂,想用frida進行hook分析其執(zhí)行流程,遇到了frida的反調(diào)試讼积。這里記錄一下出現(xiàn)問題的情況和反調(diào)試的實現(xiàn).

環(huán)境

Android8
frida12.11.18
windows10

frida 注入

使用frida -U注入app

frida -U com.shark.tracerpidapp

結果如下

     ____
    / _  |   Frida 12.11.18 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://www.frida.re/docs/home/
Failed to spawn: ambiguous name; it matches: com.shark.tracerpidapp (pid: 9802), com.shark.tracerpidapp (pid: 9847)

這里有兩個com.shark.tracerpidapp名稱的進程

我們直接進入adb查看進程

sailfish:/ # ps -A | grep com.shark
u0_a129       9802   671 2251940  73376 SyS_epoll_wait 72493ca5d0 S com.shark.tracerpidapp
u0_a129       9847  9802 2231280  34092 hrtimer_nanosleep 72493cafd8 S com.shark.tracerpidapp

可以看到確實有兩個進程嘹履,frida分不清你要注入哪個進程所以報出如上錯誤。

我們選擇父進程進行注入

(venv) D:\FridaTest>frida -U 9802
     ____
    / _  |   Frida 12.11.18 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://www.frida.re/docs/home/
Failed to attach: unable to access process with pid 9802 due to system restrictions; try `sudo sysctl kernel.yama.ptrace_scope=0`, or run Frida as root

叫我們用root去執(zhí)行羹蚣,這里是沒有用的。我們到adb看看這個父進程的TracerPid信息就知道了

至于為什么看TracerPid請移步文章TracerPid反調(diào)試

sailfish:/ # cat /proc/9802/status | grep TracerPid
TracerPid:      9847

可以看到父進程已經(jīng)被子進程ATTACH,而frida也依賴于ptrace所以這里肯定注入不進去

解決方案

我們不要讓frida注入脸候,而是使用frida啟動app,使用-f選項,我們告訴Frida注入Zygote并開始啟動應用程序

(venv) D:\FridaTest>frida -U -f com.shark.tracerpidapp
     ____
    / _  |   Frida 12.11.18 - A world-class dynamic instrumentation toolkit
   | (_| |
    > _  |   Commands:
   /_/ |_|       help      -> Displays the help system
   . . . .       object?   -> Display information about 'object'
   . . . .       exit/quit -> Exit
   . . . .
   . . . .   More info at https://www.frida.re/docs/home/
Spawned `com.shark.tracerpidapp`. Use %resume to let the main thread start executing!
[Pixel::com.shark.tracerpidapp]-> %resume

還有一種打補丁的方式运沦,在下面參考中有泵额。這里就不再贅述。

反調(diào)試實現(xiàn)原理

這個反調(diào)試其實就是用了TracerPid反調(diào)試的原理携添,但是在這里有一些不一樣嫁盲。
1:這里是子進程ATTACH父進程
2:在Android8中ptrace(PTRACE_TRACEME, 0, 0, 0); 雖然返回的不是-1但是無法成功

PTRACE_ATTACH

所以我們這里要使用ptrace(PTRACE_ATTACH, parent, 0, 0)來實現(xiàn)。
PTRACE_ATTACH參數(shù)
ptrace(PTRACE_ATTACH,pid)
跟蹤指定pid 進程薪寓。pid表示被跟蹤進程亡资。被跟蹤進程將成為當前進程的子進程,并進入中止狀態(tài)
PTRACE_CONT參數(shù)
ptrace(PTRACE_CONT, pid, 0, signal)
繼續(xù)執(zhí)行向叉。pid表示被跟蹤的子進程锥腻,signal為0則忽略引起調(diào)試進程中止的信號,若不為0則繼續(xù)處理信號signal
先使用PTRACE_ATTACH進行附加母谎,這時候被附加進程會阻塞瘦黑。再使用PTRACE_CONT繼續(xù)執(zhí)行被附加的進程。為了確保PTRACE_CONT能被執(zhí)行我們在PTRACE_ATTACH完后要馬上wait阻塞當前線程奇唤。當附加成功后wait阻塞解除就能執(zhí)行到PTRACE_CONT了

代碼

void readStatus() {
    FILE *fd;
    char filename[128];
    char line[128];
    pid_t pid = syscall(__NR_getpid);
    LOGI("PID : %d", pid);
    sprintf(filename, "/proc/%d/status", pid);//讀取/proc/pid/status中的TracerPid
    pid_t ppid = fork();
    if (ppid == 0) {
        pid_t parent = getppid();
        //parent是被跟蹤的進程 異步操作
        int pt = ptrace(PTRACE_ATTACH, parent, 0, 0);
        int status = 0;
        // ATTACH成功前停下 為了保證下面的PTRACE_CONT操作能夠執(zhí)行到 這樣被ATTACH的進程就不會一直進入中止狀態(tài)
        wait(NULL);
        //讓被調(diào)試的進程重新恢復運行
        if (ptrace(PTRACE_CONT, parent, NULL, 0) < 0) {
            perror("ptrace_cont");
            return;
        }
        if (pt == -1)
            exit(0);
        while (1) {
            sleep(CHECK_TIME);
        }
    } else {
        LOGE("fork error");
    }
}

參考

Android APP破解利器Frida之反調(diào)試對抗
ptrace使用簡介

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末幸斥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子咬扇,更是在濱河造成了極大的恐慌甲葬,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件懈贺,死亡現(xiàn)場離奇詭異经窖,居然都是意外死亡,警方通過查閱死者的電腦和手機梭灿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門画侣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人堡妒,你說我怎么就攤上這事配乱。” “怎么了皮迟?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵搬泥,是天一觀的道長。 經(jīng)常有香客問我万栅,道長佑钾,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任烦粒,我火速辦了婚禮休溶,結果婚禮上代赁,老公的妹妹穿的比我還像新娘。我一直安慰自己兽掰,他們只是感情好芭碍,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著孽尽,像睡著了一般窖壕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上杉女,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天瞻讽,我揣著相機與錄音,去河邊找鬼熏挎。 笑死速勇,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的坎拐。 我是一名探鬼主播烦磁,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼哼勇!你這毒婦竟也來了都伪?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤积担,失蹤者是張志新(化名)和其女友劉穎陨晶,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體帝璧,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡珍逸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了聋溜。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡叭爱,死狀恐怖撮躁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情买雾,我是刑警寧澤把曼,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站漓穿,受9級特大地震影響嗤军,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晃危,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一叙赚、第九天 我趴在偏房一處隱蔽的房頂上張望老客。 院中可真熱鬧,春花似錦震叮、人聲如沸胧砰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽尉间。三九已至,卻和暖如春击罪,著一層夾襖步出監(jiān)牢的瞬間哲嘲,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工媳禁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留眠副,地道東北人。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓损话,卻偏偏與公主長得像侦啸,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子丧枪,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351