发信人: 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)
页面执行时间:3.091毫秒