<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Rust on 格物漫筆</title><link>https://blog.uwspro.com/tags/rust/</link><description>Recent content in Rust on 格物漫筆</description><generator>Hugo</generator><language>zh-tw</language><lastBuildDate>Tue, 25 Aug 2026 21:31:00 +0800</lastBuildDate><atom:link href="https://blog.uwspro.com/tags/rust/index.xml" rel="self" type="application/rss+xml"/><item><title>Sigil 的 PoC 完成了，但我找不到移植到 Windows 的路...</title><link>https://blog.uwspro.com/posts/20260825-sigil-poc-and-windows-challenges/</link><pubDate>Tue, 25 Aug 2026 21:31:00 +0800</pubDate><guid>https://blog.uwspro.com/posts/20260825-sigil-poc-and-windows-challenges/</guid><description>&lt;h2 id="前言"&gt;前言&lt;/h2&gt;
&lt;p&gt;Sigil 是一個用來封裝 RPG Maker 遊戲資產的工具。&lt;/p&gt;
&lt;p&gt;它的目的並不是做出「絕對無法破解」的加密。&lt;br&gt;
只要玩家能在自己的電腦上執行遊戲，理論上就一定有辦法在某個時間點取得解密後的內容。&lt;/p&gt;
&lt;p&gt;我真正想做的是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;不讓圖片、音訊、資料庫與程式碼直接攤在資料夾裡，讓創作者能從技術上表達「我不希望這些資產被隨意翻閱」。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;這比較接近一道界線，而不是一堵不可能跨過的牆。&lt;br&gt;
有心逆向的人仍然能跨過去，但是不能再假裝自己只是「不小心點進資料夾」了。&lt;/p&gt;
&lt;p&gt;目前 Sigil 已經在 Linux 上完成概念驗證。&lt;br&gt;
它可以把一份 RPG Maker MV 遊戲封裝起來，再讓 NW.js 在看不到原始資產檔案的情況下正常讀取遊戲內容；解密後的資產只停留在記憶體，不會先被展開到暫存目錄。&lt;/p&gt;
&lt;figure class="post-media"&gt;&lt;iframe
 src="https://www.youtube-nocookie.com/embed/KQfIJ1baiRY"
 title="Sigil Preview v0.0.97"
 loading="lazy"
 referrerpolicy="strict-origin-when-cross-origin"
 allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
 allowfullscreen&gt;&lt;/iframe&gt;
 &lt;figcaption&gt;Sigil Preview v0.0.97&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;聽起來很美好。&lt;br&gt;
然後我開始思考 Windows 版要怎麼做。&lt;/p&gt;
&lt;p class="shortcode-emphasis is-bold is-big is-red"&gt;嗯，這個架構看起來真的非常像惡意程式會做的事。&lt;/p&gt;
&lt;h2 id="目前的-poc-到底做了什麼"&gt;目前的 PoC 到底做了什麼&lt;/h2&gt;
&lt;h3 id="先把資產收進一個封包"&gt;先把資產收進一個封包&lt;/h3&gt;
&lt;p&gt;一般的 RMMV 部署會把圖片、音訊、JavaScript、JSON 等內容原封不動地放在 &lt;code&gt;www/&lt;/code&gt; 裡。&lt;br&gt;
玩家只要打開資料夾，便能直接查看大部分遊戲資產。&lt;/p&gt;
&lt;p&gt;Sigil 的第一步，是把其中的唯讀內容收進 &lt;code&gt;assets.sigil&lt;/code&gt;。&lt;br&gt;
封包裡有一份索引，用來記錄每個資產的路徑、大小及位置；索引與每個檔案則各自經過驗證加密。&lt;/p&gt;
&lt;p&gt;這裡的「驗證」很重要。&lt;br&gt;
如果封包被修改、金鑰不正確，Sigil 會直接拒絕提供內容，而不是把一段不知道被動過什麼手腳的資料交給遊戲。&lt;/p&gt;
&lt;p&gt;同時，相同的來源、設定與金鑰會產生逐位元相同的輸出。&lt;br&gt;
這可以讓後續建置與發佈流程確認「這兩次封裝真的是同一份東西」，也比較容易檢查是否混入不該出現的檔案。&lt;/p&gt;
&lt;p&gt;封裝過程不會修改來源專案，也不會覆寫已存在的輸出。&lt;br&gt;
所有東西會先在暫存的 staging 目錄準備完成，確認成功後才一次發布；如果中途失敗，就把這次建立的半成品清掉。&lt;/p&gt;
&lt;p&gt;簡單說，這一層只負責：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;哪些檔案要進入封包&lt;/li&gt;
&lt;li&gt;如何驗證封包沒有損壞或遭到修改&lt;/li&gt;
&lt;li&gt;如何在知道路徑的情況下取回單一資產&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;它不認識 RMMV，也不在乎最後是 NW.js 還是其他程式來讀。&lt;br&gt;
因此，這也是目前最有機會直接移植到其他平台的部分。&lt;/p&gt;</description></item></channel></rss>