首頁  >  文章  >  運維  >  cocos2d-LUA逆向中如何解密app資源

cocos2d-LUA逆向中如何解密app資源

WBOY
WBOY轉載
2023-05-16 19:11:102027瀏覽

 還是以大神apk為例,透過前面分析app解密lua腳本,我們能夠解密大神apk的lua腳本,現在我們來解密其資源(設定檔和圖片等)。我們以比較重要的設定檔為例,未解密之前:
cocos2d-LUA逆向中如何解密app資源        

檔案頭部也有簽章值:fuckyou!。看到這,我們首先就想到是不是也是用xxtea加密的,我們用上面的方法,先xxtea解密,再解壓,發現依舊是亂碼,在操作的過程中就出現了錯誤,顯然,要否定我們剛才的猜想。我們繼續按部就班的解密設定檔。

        稍微思考一下,檔案頭部是:fuckyou!如果想要對檔案進行解密,那麼不可避免的需要處理字串:fuckyou! ,所以,我們應該能在idaPro中搜到fuckyou字串,然後以fuckyou字串所在程式碼段處的函數分析調試解密即可。開啟idaPro並開啟字串檢視,搜尋「fuckyou」驗證我們的假設

cocos2d-LUA逆向中如何解密app資源        

居然啥也沒有!猜測應該是做過優化,在某個地方把字串優化掉了。

        線索斷了,但好奇心還是讓我們繼續,這時候,我們可以瀏覽cocos2d框架源碼,結合網上一些資料,發現cocos2d對文件的處理封裝到了CCFileUtils類中:

cocos2d-LUA逆向中如何解密app資源        

函數有些多,不一一貼了,從網路上也找到了前輩的經驗:

##        cocos2d-LUA逆向中如何解密app資源

#        

#了,我們現在回我們了到idaPro,在export窗口,搜尋getData:cocos2d-LUA逆向中如何解密app資源

        

進這兩個函數,反編譯看下,長得不大像,略過,但是先記下,在動態調式時,我們可以在此下個斷。

        我們再來看getFileData:cocos2d-LUA逆向中如何解密app資源

        

由於app運行在Android平台上,我們看Android平台的CCFileUtilsAndroid::getFileData:cocos2d-LUA逆向中如何解密app資源

        

我們接著跟踪:#​​cocos2d-LUA逆向中如何解密app資源

##        

代碼很長,就不全貼了,貼此函數關鍵的部分:

cocos2d-LUA逆向中如何解密app資源

       

看到上圖,感覺就是它了,呵呵!但我們還是需要繼續分析驗證。函數處理檔案頭部sign時,並不是直接與字元比較而是與其ASCII值一個一個比較,所以我們在字串視窗是搜不到fuckyou!的。接著往下看,當函數判斷完是符合加密格式的文字時,會移除前8個位元組(fuckyou!),然後與異或表中的值進行異或操作,每256個位元組循環操作。

        我們可以看下byte_A1C55F:

cocos2d-LUA逆向中如何解密app資源

        

#至此,我們基本上可確定檔案解密函數及流程了,我們可以動態除錯當app調用完這個函數後,記憶體中應該是明文內容了。當我們調試時,分別在getData、CCFileUtilsAndroid:doGetFileData函數開始和結束時下斷,GetData函數下斷:

cocos2d-LUA逆向中如何解密app資源

        

doGetFileData函數下斷:

cocos2d-LUA逆向中如何解密app資源

        #############

雖然兩個函數都斷了,但是只在doGetFileData斷點出暫停,說明解密過程中是走的doGetFileData函數,符合我們的預期,看下寄存器及記憶體:

cocos2d-LUA逆向中如何解密app資源

cocos2d-LUA逆向中如何解密app資源#        

#我們看到內容在doGetFileData之前是密文,函數回傳之前已經解密成明文了,這表示我們先前的分析是對的。

好了,現在,我們可以將異或表byte_A1C55F拷貝出來,然後模仿app的解密過程(可從GitHub上找個xor解碼腳本,稍作修改即可)寫一個小工具,對大神.apk的所有資源進行解密了:

cocos2d-LUA逆向中如何解密app資源

以上是cocos2d-LUA逆向中如何解密app資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除