• 标 题:个人学习SMC的一点体会--回答dREAMhTEATER兄 (2千字)
  • 作 者:mercury
  • 时 间:2000-10-7 13:06:50
  • 链 接:http://bbs.pediy.com

个人学习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兄交流。
    最后感谢曾经帮助过我的朋友们,谢谢你们!!!