[YU-RIS] 收費組補丁破解之ペトリコール
[YU-RIS引擎] 收費組補丁破解之ペトリコール -Petrichor-
以前發的貼,轉到Github保存一下,略有改動。2023年5月30日
從床上爬起來看了看手機,倫敦時間5點44,差不多快6點了,自律的人應該起床了。
起來熱了下飯菜,打開YouTube看看臺媒下飯。
邊吃邊看,然后在群里吹逼了幾句,到七點半了。
然后打開了昨天下的里番開始導管
混賬,自律的人怎么能天天導管呢?最*導的*凡了,一天十幾次,所謂暴食斯英語。
自律的我必須找點事情干(今天)!
想起KF好像有人發了個漢化,還沒看有沒加密
哎,反正也沒事干,看截圖大概是沒加密,那先下一個看看吧。
下來一看,好像是沒加密,就是exe大小有點不對勁,然后看著是打的原封包
那Garbro解包看看,發現Garbro解包不了,這個情況想起來之前還有個屋子的補丁沒破。

(圖裂了?因為是Github的鏈接,所以你得開代理小老弟:))
屋子的補丁是一個叫 ペトリコール -Petrichor- 的游戲的,也是yu-ris引擎
我之前也破過一個屋子的同樣的yuris引擎的游戲
不過那個就一個難點猜密鑰,而且文件也沒封包,直接就是解包后的文件,猜出密鑰就秒殺了
這次有點不一樣,封包了,而且還解包不了。當然最主要的情況是因為我不能運行這個游戲
如果可以運行那就幾秒的事,因為屋子已經掛了,跑不起來就只能摁住猜了。

那個屋子補丁也是Garbro解不了,然后對著YPF的文件格式自己人肉解析了一下,發現原始數據開頭是5A
對于zlib壓縮的文件而言,那必不可能是5A,一般是7x多少,當然我也是不什么密碼學專家
他這樣一改,我有點玉玉了,你改這還能不能好好玩了,然后一直也沒猜出是個什么加密方法。
如果他整體xor一層,我感覺這輩子都猜不出來了,何況可能還換了壓縮的方法,而且yu-ris的腳本本身就有一層xor。
屋子是必然改了,因為漢化不可能全部文件都修改,但是xor密鑰一改,全部文件都不一樣了,想通過日文版的來對比
基本沒戲。但是我發現其中一個yscfg文件把5A改成78后是可以正常被zlib解壓的。
反正后面就研究到這就放硬盤里了,沒啥思路,想著逆向不就這樣,大起大落罷了,不如繼續導管。

當然上面說的是之前的事情,看到這個情況腦子里一閃而過,現在我們繼續看KF這個新發的漢化補丁。
既然Garbro解不了,還是報zlib的問題,說明是死在了解壓上,那就看看漢化的exe吧。
看了下發現是upx,這個簡單,學過脫殼的第一課應該就是脫這個,脫殼后發現exe有點小,怎么才2mb左右
比日文版的小了,1mb左右,嗨別理他,再查看一下有沒別的殼,看樣子是沒有。
上手x64dbg調試一下,由于最*在更新YU-RIS引擎的相關教程,這個還是得心應手的,隨便翻一下找到解壓的地方看看。
oh,一看到這個解壓函數被套了一層,到這就水落實出了,再看看它的原始數據,oh,這個更是驚喜不斷
看著這個數據的頭幾個字節和屋子那個簡直是一模一樣。我趕緊在一堆導管資料里翻出了屋子那個補丁。


經過對比我發現該新漢化補丁,實際上還是zlib壓縮,只是頭3個字節xor了一個數,然后偏移4個字節xor了文件的大小(壓縮大小)。
當然到這個只是解決了這個補丁搞的東西,屋子那個還沒看。
我想著如果是一樣的話,屋子那個封包復制過來加載一下看看?跟蹤了一下,結果在這個程序里的加密方法運算后確實頭一個字節變成了0x7x
感覺有點希望,后面調用解壓函數的時候倒是出錯了,看來還是有點問題啊,你也很難保證這兩是一樣的吧,沒準人家就喜歡5A開頭呢?
經過反復對比我發現,只要把這個新漢化補丁里的對頭3個字節xor的密鑰 0x0040FB22 改成 0x0040BF22 就可以成功被zlib解壓了。
趕緊起手寫個程序把屋子那個文件處理一下,最*又降溫,寫的手有點哆嗦,也有可能是導多了。

(你看導多了吧,不delete也不close)
處理完成后對原始數據用zlib解壓,輕松得到YSTB文件,接著用之前為了講YU-RIS教程寫的猜密碼和解密工具處理一下

winhex看看效果

ok輕松秒殺。
接著對日文版處理一下,把這個漢化文件搞上去,又是一個好補丁(焊化+1)

最后總結一波
#赤紅幻境漢化組 -> CH
#日文原版 -> JP
#胖次漢化組(屋子) -> WZ
#原始數據(即未解壓未解密數據) -> RAW
#日文版密鑰 -> 0xC41386F5
#屋子版密鑰 -> 0x75F74413
----- First Four Bytes Of Raw Data -----
JP_RAW = 0x78DAXXXX
WZ_RAW = 0x5A65XXXX
CH_RAW = 0x5A21XXXX
----- Encryption Algorithms CH -----
CH_RAW + 0 xor DWORD 0x0040FB22
CH_RAW[0] xor 0x22 = 0x78
CH_RAW[1] xor 0xFB = 0xDA
CH_RAW[2] xor 0x40 = ?
CH_RAW[3] xor 0x00 = CN_RAW[3]
CH_RAW + 4 xor DWORD szFile
----- Encryption Algorithms WZ -----
WZ_RAW + 0 xor DWORD 0x0040BF22
僅修改第二個字節為BF使得即使結果為0xDA
WZ_RAW[0] xor 0x22 = 0x78
WZ_RAW[1] xor 0xBF = 0xDA
WZ_RAW[2] xor 0x40 = ?
WZ_RAW[3] xor 0x00 = WZ_RAW[3]
WZ_RAW + 4 xor DWORD szFile

浙公網安備 33010602011771號