发信人: 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毫秒