cocos2d游戲jsc文件格式解密,SpideMonkey大冒險


 介紹cocos2d游戲中常用的jsc格式文件的解密。

 

01

 

在破解游戲應用中,經常會碰到后綴為jsc的文件,這是基於cocos2d開發的游戲的加密代碼,本質上是js文件,只是被加密了。

 

例如之前分析的網絡賭博應用奧迪棋牌和它的兄弟途游斗地主,都是cocos2d游戲,其游戲代碼主體就是使用js寫的,然后加密成jsc格式。

 

如果想對這兩款應用的加密及破解進行了解,可參考之前的文章:

途游斗地主加密協議分析及破解

博彩應用奧迪棋牌協議破解分析與揭秘

 

如果想了解一個jsc游戲的邏輯,就需要將它解密,但是,這個jsc加密,網上相關的資料很少。

 

在分析這兩款應用的過程中,本來准備偷點懶,看看網上有沒有現成的工具,找了很久都沒找到,於是只好苦逼地自己來破解它了,參考了一些找到的資料,但資料與實際情況有些出入,所以,一切應以實戰為准。

 

本文去除了繁瑣的探索步驟,只展示破解jsc格式文件的方法,相信大家看完后也能夠解cocos2d游戲代碼中的jsc文件。

 

解密的完整源碼已經在github上公開,在這里就不放了,大家如果有需要可以去上面找。

 

 

02

 

前面已經提到,jsc文件是js加密后的數據,常在cocos2d游戲中用到。

 

其實,真正在js和jsc文件中進行轉換的是SpiderMonkey,一個Mozilla項目中用c寫的JavaScript腳本引擎。

 

cocos2d中使用了SpiderMonkey來進行JavaScript腳本的處理。

 

SpiderMonkey已經迭代了很多版本,早期的版本為方便調試,默認生成jsc文件時,原始的js腳本就在這個文件的尾部,直接就能摳出來用了,網上很多資料所謂的解密就是指的這個。

 

網上另外還有一個非蟲寫的解密jsc的文章,是真的解密,但是按他的文章進行無腦傻瓜式操作,編譯SpiderMonkey都過不去,只能參考下使用的接口,自己來寫了。

 

在解密之前,需要注意jsc文件的最開始有文件的版本,具體解密過程中,如果使用的SpiderMonkey版本不對,是不會解的,版本號有大版本和小版本,需要完全一致才可以,能夠和cocos2d匹配的SpiderMonkey在cocos2d的github內可以找到,大版本是v33,如果需要其它版本,就去SpiderMonkey官網找找,不一定能找到。

 

雖然SpiderMonkey看着很大,但解密jsc文件只需要其中一點點,都在js/src/里面,另外,針對具體使用的編譯環境,需要修改configure文件內的編譯器,我當時的環境是修改configure.in內c99為gnu99。

 

真正的解密過程,其實就是調用接口,解密接口為JS_DecodeScript,為了解密后的數據能夠輸出,還需要實現一個將解密結果輸出的函數,我使用的名稱是js_DumpJSC,是從SpiderMonkey代碼中其它地方拷出來的。

 

具體各個接口怎么用,SpiderMonkey代碼中其實都有,我采用的是比較省事的方法,直接模仿gdb-tests.cpp來玩,代碼量很少,主要是有一套使用框架,照葫蘆畫瓢就行了。

 

關鍵的解密代碼是這樣子,入參cx為照葫蘆畫瓢初始化好的JSContext,jsc_file_path為jsc文件路徑:JSContext

bool decode_jsc(JSContext *cx,char *jsc_file_path) {
uint32_t datalen = 0; void *bytecode_data = load_string_from_file(jsc_file_path,(int *)&datalen);
if (bytecode_data!=NULL) { JS::RootedScript *script = new JS::RootedScript(cx); *script = JS_DecodeScript(cx, bytecode_data, datalen,nullptr); char outfilename[255]={0}; sprintf(outfilename,"%s.jsdec",jsc_file_path); if(js_DumpJSC(cx,*script,outfilename)) //js_DumpJSCFile(cx,*script,outfilename) { printf( "run ok."); } } return true;}

 

它的編譯,可以參考SpideMonkey官網的資料,大概是這樣子:

autoconf-2.13 

cd build-linux 

../configure --enable-debug --disable-optimize 

make

然后,你就可以使用你寫的解密器進行jsc的解密了。

 

當然,SpideMonkey的使用過程有很多小坑。

 

03

 

是不是看着摸不着頭腦,沒關系,動手去搞就是了,搞一次就全明白了。

 

如果有jsc解密的需求,可以自己動手去玩玩。


長按進行關注,時刻進行交流。

 

點擊“在看”,與朋友一起分享↘


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM