1. 程式人生 > >ida debug android so

ida debug android so

這裡記錄本人的學習的過程,分享給大家.希望大家不要像我一樣走彎路.
我的方法只需要ida,不用sdk,ndk,jre什麼一大票東西,很快就能上手
有什麼不對之處歡迎指正.
-----------------------------------------
在xda看到受到某人鼓動,心血來潮想寫一個官方rom的解擾器.
sony的平板的的官方rom是加密的,直接看不到檔案內容.心想既然平板自己能解開升級,解密程式一定在板子能找到.但如何跟蹤平板裡面的c程式就成了攔路虎.
(本人平板系統3.2.1,已root)

以前用過幾次IDA PRO,略懂.於是找了新一點的6.1版本,看看說明,在平板執行客戶端就行
讓豌豆莢幫我連好驅動.
把ida的android_server推送到/data/local/tmp
Plain Text code
?
1 adb push android data/local/tmp


進shell加執行屬性,以root身份執行
Plain Text code?
1 2 3 4 5 6 adb shell su cd data/local/tmp chown 0.0 * chmod 777 * ./android_server



讓adb轉發網路資料
Plain Text code?
1 adb forward tcp:23946 tcp:23946



啟動ida pro,選擇偵錯程式remote android debugger,設定網路127.0.0.1埠23946
在debugger選單選attach

彈出視窗讓我選程序


然後選擇我的目標程式,確定,哈哈,停到程式裡了

第一次看到這,讓我興奮不已。
隨後發現根不能進斷點。仔細看命令窗口才發現
Plain Text code?
1 2 3 4 Could not set the shlib bpt, shared object events will not be handled B0001000: loaded /system/bin/linker 8000: process /system/bin/app_process has started (pid=4473) Debugger: attached to process /system/bin/app_process (pid=4473)


慘,這個是怎麼回事?一番谷歌,才找到這個
www.woodmann.com/forum/archive/index.php/t-14714.html
大概是說ida6.1帶的除錯服務端只相容安卓2.x版本,在我的3.2水土不服,無法附加到指定執行緒。
好吧,只好另想辦法,不過此時,仔細瀏覽一下開始停的地方,上下看看,看到我想要跟的so檔案的載入地址是0x81000000,記下來,這有用。另外在attach也看到目標程序的pid,這也有用。

看到debugger選擇裡有remote GDB,這提醒我要找個arm版本gdb server.哪裡有預編譯好檔案呢。NDK!,下載NDK,不用裝,解壓就能看到在預編譯資料夾就有。於是又把gdbserver推送到平板執行起來,別忘了讓adb轉發你的埠,我這裡用1111埠,假設上面記得pid是1234
Plain Text code?
1 2 3 4 adn forward rcp:1111 tcp1111 adb shell su ./gdbserver --attach :1111 1234 

重新執行ida,換debugger,指定埠1111,再attach.

好了我又進來了,可是怎麼斷點還不停?
哦,前面不是看到我要跟蹤的so地址是0x81000000嘛,ida裡rebase到那個地址,再下斷點

哈哈,終於停到我要的地方了。大功告成!
能跟蹤了,看不看得懂程式碼意圖,就看你的功力了 




注,除錯命令,如單步什麼的都無效,你只能多下些斷點了。
執行到斷點是,斷點所在位置程式碼會顯示成別的,影響閱讀,也影響流程圖繪製,這隻能克服。
斷點停的太久,系統聽不到程序的心跳,就會詢問是否結束程式,別點哦

至於我的程式,我只看懂流程,不全懂(不是上面的程式)。但是還是照貓畫虎的移植到windows上,完成解碼器。
具體方法,下回再說,嘻嘻

gdbserver我已上傳到下載頻道,還在稽核,晚些應該能搜尋到。