发信人: Reinhard.bbs@bbs.sjtu.edu.cn (摘星), 信区: cnhacker
标 题: 黑客心经 ( 续一 ) -- bigmouth 整理(转寄)
发信站: 饮水思源站 (Fri Apr 25 20:56:42 1997)
转信站: Lilac!ustcnews!ustcnews!sjtunews!sjtubbs
出 处: bbs.sjtu.edu.cn
发信人: Godman@SMTH (天地通), 信区: Hacker
标 题: 黑客心经(续一)
发信站: 水木清华 (Fri Sep 29 10:23:09 1995)
转信站: SMTH
哇,破解这么容易啊!
其实不然:
uhs的作者大概不知道世界上还有 Hacker,所以没有增加任何一个
保密措施,这才让大家轻易得手。
首先我们归纳一下软件判断注册的过程:(我用 C 语言描述)
register_flag = judge_register();
if(register_flag == YES)
main_function();
else{
display_copyright();
......
main_function();
}
而在运行过程中,也会随机地调用(调用机率可以任意设置):
if( register_flag == NO){
if( Random_number() > some_constant ) {
display_copyright();
}
}
uhs 的基本结构就是上面的过程。因此我们将 register_flag
强行修改为 YES,就获得了出道以来的第一次胜利。
上次的答案是,如果出现的汇编代码是:
call xxxx
xor ax,ax
jnz xxxx
call xxxx
则应该是由如下的高级语言编译成的:
if(judge_register() != YES){
display_copyright();
.....;
}
估计程序运行中间的调用是:
if( judge_register() != YES ){
if( Random_number() > some_constant ) {
display_copyright();
}
}
针对这种检测方式,最好的办法是“釜底抽薪”:反汇编
judge_register()这个子程序,使它的返回值永远是 YES。估
计judge_register()是这样写的:
…………
if ( 注册号 == 正确的注册号 ) return YES;
else return NO;
修改为:
if ( 注册号 == 正确的注册号 ) return YES;
else return YES;
下一次我们结合 Qedit的破解介绍一些简单防破解的手段。
--
/------ \ | | / ------------odman 不 会 不 知 不 可 不 知 不 能 不 知 |
\--o000-----( )----OOOo-------| e-Mail: guoxm@tx6.dee.tsinghua.edu.cn /
--
沉默的人
Reinhard Young
※ 来源:·饮水思源站 bbs.sjtu.edu.cn·[FROM: 202.96.212.29]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.845毫秒