個人學習SMC的一點體會--回答dREAMhTEATER兄 (2千字)

看雪資料發表於2000-10-07

個人學習SMC的一點體會--回答dREAMhTEATER兄

    以下這一段是給那些經常在論壇中點播軟體的人看的。
    我學習破解約10個月,開始是從看了D版光碟中OSCAR10.1中的HELP開始的,後來就是YHQ,ERRORFREE等的文章。真正的學習主要來自於看雪論壇上諸君文章的教誨,以及後來從FRAVIA等處得到的教學文章。所以我也將自己所得回報給論壇各位,希望能有所助益。因為我是透過自學來獲得知識,同時我相信別人也是基本如此,所以我遵循傳統,除非你對破解中的具體問題有疑問,我才會盡我所能來回答。

    下面是關於學習SMC的一點體會。
    至今我嘗試了2次SMC破解,感覺這是一個PERFECT IDEA,但可能只在去除NAG等單一方面比較有用。

    第一次是嘗試《有聲有色3.10》,參考的是《iNLiNE pATCHiNG A pROGRAM pACKED WiTH ASProtect》作者是Predator [PC/MFD], April 26, 2000 ,這時對SMC還不瞭解,只是照樣畫葫蘆。補丁:
    1. 用PRODUMP載入主程式MUSREA.EXE, 知道基地址為00400000,為了找程式入口點, 用上D.BOY的衝擊波2000, 找到為0048A410. 所以offset = 0048a410-00400000 = 0008a410. 用ULTRAEDIT搜尋 10 a4 08, 找到惟一地址0004c49d. 因為我準備讓她先執行我的PATCH CODE, 所以準備在000003d0處修補,所以在0004c49d處將10 a4 08改為d0 03 00.
    2. patch code.
      首先感謝十三少與dREAMtHEATER的工作, 我知道要在
        cs:0048A4E1 0F8498000000      je  0048A57F 改為
                    eb74              jmp 0048A761
                    9090              nop
                    9090              nop
    3. 在000003d0處: 用hiew寫上如下程式碼
      000003d0:  0000                我發現跳到這裡後不能直接寫patch code,                                      必須過渡一下.
      000003d2:  66c705e1a44800e9eb  patch code 1
      000003db:  66c705e3a448000200  patch code 2
      000003e4:  66c705e5a448000090  patch code 3
      000003ed:  6810e44800          放入真實的入口點
      000003f2:  c3                  返回

    第二次就是破解《有聲有色3.16》,參考的是臺灣陳正穎的《破ASPACK2000》及Varroa原著,Winter Lee翻譯的《The Bat! 1.32破解方法》,用了一個下午。由此對SMC有了些初步的瞭解。具體文章請看論壇中的前作。

    對於補丁程式碼要放在程式中何處,我的理解是要在程式中的“空地”,同時這段程式碼在程式對映入記憶體後不能被覆蓋。所以在處理《有聲有色3.10》時我就沒有想到用TOPO來幫忙。而在《有聲有色3.16》版中我找到的空地結果證實是不能使用的,所以才有TOPO的出場。
    程式“空地”的使用與否,我是用以下方法知道的,可能很苯,誰用更好的方法還請指教。
    在《有聲有色3.16》中發現只有程式的頭部有空,所以用ULTRAEDIT在這個空地中寫了些標記“AAAAABBBBCCCDDE”,在程式執行後設個斷點將程式攔截,並在記憶體中進行搜尋,結果發現其在這個程式中的位置是cs:C2145D34,而不是在常規的cs:00400000節段內,所以就沒有用。我想dREAMhTEATER兄可能也是同樣問題。

    我將文中提到的文章及我的陋文打包為mercury.zip檔案,會請看雪兄提供下載,誰若有興趣歡迎交流。

    希望能有機會與dREAMhTEATER兄交流。
    最後感謝曾經幫助過我的朋友們,謝謝你們!!!

相關文章