:                                【第一篇】
:     幾年前, 我曾經看過蘋果電腦的破解技術教學, 不過, 卻始終未看過有人撰寫
: IBM PC 的版本, 所以我決定嘗試撰寫本文, 幫助那些想學習破解技術卻找不到門
: 路的玩家。
:     在「第一篇」部分, 我想先跟大家介紹一下 INT 13 這個中斷向量, 以及大部
: 分的軟體保護為什麼都喜歡利用他來做保護, 不過, 在您閱讀本文之前, 建議您先
: 打好組合語言的基礎以及學會 Debug 的使用方法, 這對您在破解教學以及研究方
: 面有很大的幫助。
: INT 13 - 概觀
: -------------
:     許多軟體保護都喜歡利用磁碟中斷 (INT 13) 來進行保護, INT 13 可以讓您用
: 來讀取、寫入、或格式化非標準的單一磁軌/磁區, 製造出類似壞軌的假象。
:     INT 13 跟普通的中斷向量一樣, 可以使用組合語言指令 INT 13 (機器碼是 CD
: 13) 來呼叫, 而其 AH 暫存器則是用來選擇服務常式的編號。
: INT-13 破解概論
: ---------------
:     雖然很多廠商喜歡使用 INT 13 來進行保護, 不過有保護就有破綻, 其關鍵就
: 在檔案, 廠商可能會利用 INT 13 來從磁片上的某磁軌、磁區讀取一些資料, 因此
: , 其關鍵就在如何決定被保護的磁軌/磁區, 我個人發現最好的工具就是 LockSmith
: /PC, 如果您手邊沒有此套軟體, 可以問問一些破解老手或軟體收集狂, 或許可以從
: 他們那兒挖到哩。
:     使用 LockSmith/PC (以下簡稱 LS), 可以分析整張磁片, 並且向您報告不正常
: 的磁軌/磁區, 這些不正常的部分, 就是廠商用來做保護的地方了。
:     現在, 我們要進入 Debug 程式了, 載入一個執行檔, 並且找到 CD 13, 並且將
: 其位址記下, 如果您一個都找不到, 很可能有兩種情形: 一是這個程式根本沒有保護
:  (@#$%...), 二是該程式的保護是在另一部分, 可能是其他程式或是 ..., 這部分我
: 們會在第二篇中再提到。 不過, 還有另一種可能, 就是該程式的 CD 13 隱藏在其自
: 我編碼中, 下面有一個實例, 我們大家來看一看:
: -U CS:0000
: 1B00:0000 31DB     XOR    BX,BX
: 1B00:0002 8EDB     MOV    DS,BX
: 1B00:0004 BB0D00   MOV    BX,000D
: 1B00:0007 8A07     MOV    AL,[BX]
: 1B00:0009 3412     XOR    AL,12
: 1B00:000B 8807     MOV    [BX],AL
: 1B00:000D DF13            FIST   WORD...
:     上面這段程式碼中, [AL] 被指到 DF, 在位址 1B00:0007 處, 如果您用 XOR
: DF,12 的話, 您會得到一個值 CD (十六進位值), 還有, 中斷的運算碼就擺在 13
: 旁邊, 從上例您可看到 1B00:000D 處有個 DF13, 即是代表 CD 13, 也就是 INT
: 13 , 像這類的編碼, 您如果單單使用 Debug 的 [S]earch 功能, 永遠也別想找到。
: 如何尋找隱藏的 INT-13
: ---------------------
:     我發現, 用來尋找隱藏的 INT-13 的最好工具, 是叫做 PC-Watch (TRAP13 也
: 可以) 這個程式會幫助您找到指定的中斷, 並且列出其呼叫之處, 您可以嘗試執行
: 此程式, 並且 反組譯後, 找找那些類似設定磁碟中斷的片斷。
:     另一種方法是使用 Debug 的 [G]o 功能, 當 PC-Watch 幫您找出位址後, 您可
: 以在這些位址設定中斷點 (PC-Watch 跟 TRAP13 都是幫您找出傳回位址),例如: -G
: CS:000F (請參考上面的範例), 當 Debug 停止後, 您就可以得到不只是 INT 13, 甚
: 至其相關的任何資料。
: 找到 INT 13 之後呢 ?
: --------------------
:     如果您找到了 INT 13, 那麼第一部分的工作就已經完成了, 接下來要進行的,
: 就是欺騙電腦已經讀取到保護了, 如果您想知道電腦想測試或尋找的部分是什麼,
: 不妨試著執行緊接著 INT 13 後面的程式段, 或是找找看, 是否有其他跟進位旗標
: 或是 CMP AH,?? 相關的「分支」。
:     如果出現 JNE 或是 JC 等等的類似指令, 看看其前面是否剛好有 CMP 指令,
: 如果有的話, 請使用 [U]nassemble 功能, 把 JMP 指令的位址記錄下來。
:     接下來您要判斷的, 就是, 到底程式是在尋找特殊的保護軌還是普通軌 ? 如
: 果該行指令是 CMP AH,0 , 則代表其所讀取的是保護軌, 這個部分通常所做的動作
: , 都是先偵測是否程式已經成功地讀取/格式化該軌, 然後跳回 DOS , 如果是這種
: 情況, 您可以把原先的 CMP 以及相關的 JMP 程式段, 改成 NOP 即可。
: -------------------------------------------------------------------------
:    {破解技術教學 1/2 - 待續}
: --- RemoteAccess 2.00.g1
:  * Origin: Tea Time 886-2-245-3105 24Hr, 14.4K/v32bis, 16.8K/HST (90:90/818)
: -- 信件結束 --
: FROM:    Danny Lin                     Area # 165 (   90-拷貝心得    )
: TO:      All                           MSG # 12454, Jul-24-93 4:31pm
: SUBJECT: 破解技術教學 (2/2)
:   {破解技術教學 2/2 - 續上封}
: -------------------------------------------------------------------------
:     如果程式只是檢查進位旗標的設定與否, 通常都是表示檢查該磁片是否為盜拷
: ? 請參考下列程式段:
:       INT 13      <-- 讀入磁區
:       JC 1B00     <-- 找到「保護」
:       INT 19      <-- 重新開機
: 1B00  (程式的其他部分)
:     程式在執行過 INT 指令後, 找到一個錯誤 (也就是非標準格式的保護磁區),
: 會把進位旗標設定為 1 ,接著的指令就是偵測進位旗標, 如果為 1 , 就會跳開
: INT 19 這行指令繼續執行其他程式段, 如果是這類的程式, 您只要把 JC 1B00 改
: 成 JMP 1B00 即可破解。
: 注意: 保護程式段可能不只一段哦 !
: 處理 EXE 檔案
: -------------
:     我們都知道, Debug 可以讀取 .EXE 檔, 卻無法寫入, 為了解決這個問題,
: 您還是照上面所講的步驟來做, 當您找到保護程式段並且已經測試過了, 可以把
: INT 13 附近 + - 10 個位元組的程式碼 (可以使用 Debug 的 [D]ump 功能) 記
: 錄下來。
:     接著回到 DOS, 把副檔名改成 .ZAP (或是其他副檔名, 不要是 .EXE 就可以
: ), 然後再用 Debug 把它載入。 然後找尋檔案中, 該段保護碼, 大概 20 個位元
: 組, 並且將其位址記錄下來, 然後載入此段, 就像平常一樣編輯。   存檔後回到
: DOS 下, 將其副檔名改回 .EXE, 這樣就完成破解了 !
: 注意: 有時候您可能會多花點時間哦。
: 磁碟中斷 (INT-13)
: -----------------
:     這個中斷向量, 使用 AH 暫存器來選擇其中斷服務常式編號, 以下列出此中
: 斷向量的相關資料:
: AH=0    重新設定磁碟控制器, 並且準備做磁碟 I/O
: AH=1    取得軟誓磁碟機控制器之狀態
: 系統狀態傳回值存放在 AL 暫存器:
:     AL     錯誤訊息
:   ----------------------------
:     00   - 存取成功
:     01   - 傳給磁碟中斷器的命令不合法
:    *02   - 找不到指定位址
:     03   - 磁碟防寫保護
:    *04   - 找不到指定磁區
:     08   - 操作時, DMA 發生超溢
:     09   - 企圖超越 DMA 邊界
:    *10   - 磁碟讀取時發生資料錯誤 (CRC)
:     20   - 控制器錯誤
:     40   - 搜尋失敗
:     80   - attachment failed
: (有 * 記號者, 代表軟體保護常用的項目)
: AH=2    讀取指定磁區
:   輸入參數
:      DL = 磁碟機編號 (0-3)
:      DH = 磁頭編號   (0 或 1)
:      CH = 磁軌編號
:      CL = 磁區編號
:      AL = 欲讀取之磁區數目
:   ES:BX = 使用者磁碟 I/O 緩衝區之位址
:   傳回值
:           如果進位旗標被設定為 1 的話,
:      AH = 錯誤代號 (請參考上面的資料)
:           如果進位旗標被設定為 0 的話,
:      AH = 0
:      AL = 真正被載入之磁區數
: AH=3 寫入磁碟 (輸入、傳回參數同上)
: AH=4 檢查指定磁區 (輸入、傳回參數同上, 不過不必指定 ES:BX)
: AH=5 格式化 (輸入、傳回參數同上, 不必指定 CL, AL, 而 ES:BX
:              則指向位址欄串列之位址)
:     INT 13 相關詳細資料, 請參考相關書籍或 IBM 技術參考手冊。
:                                【第二篇】
:     經過第一篇部分, 您應該了解有關 INT 13 的破解方法, 並且已經學會如何
: 尋找 .EXE 中的 CD 13 的方法了吧 ? 接下來的第二篇要跟您談的是有關覆疊部
: 分, 以及如何利用 LS 破解, 如果您還沒讀過第一篇, 建議您先找來看看, 第一
: 篇跟第二篇是擺在一起的。
: 尋找覆疊
: --------
:     當然, 您得尋找 .EXE 檔中的 CD 12, 有幾種情況, 一是在檔案本身中即可
: 找到 (不一定是 .EXE, 也有可能是 .COM), 一是 .EXE 含覆疊資料, 另一種則是
: CD 13 被編碼過或隱藏了 ! 在這邊我們不討論第一種情形, 而第三種, 我們已在
: 第一篇中提過了, 不懂的請隨時參考前面的方法 !
:     我們知道雖然程式中使用覆疊, 可是您在磁碟中並找不到覆疊, 所以, 可以使
: 用舊的 Norton Utilities (譯者註: 作者使用的是 3.1, 可見這份文件多久了 !)
: 其中隱藏的檔案部分, 很可能就是覆疊了。   如果您還找不到的話, 建議您使用
: PC-Watch !
: 使用 PC-Watch 來尋找覆疊
: ------------------------
:     啟動 PC-Watch 囉, 請不要管左邊那一欄的東東, 請看右邊那一欄, 在那一
: 欄搜尋, 找到 DOS21 後, 開啟檔案, 並且選定, 然後執行欲破解的程式囉, 重複
: 這些動作, 直到保護段找到為止, 您也可以執行 PC-Watch 的輸出來確定結果是
: 否正確。
: 您已經找到覆疊了 !
: ------------------
:     很好, 現在就把覆疊部分當成普通的 DOS 檔案一樣破解, 您不用擔心關於
: EXE 檔的問題, 因為 Debug 可底寫入覆疊檔, 我們在第一篇部分已經教您如
: 何破解了, 所以在此不再累述, 不過, 要提醒您一點, 無論是覆疊或是其他檔
: 案的破解, 在修改前, 請先自己備份一份下來, 以免一不小心改錯, 手邊卻已
: 經沒有「正本」了 ?!
: LockSmith 和 破解
: -----------------
:     由 AlphaLogic 公司所發展的 LockSmith 這個拷貝/檔案工具, 是您破解的
: 好幫手, 她的分析能力非常棒, 並且可以幫您找到保護段哩 !
:     我發現她非常好用, 在我破解之前, 都會使用她來幫我分析保護母片, 找出
: 保護段, 她可以幫助您兩件事情, 第一、她可以讓您知道如何來破解這個程式,
: 第二、她可以幫助您找出程式中的保護段哩。
:     我建議您先找來一份 LockSmith/PC, 如果您手邊還沒有的話, 可以問問一些
: 破解老手或軟體收集狂, 或許可以從他們那兒挖到哩, 另外, 我也建議您找來一份
: PC-Watch 以及 Norton Utilities, 這些程式可以幫助您在破解方面的工作哦 !
:                                              祝您破解愉快 ....
:                                              作者:   Buckaroo Banzai
:                                                    The Banzai Institute