http://www.itdecent.cn/p/a054652db4e3
先說,出于好玩,破解了某app
主要反編譯app,分析出數(shù)據(jù)加密代碼,再拿到底層加密動(dòng)態(tài)庫,再繞過底層動(dòng)態(tài)庫的簽名驗(yàn)證,最終通過自寫app調(diào)用動(dòng)態(tài)庫,并獲得加密,解密數(shù)據(jù)。
1、反編譯app:
這一步就不細(xì)講了,太多方法,網(wǎng)上自己搜索……
2、分析代碼:
根據(jù)抓包獲取接口關(guān)鍵詞,到反編譯源碼中查詢,并分析代碼,
發(fā)現(xiàn)關(guān)鍵代碼函數(shù):
Java_com_wuba_aes_Exec_init
Java_com_wuba_aes_Exec_decryptPhoneData
這里居然調(diào)用了底層動(dòng)態(tài)庫:xxx.so?
……我x,還好有大招
3、動(dòng)態(tài)庫破解:
來來來,采用大招了,哈哈:下載ida,反編譯xxx.so
找到這兩個(gè)函數(shù)的匯編代碼,并雙擊定位,按下F5反匯編,能大概看到一些源碼
然后分析加密過程,查找加密秘鑰,可能學(xué)術(shù)不精,無法找到,不能找到加密的具體東西
……我xxx,還好有大招
4、嘗試動(dòng)態(tài)庫xxx.so調(diào)用:
嘗試自己建一個(gè)Android工程,調(diào)用xxx.so動(dòng)態(tài)庫,發(fā)現(xiàn)調(diào)用成功,但是解密數(shù)據(jù)不對(duì)……是不是有驗(yàn)證??
5、動(dòng)態(tài)庫驗(yàn)證破解:
分析發(fā)現(xiàn)解密函數(shù)中,的確是有一些驗(yàn)證的,如:
if ( isOurApk == 1 )
{
……
}
這時(shí)候我們就要跳過這個(gè)這個(gè)判斷,把1改為0可好,哈哈,這樣跳過這些驗(yàn)證,這樣我們自己建立的工程就可以來調(diào)用這些接口了。
6、修改.so文件:
a.在ida中左側(cè)雙擊這個(gè)函數(shù),定位到ida-view a 的匯編視圖(F5可以看到源碼),然后在匯編視圖定位中的匯編代碼中,發(fā)現(xiàn)有一個(gè)cmp指令,其實(shí)就是這個(gè)if條件,然后記下地址
b.然后在ida的hex-view(二進(jìn)制視圖)中找到這個(gè)地址(在 匯編視圖 中,鼠標(biāo)定位到cmp這一行,然后選擇hex-view,可以看到鼠標(biāo)剛好定位到這行代碼的地址,反正就是想辦法找到這行代碼的地址),然后發(fā)現(xiàn)這樣的二進(jìn)制: 01 28,然后鼠標(biāo)右鍵,修改01為00,然后鼠標(biāo)右鍵保存
c.然后再在ida的匯編視圖中,定位這個(gè)函數(shù),再按F5,看看源碼,以及生效的效果。直到改對(duì)為止。
d.在ida中這樣的修改,是不會(huì)真正修改到動(dòng)態(tài)庫的,需要用notepad中的hex-editor插件(或者其他工具,如ue)打開這個(gè).so文件,并找到這個(gè)地址 修改,然后保存,這樣就生效了
7、最后再用自己的工程,則可以調(diào)用該動(dòng)態(tài)庫,并直接調(diào)用里面的函數(shù)了。
后面有機(jī)會(huì),再完善該文章,或者上傳代碼!