這篇文章首次發表在我的貼吧了,裡面還有東方紅魔鄉的解包過程,不過比較麻煩有興趣的自己看吧
東方每作解包都有點不一樣,這裡我選擇比較典型的永夜抄來示範
成品原始碼:東方dat解包器
用od開啟,在文字字串參考裡找th08.dat,有三個引用,乙個個試,還好第乙個就是我的目標
跳到0x4461a9這裡,慢慢跟進去,在0x473897這裡檔名傳入了createfilea
繼續往下,讀4個位元組然後判斷是不是pbgz(永夜抄資源的magic number),看來確實是解包資源的函式了
繼續,讀了12位元組然後傳入解密函式(當然我當時不知道這是解密函式,但是看它把結果又複製回了原buffer而且長度不變才猜是解密函式)
然後對結果又做了這樣的處理(還是為了解密)
然後讀取了檔案尾部
buffer2又被傳入了解密函式(引數不一樣),然後結果和第三個dword被傳入了另乙個函式
(這個函式裡用第三個dword的大小申請了結果buffer記憶體,並且它比原buffer長度略大,所以推測是解壓函式)
看一下解壓結果buffer,是這樣的結構,看來是檔案索引資訊了
根據以上推測第二個dword是檔案索引資訊的位址,第三個dword是檔案索引資訊的原長度
後面這個函式是把檔案資訊格式化成這樣的結構
傳入了第乙個dword並且迴圈了第乙個dword次
所以第乙個dword是檔案數量
到這裡檔案結構就算分析完了,然後分析解密、解壓演算法
開啟逆向神器ida,跳轉到解密函式和解壓函式,按一下f5就能翻譯成c**
複製到我們的解包器原始碼裡改一下就能用了
其實在程式中可以看到很多zlib庫的常量,但是我沒找到到底用了zlib的哪個函式,所以只能用ida翻譯的c**了...
順帶一提從東方紅魔鄉到東方紺珠傳(目前最新作)用的都是同乙個解密、解壓函式,所以如果要破解其他作可以直接用這裡的**
P5514 永夜的報應(異或,數學)
p5514 永夜的報應 做kruskal重構樹膩了,來拓展下視野。定義一組數的權值為該組內所有數的異或和.請求出一種分組方案,使得分出的所有組數的權值之和最小,輸出權值之和的最小值.我們知道異或運算的基本法則 同號則為假,異號則為真.不妨對每一位進行分析 0 0 0 1 0 0 1 1 1 1 0可...
P5514 MtOI2019 永夜的報應 題解
csdn同步 原題鏈結 簡要題意 給定乙個長度為 n 的序列 a 你需要將其分為若干組,使得每一組的異或之和最小。求這個最小值。實際上這題是個結論題。先考慮乙個問題 對於乙個數 x 唯一的一組 s 你會選擇將 x 單分一組還是加入 s 呢?由於異或的結合律,所以我們可以抽象地假設一手,設 s 中所有...
永坤電機SEO三天兩夜課程學習總結
通過這次的學習。我在以前的基礎上進一步鞏固了網際網路上的很多知識並運用到我們產品上。例如我們公司的產品 電機,通過網際網路這一渠道來推廣。目的是為了提高 收錄,提高 權重,提高精準流量。對於如何是著手這一工作,我把知識點分成以下幾點,一,站內優化 經過這次營銷分析課程,我們可以充分利用我們電機的優點...