android中SO文件动态调试
0X00 前言
為了增加APK文件的破解難度,很多比較重要的功能都是通過(guò)native實(shí)現(xiàn),與反編譯不同的是,java的偽代碼可以很清楚的得到程序的邏輯關(guān)系,但是so文件反編譯得到的是匯編代碼,使用ida這樣的神器可以得到c的偽代碼。使用ida實(shí)現(xiàn)so的動(dòng)態(tài)調(diào)試,可以在關(guān)鍵地方下斷點(diǎn),對(duì)于一些變換,比如有的時(shí)候輸入的內(nèi)容與經(jīng)過(guò)一些列的變換后的結(jié)果比較,這個(gè)時(shí)候我們不需要關(guān)心中間的變換過(guò)程,在動(dòng)態(tài)調(diào)試的時(shí)候,在比較的地方下個(gè)斷點(diǎn),然后在內(nèi)存中查看此時(shí)比較的常量。正好最近做了CTF的一個(gè)re。順便熟悉下ida的動(dòng)態(tài)調(diào)試步驟。
0x01 APK邏輯的簡(jiǎn)單分析
在apk的manifest文件里,我們得到apk的入口avtivity。包括包名和主類(lèi)。
通過(guò)一步步分析,得知:用戶輸入 用戶名和 密碼, 其中用戶名必須是?<string name=”username”>secl-007</string> ,而密碼的判斷邏輯是調(diào)用了native函數(shù)(Java_com_ssctf_seclreg_Seclo0o_getpl )去判斷,這個(gè)時(shí)候用ida靜態(tài)分析,打開(kāi)apk加載的so文件,通過(guò)分析,我們發(fā)現(xiàn)對(duì)于輸入的密碼沒(méi)有進(jìn)行任何處理,只是判斷輸入密碼的長(zhǎng)度,如果長(zhǎng)度是39,然后和一個(gè)常量做比較,是否正確。而這個(gè)常量在運(yùn)行過(guò)程經(jīng)過(guò)一些列的變化,因此我們不需要關(guān)心變化的過(guò)程。有兩個(gè)方法:
0x02 IDA動(dòng)態(tài)調(diào)試SO
關(guān)于IDA動(dòng)態(tài)調(diào)試步驟,首先你的手機(jī)需要ROOT。
這個(gè)時(shí)候在APK輸入,然后程序運(yùn)行到我們?cè)O(shè)置斷點(diǎn)的地方,
然后我們?cè)跀?shù)據(jù)窗口里查看數(shù)據(jù),得到FLAG:)
原文地址:?https://www.ijiza.cn/2016/03/03/android%E4%B8%ADso%E6%96%87%E4%BB%B6%E5%8A%A8%E6%80%81%E8%B0%83%E8%AF%95/總結(jié)
以上是生活随笔為你收集整理的android中SO文件动态调试的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Xposed如何实现类中函数的调用
- 下一篇: Android应用安全之Content