遊戲中大概有3種檔案,分别是pyc,nxs,npk,還有一些配置檔案就不說了
這裡的pyc是修改過opcode的,pyc檔案加密後就是nxs檔案,nxs檔案會被打包到npk檔案中
我們從裡向外說吧,先放出GitHub連結
https://github.com/yuanbi/NeteaseUnpackTools
Pyc檔案
NeteasePycObject,這個檔案夾中的檔案是用來還原pyc opcode的,使用方式如下:
netpyc 輸入檔案 輸出檔案 [是否加密]
第三個參數是可選的,預設為0,代表解密,如果為1代表加密,就是将正常的opcode修改為遊戲中python的opcode
這個工具的部分pyobject的偏移有問題,大部分檔案不會出現問題,懂這方面的大佬可以自行修改下,後面修改過後也會在GitHub更新的
用netpyc修改opcode過後,可以使用uncomply6,進行反編譯
還有一個問題就是部分pyc檔案會有一個或兩個位元組碼不是python中的位元組碼,極少數的檔案會出現這種問題,這個時候在反編譯的時候就會報error,如果報了error可以觀察解析失敗的opcode附近的代碼,可以自行修改
如果被修改過的位元組碼不在opcode中,就要手動分析了,當然這種情況出現的很少
Nxs檔案
接下來就是nxs檔案了,nxs檔案直接使用NeteaseNxsUnpack中的NeteaseNxsUnpack.py進行解密,使用方法如下
python2 NeteaseNxsUnpack.py 輸入檔案 輸出檔案
之後使用netpyc解密opcode,然後反編譯就行了
Npk檔案
直接使用NeteaseNpkUnpack中的NeteaseNpkUnpack.py,使用方法如下
python2 NeteaseNpkUnpack.py 輸入檔案 輸出檔案夾,解密後的檔案無字尾,檔案類型需要自己分析
Script.Npk解包
網易遊戲基本上會有script.npk,解包方法如下
先解包npk,解包後檔案夾中的所有檔案都是nxs檔案,在進行nxs檔案解密的步驟就行了
DecodeBuffer
這些是三種檔案,還有一種是這樣的,這裡說的是Windows的版本,在nxfilesystem.dll中會有一個decodebuffer函數,這個就是第四個,這個函數的上層是openwithloader
openwithloader作用是打開檔案,檔案校對,和部分初始化,在openwithloader中并不是所有的資料都要經過decodebuffer函數,部分資料需要解密,多數會是一些配置檔案
在openwithloader中,捕獲資料如下,在openwithloader的ret位元組下斷點,檔案名,檔案大小,會存儲在[eax+4]的位置,如果我沒記錯的話
還有就是在Windows中并不是所有檔案都存儲在npk檔案裡,還有一部分存儲在 C:Users使用者名AppDataLocal遊戲名縮寫 中,如果你在這裡中找到了script檔案夾,這個檔案夾中會包含很多檔案夾和一個檔案
這些檔案夾和檔案的名字都是被加密過的,可以在nxfilesystem.dll中搜尋導出的包含path的函數,具體名字忘記了,函數功能是這樣的,傳入正常路徑,傳出加密路徑