這里記錄本人的學(xué)習(xí)的過程,分享給大家.希望大家不要像我一樣走彎路. 我的方法只需要ida,不用sdk,ndk,jre什么一大票東西,很快就能上手 有什么不對之處歡迎指正. ----------------------------------------- 在xda看到受到某人鼓動,心血來潮想寫一個官方rom的解擾器. sony的平板的的官方rom是加密的,直接看不到文件內(nèi)容.心想既然平板自己能解開升級,解密程序一定在板子能找到.但如何跟蹤平板里面的c程序就成了攔路虎. (本人平板系統(tǒng)3.2.1,已root) 以前用過幾次IDA PRO,略懂.于是找了新一點(diǎn)的6.1版本,看看說明,在平板運(yùn)行客戶端就行 讓豌豆莢幫我連好驅(qū)動. 把ida的android_server推送到/data/local/tmp Plain Text code?
進(jìn)shell加運(yùn)行屬性,以root身份運(yùn)行 Plain Text code?
讓adb轉(zhuǎn)發(fā)網(wǎng)絡(luò)數(shù)據(jù) Plain Text code?
啟動ida pro,選擇調(diào)試器remote android debugger,設(shè)置網(wǎng)絡(luò)127.0.0.1端口23946 在debugger菜單選attach 彈出窗口讓我選進(jìn)程 ![]() 然后選擇我的目標(biāo)程序,確定,哈哈,停到程序里了 第一次看到這,讓我興奮不已。 隨后發(fā)現(xiàn)根不能進(jìn)斷點(diǎn)。仔細(xì)看命令窗口才發(fā)現(xiàn) Plain Text code?
慘,這個是怎么回事?一番谷歌,才找到這個 www.woodmann.com/forum/archive/index.php/t-14714.html 大概是說ida6.1帶的調(diào)試服務(wù)端只兼容安卓2.x版本,在我的3.2水土不服,無法附加到指定線程。 好吧,只好另想辦法,不過此時,仔細(xì)瀏覽一下開始停的地方,上下看看,看到我想要跟的so文件的加載地址是0x81000000,記下來,這有用。另外在attach也看到目標(biāo)進(jìn)程的pid,這也有用。 看到debugger選擇里有remote GDB,這提醒我要找個arm版本gdb server.哪里有預(yù)編譯好文件呢。NDK!,下載NDK,不用裝,解壓就能看到在預(yù)編譯文件夾就有。于是又把gdbserver推送到平板運(yùn)行起來,別忘了讓adb轉(zhuǎn)發(fā)你的端口,我這里用1111端口,假設(shè)上面記得pid是1234 Plain Text code?
重新運(yùn)行ida,換debugger,指定端口1111,再attach. 好了我又進(jìn)來了,可是怎么斷點(diǎn)還不停? 哦,前面不是看到我要跟蹤的so地址是0x81000000嘛,ida里rebase到那個地址,再下斷點(diǎn) 哈哈,終于停到我要的地方了。大功告成! 能跟蹤了,看不看得懂代碼意圖,就看你的功力了 ![]() 注,調(diào)試命令,如單步什么的都無效,你只能多下些斷點(diǎn)了。 運(yùn)行到斷點(diǎn)是,斷點(diǎn)所在位置代碼會顯示成別的,影響閱讀,也影響流程圖繪制,這只能克服。 斷點(diǎn)停的太久,系統(tǒng)聽不到進(jìn)程的心跳,就會詢問是否結(jié)束程序,別點(diǎn)哦 至于我的程序,我只看懂流程,不全懂(不是上面的程序)。但是還是照貓畫虎的移植到windows上,完成解碼器。 具體方法,下回再說,嘻嘻 gdbserver我已上傳到下載頻道,還在審核,晚些應(yīng)該能搜索到。 |
|