发信人: Reinhard.bbs@bbs.sjtu.edu.cn (摘星), 信区: cnhacker
标  题: CCH 破解小经验谈 I -- Alex 整理(转寄)
发信站: 饮水思源站 (Fri Apr 25 20:48:31 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!sjtubbs
出  处: bbs.sjtu.edu.cn



CCH 破解小小经验谈 I:

小弟在小学六年级时, 便尝试过 S-ICE 来破解东西, 在这之前,
也曾经想过, 若有一天有软体能自动破解东西, 那该有多好,
可惜的是, 大部分都是专门针对某一软体的 Patch/Crack file 而已,
并无法以 1 的程式来对付 N 个软体, 所以後来大部分的软体都是自己
亲手Trace 宰割的.

後来我遇到了几个软体, 它们都喜欢采用 '标记法' 来判断程式
有没有注册与否, (我蛮喜欢玩 RA 的东西的) 所以每次用 S-ICE
改的时候, 往往光是一个未注册画面以及 DELAY, 就要大费周章的
找寻 CMP, ... , 然後找寻判断点後, 才来一一修改, 直到後来,
我才体会到可以使用 '填值法' 来对付, 因为一般的程式:

DOS 执行 -> 读取资料(注册码) -> 运算资料(算注册码) ->
比较是否与档案中注册码的资料相符 -> 填入注册标记(0或1) -> 程式开始....

关键就在於填入注册标记的地方, 只要在程式开始前, 修改"填入注册标记",
以下的程式便可以通通骗过....

方法有几个:  1: 运算出来永远跟档案的资料一样
             2: 直接填值, 无论注册与否, 都填成 1.
             3: ...

事实上, 以第二个方法较容易做到, 通常这种方法改 .EXE 档案的时候,
只要改一个码就够了, 所以我常常改软体的时候, 都只要改一个码就可以了.

这就是我为什麽要鼓励大家使用填值法的原因, 既简单, 又不怕改得不完全,
所以这种方法, 是比强制跳跃法安全多了.

另外介绍一种特别的方法... 这种方法不多见, 但很适合用在高阶语言的软体中,
像是 C 语言, 程式码都会这样写:

 CALL ->  PUSH BP
          MOV BP,SP
          .
          .
          .

假如我们遇到了一个软体:

 版权画面 CALL
 密码画面 CALL  -> PUSH BP
                   MOV BP,SP
                   ...
                   ...
                   填值..
                   RETF(RET)

 进入游戏 CALL

这种可以说是很普遍的写法, 因为很少人会将程式写在同一个 Function 里的,
所以找出程式中最後输入正确会填入的记忆体位置後, 可以将此 CALL 改写:

 密码画面 CALL  -> MOV SI,0xxxxh
                   MOV WORD PTR [SI],正确值
                   RETF(RET)

这样一来, 密码画面 CALL 反而变成破解的工具, 这不是很好吗?
(我已经将此招应用在 RICH3,格xX 王 中了...)

不过要用这招, 可要费点心思喔!

我下次再提些小经验与大家分享.

// By Chen Chun-han.
--


                                                    沉默的人
                                                 Reinhard Young

※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.96.212.29]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.628毫秒