通過前面idapro調(diào)試或hook,我們可以獲取到xxtea解密key,對于sign我們可以直接打開原文件:
????????
可以看到sign值:byds。因此,我們可以嘗試使用xxtea解密工具(通過在GitHub上獲取源代碼并編譯)進(jìn)行解密
????????
以index.luac為例,我們看index.luac解密前后變化:
??????? 我們看到經(jīng)過xxtea解密后的lua腳本仍然不是明文!我們之前根據(jù)cocos2d框架源碼及大神apk反編結(jié)果確定就是用的xxtea加密,而且app的lua腳本也有簽名值,這也印證了就是xxtea加密方式,但是我們解密出來的結(jié)果仍然不是明文,這說明我們解密可能不完全,到底是不是還得再回到idapro一探究竟。
??????? 用idapro打開libgame.so,在export窗口中搜索byds,找到byds_d函數(shù),雙擊進(jìn)去:
????????
直接F5會顯示反編代碼:
????????
這沒有什么特別的,和我們框架源碼中的代碼是等效的。如果是解密未完成的話,應(yīng)該會再調(diào)用此函數(shù)的上一級繼續(xù)解密過程,我們jump xrefs跟蹤一下此函數(shù)調(diào)用:
????????
出來兩個,其中一個是got表,肯定不是,我們雙擊第一個:
????????
只是一個包裝函數(shù),我們繼續(xù)跟蹤:
????????
雙擊進(jìn)去:
????????
我們看到這個函數(shù)名稱和源碼中調(diào)用xxtea_decrypt是一樣的,我們一開始也將這個函數(shù)列入突破口了。現(xiàn)在可以很清晰的看到腳本經(jīng)過byds_d解密之后,又進(jìn)行了一次uncompress解壓,到現(xiàn)在應(yīng)該基本清晰了,lua腳本應(yīng)該是經(jīng)過壓縮又進(jìn)行加密,所以要想還原,應(yīng)該是先xxtea解密,再解壓縮。在GitHub上可以找到一個解壓zlib的腳本,可用于對解密后的文本再進(jìn)行解壓
? ? ? ??
然后再看index.lua:
????????
可以看到現(xiàn)在已經(jīng)變成明文了。