摘要:這樣控制了int3就可以讓程序一個指令一個指令的執行,從而達到分析/破解/debug的目的。可你一篡改int3,程序就沒法倒序執行了,結果就更是狗屁不通了,從而達成防止破解的目的。

寫幾個年代久遠的吧,當時還小,有些細節恐怕記得不那麼準。

軟盤激光加密

用燒紅的鐵針在磁盤上戳一下。燒紅是爲了讓小孔平整,不至於劃傷磁頭。然後格式化這個磁盤,記錄下被標記成壞扇區的位置。找到小孔位置,然後把小孔的位置換算成註冊碼,隨軟盤一起賣給用戶。第一次運行需要輸入註冊碼。之後每次運行程序會到磁盤指定的位置找小孔來判定你有沒有鑰匙盤。

鑰匙盤上的小孔用常規的方法無法複製,因爲它並不是數據。手動戳一個你也很難跟鑰匙盤一樣位置。隨便戳一個你又沒有註冊碼的生成算法。屬於是一種有效,廉價又難纏的加密辦法。

至於爲啥叫激光加密呢?因爲正常來講這個小孔是用激光燒蝕的,個人開發者沒有這個設備,就拿針戳一下。

Int3爭奪戰

在那個遙遠的年代,實模式(Real mode)還是主流,OS(特指DOS)其實也沒比應用程序有更高的運行等級。你甚至可以在啓動之後把OS砍了,讓OS把佔用的內存吐出來,來滿足自身的內存需求。

記得Novell Netware就有這麼一個指令,可以在啓動之後砍掉DOS,自己獨佔系統。

當然砍是可以隨便砍的,砍完之後你的程序也沒法退出了,因爲沒有OS接管之後的事了。

這種情況一直持續到使用NT內核的XP爲止。

年紀大點的人可能還記得當年有個名震天下的病毒叫CIH,鬧的這麼厲害也是因爲95/98裏提升權限權限容易的多。XP開始的NT內核是完整的保護模式(Protect mode),幾乎不給你這個機會了。

在這樣一個羣雄逐鹿的環境下,病毒/殺毒,加密/破解誰更厲害就是看誰更狠了。

int3就變成了一個加密/破解的兵家必爭之地。

int3是什麼呢?簡單來說就是可以設置斷點,CPU執行指令執行到這個位置就會停下來,調用一次int3。然後繼續執行剩下的指令。

這樣控制了int3就可以讓程序一個指令一個指令的執行,從而達到分析/破解/debug的目的。

也就是說誰控制了int3就是刀俎,控制不了就是魚肉了。所以各種調試破解程序都是千方百計的爭奪int3的控制權,而加密程序則是千方百計的干擾別的程序用int3.

具體的各種爭奪手法差不多可以寫本書了,這裏就舉一個有趣的加密手法:

利用int3讓內存裏的程序倒序執行。或者說倒序纔是正確的打開方式。

本來第n條指令執行完畢之後應該執行第n+1條指令,加密程序利用int3在執行完第n條指令之後,把命令指針改成n-1,從而實現倒序執行。

靜態分析,內存裏的代碼簡直狗屁不通。

動態跟蹤你就得去截int3。可你一篡改int3,程序就沒法倒序執行了,結果就更是狗屁不通了,從而達成防止破解的目的。

PSP的GTA破解

PSP版的GTA有個BUG:

具體來說就是啓動遊戲的時候會自動到卡上讀存檔,這個過程可能會內存溢出。

後來廠商發現了這個BUG,於是新版的GTA裏修復了這個問題,可是已經賣出去的GTA盤片你也沒法回收回來不是?

於是當這個BUG被公開之後,舊版的GTA盤片價格暴漲,到了一卡難求的地步。

PSP的電池破解

往電池的控制芯片裏寫入特殊的數據,在開機的時候完成破解。果然是漏洞無所不在啊。

Wii的破解

Wii剛開始出來是很難破解的一款主機。

雖然盤片是DVD,但又和普通的DVD不一樣。

後來有人發現一款LG的DVD-ROM可以用來讀取Wii的光盤,於是複製Wii光盤成爲可能。

當然Wii主機是不會認這種刻錄的光盤的,解決辦法就是把一個PIC的單片機焊在Wii光驅的控制芯片上,利用控制芯片的DEBUG陣腳來劫持這個芯片,讓它把刻錄光盤識別成正常光盤。

而任天堂的反制措施是。。。。。。。

把這兩個引腳切掉,哼!我叫你焊!

在遊戲的發展歷史中,出現過的有意思的加密反盜版機制和破解機制

而反反制措施則是。。。。。。

用高超的焊接技巧修復剪斷的針腳!像這樣!

在遊戲的發展歷史中,出現過的有意思的加密反盜版機制和破解機制

能焊成這樣已經是鬼斧神工了,對自己的手有信心的人可以挑戰一下。

順便說一下,當年我焊了4~5臺吧,當然我可沒有圖上焊的這麼好,所以每次操作的時候都在心裏把任天堂上上下下問候一遍。

補充一下,能焊上本來就是挺難的事了,更難的在於由於焊點實在太小,強度很低。

比如圖上這樣,上面的線稍微動一下,下面可能就斷了。

我的辦法就是焊好之後在焊的地方用膠槍補一下,不過缺點是萬一沒焊好再修就很困難了。

相關文章