溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

發(fā)布時(shí)間:2021-12-24 09:44:54 來(lái)源:億速云 閱讀:1417 作者:柒染 欄目:網(wǎng)絡(luò)安全

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

首先我們需要獲取apk里面的腳本資源,可以直接用360好壓解壓縮apk安裝包,會(huì)得到如下目錄:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key
        其中,lib目錄含有我們需要調(diào)試的so庫(kù)文件,文件名一般是libcocos2dlua.so或帶有cocos字樣,當(dāng)然也有例外,我們需要破解的這個(gè)app就有些不一樣,名字為libgame.so,不論名字如何變化,拖到idaPro中便知是否用的cocos2dlua框架了。assets目錄中含有l(wèi)ua加密腳本及資源。

        動(dòng)態(tài)調(diào)試app,需要準(zhǔn)備app運(yùn)行環(huán)境,真機(jī)或模擬器,不建議用模擬器,坑太多,我試用過(guò)幾個(gè)模擬器(雷電、天天、mumu)進(jìn)行調(diào)試環(huán)境的搭建幾乎都是失敗的,但是安卓官方模擬器是可以的(有幾次是成功的,也有失敗的),需要安裝Android-sdk、Android-ndk,但是速度非常慢,所以建議直接上真機(jī),真機(jī)需要root權(quán)限。

        接下來(lái),需要下載adb  Android調(diào)試工具 并將其加入path變量,手機(jī)通過(guò)usb連接后,可通過(guò)adb命令操作手機(jī),打開(kāi)cmd,輸入adb即可看到幫助命令:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

        找到電腦idaPro的安裝路徑中android_server文件,用adb將其拷貝至手機(jī)并賦權(quán):

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

        如果程序運(yùn)行后附加進(jìn)程調(diào)式,需要手機(jī)端運(yùn)行idaPro的 android_server,并 用adb將端口映射至電腦,如果電腦與手機(jī)在同一局域網(wǎng)內(nèi),則可不用映射。如下圖:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key
   手機(jī)端運(yùn)行大神app :

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

idaPro遠(yuǎn)程調(diào)試附加進(jìn)程:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

如果是局域網(wǎng)內(nèi)調(diào)試,沒(méi)有用到adb  forward映射,則將ip地址換成你手機(jī)ip地址:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key雙擊選中線(xiàn)程進(jìn)行調(diào)試:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key然后,在模塊視圖中選擇要調(diào)試下斷的模塊,這里是libgame.so,下面的程序內(nèi)存視圖可以選擇與上面的反匯編視圖同步:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key


LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key       有的app破解時(shí),需要在程序入口處就調(diào)試,則要多做一些操作,網(wǎng)上大多是先需要以下幾個(gè)步驟:首先確保apk內(nèi)的mainframexml文件的application節(jié)點(diǎn)的android:debuggable屬性值為1,這就需要將apk先反編,修改值之后再編譯進(jìn)去,并找到app的包名及入口函數(shù),以上這些可以用有現(xiàn)成的工具,當(dāng)也可以用命令(eg:查看aapt dump xmltree dashen.apk AndroidManifest.xml >manifest.xml  回編譯:java -jar apktool.jar b -d out -o dashen.apk);之后需要以調(diào)試模式開(kāi)啟app(adb shell am start -D -ncom.yaotong.crackme/.MainActivity),手機(jī)會(huì)出現(xiàn)調(diào)試界面:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

        此時(shí),程序停在程序入口,之后用idapro附加調(diào)試,然后用jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,port=8700通知程序繼續(xù)運(yùn)行,idapro這邊就可以繼續(xù)調(diào)試了。

        這里提供另一種方法,將Android 根目錄下的default.prop的ro.debuggable設(shè)置為1(getprop、setprop),強(qiáng)制所有app都可以進(jìn)行調(diào)試,這樣就不用修改app并重新打包了。這里要說(shuō)明一點(diǎn),jdbconnect失敗時(shí),如圖所示:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        有說(shuō)是apk android:debuggable屬性的原因,我這邊測(cè)試,其真正的原因應(yīng)該是沒(méi)有開(kāi)啟DDMS(DalvikDebug Monitor Service)虛擬機(jī)調(diào)試監(jiān)控服務(wù),端口號(hào)8700是其默認(rèn)服務(wù)端口號(hào),服務(wù)不開(kāi)當(dāng)然連不上VM,所以需要開(kāi)啟DDMS,Android sdk tools目錄下有開(kāi)啟DDMS的腳本,我們打開(kāi)DDMS

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        我們要調(diào)試的進(jìn)程端口號(hào)有8626/8700,所以我們用jdb連接這兩個(gè)任一端口都是可以的。

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        調(diào)試過(guò)程中,還需要注意一點(diǎn),要關(guān)閉SELinux,setenforce 0

        idaPro調(diào)試就說(shuō)到這里,接下來(lái)我們利用idaPro破解大神app,大神app是基于cocos2dlua,cocos2dlua用的xxtea加密,我們可以下載源碼,用vs打開(kāi):

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        我們?cè)趘s中,Shift+F12追蹤xxtea_decrypt的調(diào)用:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        可以看到一個(gè)是在luaLoadChunksFromZIP中:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key       一個(gè)是在luaLoadBuffer中:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        從函數(shù)名,我們應(yīng)該可以猜到一個(gè)是在解壓zip文件是進(jìn)行解密,一個(gè)是在解壓字符串buffer是解密,這個(gè)我們不討論,我們只須在這兩個(gè)函數(shù)下斷,在函數(shù)調(diào)用xxtea_decrypt時(shí)即可破解xxtea解密用的key,現(xiàn)在我們已經(jīng)知道破解大神app的關(guān)鍵了,就是xxtea_decrypt及直接相關(guān)的luaLoadBuffer、luaLoadChunksFromZIP函數(shù)。

        接下來(lái),我們來(lái)看大神apk,解壓大神apk,將lib目錄下的libgame.so拖拽至idaPro打開(kāi):

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        一般cocos2dluaapp不對(duì)xxtea加密強(qiáng)化的話(huà),有一種取巧獲取xxtea解密key的方法,按照網(wǎng)上說(shuō)的,直接打開(kāi)加密的lua文件,得到sign,然后打開(kāi)idaPro的string視圖,搜索sign,雙擊進(jìn)去,在sign附近會(huì)有xxtea的key,可以試出來(lái),網(wǎng)上有詳細(xì)的步驟,在此我們就不再多述。我們破解的大神app是經(jīng)過(guò)安全優(yōu)化的,上面的方法不適用。

        繼續(xù),剛才我們看cocos2d源碼了解到破解大神app的突破口函數(shù)xxtea_decrypt及直接相關(guān)的luaLoadBuffer、luaLoadChunksFromZIP,我們?cè)趇daPro中查看函數(shù)導(dǎo)出表,確認(rèn)函數(shù)名是否與源碼中一致。導(dǎo)出表如下:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        沒(méi)有與xxtea相關(guān)的導(dǎo)出函數(shù)。我們?cè)偎袻oadChunk:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        發(fā)現(xiàn)也沒(méi)有,進(jìn)一步確認(rèn)是經(jīng)過(guò)安全優(yōu)化的,我們?cè)趤?lái)看loadbuf:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        我們看到有三個(gè),很明顯第一個(gè)與我們?cè)谠创a中看到的那個(gè)長(zhǎng)得像:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key
LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        我們?cè)谇懊媪私獾?,luaLoadBuffer這個(gè)函數(shù)會(huì)調(diào)用xxtea_decrypt來(lái)解密腳本,雖然這個(gè)app經(jīng)過(guò)安全優(yōu)化,已經(jīng)看不到xxtea_decrypt函數(shù)名了,但是必然會(huì)有與xxtea_decrypt等效的解密函數(shù),我們F5反編譯,進(jìn)去詳細(xì)看看:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        很明顯_byds_d_就是我們要找的與xxtea_decrypt等效的加密函數(shù),我們?cè)谶M(jìn)_byds_d_函數(shù)看,

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        再結(jié)合coco2dlua源碼看一下xxtea_decrypt函數(shù)源碼:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        很顯然,函數(shù)體效果是相同的,至此,我們已經(jīng)確定下調(diào)試app時(shí)突破口:_byds_d_、luaLoadBuffer,在動(dòng)態(tài)調(diào)試時(shí),在這兩個(gè)函數(shù)下斷,不出意外的話(huà),應(yīng)該是能得到破解xxtea的key的。我們知道在cocos2dlua中,與app交互主要考lua,lua運(yùn)行時(shí)加載,所以,手機(jī)端運(yùn)行app后直接附加調(diào)試即可。

        依照前面所講,用idaPro對(duì)大神app進(jìn)程(com.qipai.n1)附加調(diào)試,并在modules窗口搜索libgame模塊:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        雙擊進(jìn)入,會(huì)顯示此模塊內(nèi)的函數(shù)表,搜索luaLoadBuffer、_byds_d_:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密keyLUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

        分別點(diǎn)進(jìn)去下斷,并設(shè)置內(nèi)存窗口與程序窗口同步:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key       然后手機(jī)端操作程序,我們來(lái)看,_byds_d_的實(shí)參值:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key        我們知道函數(shù)的第三個(gè)參數(shù)即a3是我們要的key值,而c++調(diào)用規(guī)范中,參數(shù)是從右至左,寄存器R2就是存放我們key的地方,我們看到R2是一個(gè)內(nèi)存地址,所以我們需要查看R2所代表的內(nèi)存去看值。其實(shí)我們把鼠標(biāo)放在R2上會(huì)自動(dòng)出現(xiàn)其內(nèi)存中存放的值,但是不全,所以我們通過(guò)內(nèi)存窗口同步到R2,即可查看R2地址處的值了:

LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key


LUA逆向中如何用idaPro調(diào)試so庫(kù)獲取xxtea解密key

至此,我們已經(jīng)將xxtea解密l的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI