還是以大神apk為例,透過前面分析app解密lua腳本,我們能夠解密大神apk的lua腳本,現在我們來解密其資源(設定檔和圖片等)。我們以比較重要的設定檔為例,未解密之前:
檔案頭部也有簽章值:fuckyou!。看到這,我們首先就想到是不是也是用xxtea加密的,我們用上面的方法,先xxtea解密,再解壓,發現依舊是亂碼,在操作的過程中就出現了錯誤,顯然,要否定我們剛才的猜想。我們繼續按部就班的解密設定檔。
稍微思考一下,檔案頭部是:fuckyou!如果想要對檔案進行解密,那麼不可避免的需要處理字串:fuckyou! ,所以,我們應該能在idaPro中搜到fuckyou字串,然後以fuckyou字串所在程式碼段處的函數分析調試解密即可。開啟idaPro並開啟字串檢視,搜尋「fuckyou」驗證我們的假設
居然啥也沒有!猜測應該是做過優化,在某個地方把字串優化掉了。
線索斷了,但好奇心還是讓我們繼續,這時候,我們可以瀏覽cocos2d框架源碼,結合網上一些資料,發現cocos2d對文件的處理封裝到了CCFileUtils類中:
函數有些多,不一一貼了,從網路上也找到了前輩的經驗:
##
#
#了,我們現在回我們了到idaPro,在export窗口,搜尋getData:
進這兩個函數,反編譯看下,長得不大像,略過,但是先記下,在動態調式時,我們可以在此下個斷。
我們再來看getFileData:
由於app運行在Android平台上,我們看Android平台的CCFileUtilsAndroid::getFileData:
我們接著跟踪:#
## 代碼很長,就不全貼了,貼此函數關鍵的部分:看到上圖,感覺就是它了,呵呵!但我們還是需要繼續分析驗證。函數處理檔案頭部sign時,並不是直接與字元比較而是與其ASCII值一個一個比較,所以我們在字串視窗是搜不到fuckyou!的。接著往下看,當函數判斷完是符合加密格式的文字時,會移除前8個位元組(fuckyou!),然後與異或表中的值進行異或操作,每256個位元組循環操作。 我們可以看下byte_A1C55F: #至此,我們基本上可確定檔案解密函數及流程了,我們可以動態除錯當app調用完這個函數後,記憶體中應該是明文內容了。當我們調試時,分別在getData、CCFileUtilsAndroid:doGetFileData函數開始和結束時下斷,GetData函數下斷: doGetFileData函數下斷:
#############
雖然兩個函數都斷了,但是只在doGetFileData斷點出暫停,說明解密過程中是走的doGetFileData函數,符合我們的預期,看下寄存器及記憶體:
#
#我們看到內容在doGetFileData之前是密文,函數回傳之前已經解密成明文了,這表示我們先前的分析是對的。
好了,現在,我們可以將異或表byte_A1C55F拷貝出來,然後模仿app的解密過程(可從GitHub上找個xor解碼腳本,稍作修改即可)寫一個小工具,對大神.apk的所有資源進行解密了:
以上是cocos2d-LUA逆向中如何解密app資源的詳細內容。更多資訊請關注PHP中文網其他相關文章!