1、背景介紹 做APP開發(fā)一年多的時(shí)候,我突然對(duì)破解有了濃厚的興趣,看了些資料,自己也動(dòng)手寫了寫,老早之前有這樣一篇文章,一直沒(méi)空拿出來(lái)分享一下。最近又重新整理了一下,感覺寫得還是比較詳細(xì)的,拿出來(lái)和大家分享探討一下。 2、工具和環(huán)境工具:IDA Pro6.1,C32arm,apktool 環(huán)境:win7,jdk1.6文件:crackme02.apk上面的工具和文件大家自己準(zhǔn)備一下,最后的crackme02.apk這個(gè)文件我會(huì)上傳一份到CSDN讓大家下載,好與我的文件保持一致。 實(shí)際上本文也是《Android軟件安全與逆向分析》一書中的總結(jié),大家也可以找這本書看看。 3、加載apk到IDA首先使用zip解壓縮文件取出crackme02.apk文件中的classes.dex文件,然后打開IDA Pro編譯器,將程序拖入到IDA Pro編譯器中,會(huì)有一個(gè)彈窗“Load a new file0”對(duì)話框,直接點(diǎn)擊OK按鈕。(注意選擇Android文件) 這時(shí),程序會(huì)進(jìn)入反匯編的界面,稍等一下,IDA Pro分析完classes.dex后會(huì)出現(xiàn)如下圖所示的情形:4、定位資源選項(xiàng)按照破解思路,我們找到資源文件中的string.xml文件,可以看到對(duì)應(yīng)的字符串為unsuccessed。然后我們使用apktool反編譯crackme02.apk文件,從smali文件的R文件中找到R$string.smali文件中的unsuccessed所對(duì)應(yīng)的id值,如下圖所示,我們得到的結(jié)果是:0x7f05000c 當(dāng)找到字符串對(duì)應(yīng)的id值之后,我們回到IDA Pro界面上來(lái),在IDA的主窗口按下Alt T快捷鍵,會(huì)彈出字符串搜索的窗口,我們?cè)谠摯翱谥休斎雱偛耪业降膇d值0x7f05000c,如圖所示: 然后會(huì)看到鼠標(biāo)定位到了0x7f05000c所對(duì)應(yīng)的地方。這時(shí)候,我們向上查找最近的判斷語(yǔ)句,很快會(huì)定位到CODE:0002CDD2行的if-nez。5、查找指令代碼我們點(diǎn)擊IDA Pro主界面上的“Hex View-A”選項(xiàng)卡,發(fā)現(xiàn)這行代碼的指令為“39 00 0f 00”第一個(gè)字節(jié)39為if-nez的指令操作碼,我們只需將其改為if-eqz的指令碼就行了。查表如圖所示: 6、修改關(guān)閉IDA Pro,在彈出的Save datebase對(duì)話框中勾選“DON'T SAVE the database”然后點(diǎn)擊OK退出程序。 使用十六進(jìn)制編輯工具打開classes.dex文件,本處使用C32asm,定位到0X2CDD2處,修改39為38,保存退出。7、簽名apk程序在安裝的時(shí)候會(huì)調(diào)用dexopt對(duì)dex進(jìn)行驗(yàn)證與優(yōu)化,dex文件的DexHeader頭的checksum字段標(biāo)識(shí)了dex文件的合法性。當(dāng)我們修改了classes.dex文件之后,dex文件在驗(yàn)證時(shí)計(jì)算checksum會(huì)失敗,這樣我們需要重新計(jì)算并寫回checksum的值。 最后我們將修改后的classes.dex文件壓縮到剛才解壓的zip包中,然后刪除MAIN-INF文件,使用Auto-sign簽名文件對(duì)它簽名即可。8、測(cè)試測(cè)試通過(guò)! |
|
來(lái)自: 雷詩(shī)人 > 《電腦技術(shù)文件夾》