這是一款q萌橫版街機冒險闖關手遊,使用的引擎是cocos2dx-lua
0x00 先用winhex看看遊戲資源
所有的資源檔案都被加密了,而且是同一種加密方式,加密後的檔案以@gf@開頭
經過逆向分析後知道 前8個位元組是檔案頭,9~12位元組是解壓後的大小,13~16位元組是壓縮前的大小,17~20位元組未知,資料從21位元組開始也就是0xe8 0xe8……
0x01 在ida中分析libcocos2dlua.so,發現加密處理的方法是在cocos2d::g33inpackagefileinfo::getfiledata中呼叫cocos2d::preprocessfiledata
0x02 在preprocessfiledata中先是通過cocos2d::decryptdata解密,在通過cocos2d::ziputils::g33uncompress解壓縮
0x03 先看看cocos2d::decryptdata中是如何解密的...這個程式猿木有用自定義的加密演算法,而是用的rc4加密演算法,在cocos2d::generatekey中找到key就可以解密了
這個就是rc4演算法的金鑰
0x04 在看看cocos2d::ziputils::g33uncompress中用的是什麼壓縮演算法
我之前以為是zip壓縮演算法,但是解密後我發現檔案在21位元組處(資料段頭部)是0x78 0x9c......,這個是zlib資料頭(非固定 參考rfc 1951)
0x05 經過上面的分析我用c#寫了個小工具,這裡只給出關鍵方法
//遍歷查詢檔案
privatevoid findfile(string dirpath) //引數dirpath為指定的目錄
//查詢檔案
foreach (fileinfo f in dir.getfiles("*.*"))
}catch (exception ex)
}//讀取加密檔案
private void readscfile(fileinfo f)
}}//判斷是否是thdmx檔案
private bool isthdmxfile(byte bytes)
; if (bytes.length > thdmx_head.length)
if (count == thdmx_head.length)
return true;
else
return false;
}else
}//解密檔案
private byte decryptrc4(byte thdmxbytes)
; return rc4dncrypt(rc4bytes, key);
}//rc4初始化
private byte rc4init(byte pass, int klen)
long j = 0;
for (long i = 0; i < klen; i++)
return mbox;
}//rc4演算法
private byte rc4dncrypt(byte data, byte pass)
return output;
}//解壓zlib檔案
private void decompresszlibfile(byte bytes, string outfile)
catch(exception ex)}}
}private void copystream(stream input, stream output)
output.flush();
}
資源提取原始碼 手遊鯨魚玩家四大特徵
文 mike lu 免費遊戲如此獨特的乙個因素就在於,我們免費開放遊戲,玩家如果喜愛遊戲就會在其中花錢購買新內容。其主要收益 於更小的群體 鯨魚 使用者 所以何謂鯨魚使用者,為何他們要在自己所喜歡的遊戲中投入成百上千美元?作為手機遊戲開發者,我清楚地知道其中一些原因,但直到我自己也成了鯨魚玩家時我才...
NeL 手遊引擎
nel 引擎用於ryzom,其中包括 基礎工具 網路 聲音 碰撞 ui 3d引擎等開發mmorpg的必備工具。ryzom於2002年上線,至今仍在運營,初期客戶端需要跑在56k甚至14.4k的數據機上,足見其底層庫的健壯與穩定。提取出misc和net兩個庫作為基礎,增加上層工具,搭建跨平台的手遊伺服...
手遊市場的大熱之後的抉擇
有點出乎我的預料,針對手機遊戲這個題材中國資本市場提前熱了,而且是大熱。本以為這個時間應該是在明年,但國內整個經濟形勢的下行和房地產行業的萎靡,使乙個一年目前只有幾十億規模的市場成為中國資本市場追逐的熱點。被全面聚焦了。這或許不是什麼好事。1 從行業來說,剛剛有些規模,才幾千萬盈利的手遊公司,迅速的...