透過前面idaPro調試或hook,我們可以取得xxtea解密key,對於sign我們可以直接開啟原始檔:
可看到sign值:byds。因此,我們可以嘗試使用xxtea解密工具(透過在GitHub上取得原始碼並編譯)進行解密
#以index.luac為例,我們看index.luac解密前後變更:
我們看到經過xxtea解密後的lua腳本仍不是明文!我們之前根據cocos2d框架源碼及大神apk反編結果確定就是用的xxtea加密,而且app的lua腳本也有簽名值,這也印證了就是xxtea加密方式,但是我們解密出來的結果仍然不是明文,這說明我們解密可能不完全,到底是不是還得再回到idapro一探究竟。
用idapro打開libgame.so,在export窗口中搜索byds,找到byds_d函數,雙擊進去:
直接F5會顯示反編代碼:
#這並沒有什麼特別的,而我們框架原始碼中的程式碼是等價的。如果是解密未完成的話,應該會再呼叫此函數的上一層繼續解密過程,我們jump xrefs追蹤此函數呼叫:
出來兩個,其中一個是got表,絕對不是,我們雙擊第一個:
只是包裝函數,我們繼續追蹤:
## # 雙擊進去:
我們看到這個函數名稱和原始碼中呼叫xxtea_decrypt是一樣的,我們一開始也將這個函數列入突破了。現在可以很清楚的看到腳本經過byds_d解密之後,又進行了一次uncompress解壓,到現在應該基本上清晰了,lua腳本應該是經過壓縮又進行加密,所以要想還原,應該是先xxtea解密,再解壓縮。在GitHub上可以找到一個解壓縮zlib的腳本,可用來對解密後的文字再進行解壓縮
#然後再看index.lua:
##現在變成明文了。
以上是idaPro如何分析app解密lua腳本的詳細內容。更多資訊請關注PHP中文網其他相關文章!