五月天青色头像情侣网名,国产亚洲av片在线观看18女人,黑人巨茎大战俄罗斯美女,扒下她的小内裤打屁股

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

cocos2d游戲lua解密分析

2023-02-18 18:00 作者:Anicca丶Y  | 我要投稿

很長(zhǎng)一段時(shí)間沒有寫解密分析了,最近遇到的cocos2d解密比較多,于是就選了一個(gè)比較典型的來分析一下。

cocos2d游戲中l(wèi)ua是經(jīng)常需要解密的,最常見的加密手段就是使用xxtea。常規(guī)的xxtea使用128bit作為密鑰進(jìn)行加密,并且在cocos2d中還附加了顯著的標(biāo)記sign作為記號(hào)。加密的文件頭部x個(gè)字節(jié)通常就是sign。解密的關(guān)鍵通常就是找到128bit的key。

其實(shí)一般來說,在ida分析中,sign和key都會(huì)被經(jīng)過各種手段加密混淆。還有的人也會(huì)對(duì)xxtea本身下手進(jìn)行魔改。不過大差不大,基本上不會(huì)出現(xiàn)太麻煩的加密混淆。

本次需要解密的是一款問x手游,lua文件的特征非常明顯,并且是xxtea加密。

將游戲的so拖入ida中分析,在經(jīng)過漫長(zhǎng)的等待后,搜索導(dǎo)出表關(guān)鍵詞xxtea。

導(dǎo)出表搜索xxtea

首先先跟蹤一下xxtea_decrypt這個(gè)函數(shù),看看函數(shù)的交叉引用,

xxtea_decrypt? ?xref-1
xxtea_decrypt ? xref-2
xxtea_decrypt xref-3

經(jīng)過跳轉(zhuǎn)找到xxtea_decrypt_ex這個(gè)函數(shù),顯然這是一個(gè)后期封裝的函數(shù)。

根據(jù)xxtea_decrypt的函數(shù)簽名對(duì)參數(shù)名進(jìn)行修改,

然后向上查看代碼。

xxtea_decrypt xref-4
xxtea_decrypt xref-5

根據(jù)key這個(gè)參數(shù)向上尋找最終定位到,發(fā)現(xiàn)data值來自于tree_data的索引結(jié)果,在向上可以看到,tree_data在函數(shù)開始從全局接受值。所以我們的目標(biāo)已經(jīng)明確,就是要找到tree_data這個(gè)全局變量,在哪里被賦值。

tree_data xref

可以看到交叉引用還是挺多的,不過我們既然是在找xxtea的key那么基本上可以先從xxtea_set_sign_key這個(gè)函數(shù)入手

xxtea_set_sign_key-1
xxtea_set_sign_key xref-1
xxtea_set_sign_key xref-2
xxtea_set_sign_key xref-3

通過多次跳轉(zhuǎn)后找到一個(gè)非??梢傻暮瘮?shù),

可以看到這一塊多次調(diào)用xxtea_set_sign_key,并且參數(shù)都是hex值,經(jīng)驗(yàn)來講這一塊基本上就是sign和key的初始化位置。

而xxtea_set_sign_key這個(gè)函數(shù)就是解密的關(guān)鍵入口,回過來在分析xxtea_set_sign_key函數(shù)。

xxtea_set_sign_key_analys

前面看到的兩個(gè)字符串參數(shù),在函數(shù)開始就被調(diào)用(后期分析后將該處函數(shù)名修改成decode便于理解),大概猜測(cè)是將hex值轉(zhuǎn)為字節(jié)數(shù)組當(dāng)然其中應(yīng)該是有解密過程的(在前期分析時(shí)已經(jīng)通過腳本將所有字符串轉(zhuǎn)為字節(jié)數(shù)組,發(fā)現(xiàn)都是無法理解的字符,并且迭代遍歷所有可能的key,無法解密出文件,說明這些字節(jié)還經(jīng)過加密)。

于是從尋找key,轉(zhuǎn)變?yōu)閷ふ襨ey的解密函數(shù)。

decode-1
decode-2

進(jìn)入decode函數(shù),經(jīng)過一系列分析,中間一塊代碼就是常規(guī)的hex轉(zhuǎn)byte,真正的解密區(qū)域再下面,可以看出key是經(jīng)過des加密的。

于是我用des的密鑰,寫了個(gè)腳本去解析這些字符,發(fā)現(xiàn)解出來仍是亂碼,可見des的密鑰(des_key)也是經(jīng)過加密的。可見開發(fā)者是多么喪心病狂,瘋狂套娃。

于是要先分析makekey這個(gè)函數(shù),因?yàn)閐eskey經(jīng)過分析就是常規(guī)的des子密鑰生成函數(shù),所以makekey就是解密的關(guān)鍵。

makekey-1
makekey-2
makekey-3
makekey-4

函數(shù)里面也沒什么好分析的,從start位置開始就是解密的關(guān)鍵部分,

key_r和key_l是兩個(gè)des的密鑰,生成了兩串dessubkey,然后在最下面對(duì)輸入的key進(jìn)行解密

是典型的des3流程,只是在des3的中間有一個(gè)小插曲,就是函數(shù)傳入的key逐字節(jié)與key_l進(jìn)行xor。結(jié)果通過指針傳出。

于是到此,所有的關(guān)鍵函數(shù)都差不多分析完了。

整個(gè)流程就是

xxtea_set_sign_key 設(shè)置sign和key,

sign和key為des3加密所得,加密密鑰寫死在函數(shù)內(nèi)部。

當(dāng)然再回過來看,xxtea_set_sign_key會(huì)發(fā)現(xiàn)還有第三個(gè)int類型的參數(shù),

如果分析過xxtea源碼的話一看這些數(shù)字就會(huì)知道,基本上都接近delta。

所以根據(jù)經(jīng)驗(yàn)判斷,這個(gè)游戲的開發(fā)者不僅對(duì)key,sign進(jìn)行加密,還對(duì)xxtea本身動(dòng)了手腳,不過手段一般,可能會(huì)難道一些小白。

cocos2d游戲lua解密分析的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
浦江县| 炉霍县| 满洲里市| 瑞昌市| 民乐县| 科尔| 旬邑县| 浦县| 滨海县| 增城市| 嘉祥县| 拉萨市| 剑河县| 彭州市| 汉川市| 龙泉市| 万宁市| 含山县| 西盟| 青冈县| 咸丰县| 闽侯县| 古田县| 渭源县| 长顺县| 开化县| 永川市| 崇明县| 佛学| 茌平县| 略阳县| 瑞安市| 大名县| 惠安县| 利辛县| 顺平县| 塔河县| 承德县| 沭阳县| 隆子县| 和静县|