日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

东方永夜抄资源解包

發(fā)布時(shí)間:2023/12/20 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 东方永夜抄资源解包 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這篇文章首次發(fā)表在我的貼吧了,里面還有東方紅魔鄉(xiāng)的解包過程,不過比較麻煩有興趣的自己看吧

東方每作解包都有點(diǎn)不一樣,這里我選擇比較典型的永夜抄來示范

成品源碼:東方dat解包器


用OD打開,在文本字串參考里找th08.dat,有三個(gè)引用,一個(gè)個(gè)試,還好第一個(gè)就是我的目標(biāo)

跳到0x4461A9這里,慢慢跟進(jìn)去,在0x473897這里文件名傳入了CreateFileA

繼續(xù)往下,讀4個(gè)字節(jié)然后判斷是不是PBGZ(永夜抄資源的magic number),看來確實(shí)是解包資源的函數(shù)了


繼續(xù),讀了12字節(jié)然后傳入解密函數(shù)(當(dāng)然我當(dāng)時(shí)不知道這是解密函數(shù),但是看它把結(jié)果又復(fù)制回了原buffer而且長(zhǎng)度不變才猜是解密函數(shù))


然后對(duì)結(jié)果又做了這樣的處理(還是為了解密)


然后讀取了文件尾部


buffer2又被傳入了解密函數(shù)(參數(shù)不一樣),然后結(jié)果和第三個(gè)DWORD被傳入了另一個(gè)函數(shù)

(這個(gè)函數(shù)里用第三個(gè)DWORD的大小申請(qǐng)了結(jié)果buffer內(nèi)存,并且它比原buffer長(zhǎng)度略大,所以推測(cè)是解壓函數(shù))


看一下解壓結(jié)果buffer,是{文件名'\0', 開始地址, 原長(zhǎng)度, 0}這樣的結(jié)構(gòu),看來是文件索引信息了

根據(jù)以上推測(cè)第二個(gè)DWORD是文件索引信息的地址,第三個(gè)DWORD是文件索引信息的原長(zhǎng)度


后面這個(gè)函數(shù)是把文件信息格式化成{文件名指針, 開始地址, 原長(zhǎng)度, 0}這樣的結(jié)構(gòu)

傳入了第一個(gè)DWORD并且循環(huán)了第一個(gè)DWORD次

所以第一個(gè)DWORD是文件數(shù)量

到這里文件結(jié)構(gòu)就算分析完了,然后分析解密、解壓算法



打開逆向神器IDA,跳轉(zhuǎn)到解密函數(shù)和解壓函數(shù),按一下F5就能翻譯成C代碼

復(fù)制到我們的解包器源碼里改一下就能用了

其實(shí)在程序中可以看到很多zlib庫的常量,但是我沒找到到底用了zlib的哪個(gè)函數(shù),所以只能用IDA翻譯的C代碼了...

順帶一提從東方紅魔鄉(xiāng)到東方紺珠傳(目前最新作)用的都是同一個(gè)解密、解壓函數(shù),所以如果要破解其他作可以直接用這里的代碼

總結(jié)

以上是生活随笔為你收集整理的东方永夜抄资源解包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。