• 标 题:人体生物节律查询7.09的破解。换个角度入手,可能会简单得多。 (4千字)
  • 作 者:hying[CCG]
  • 时 间:2000-8-13 9:44:51
  • 链 接:http://bbs.pediy.com

一般软件的注册方法是在注册对话框中输入一些信息后按“注册”按钮,然后它会进行验证,根据对、错给出相应的提示,或者告诉你需重新启动然后验证,但“人体生物节律查询7.09”却有些不同,以至有网友费了很大的力气跟踪它的注册过程,但一直没有发现关键点。现破解如下:
    我的机器号为“26402905”,在注册对话框中输入注册码“78787878”,切换到trw2000,用s 0,ffffffff '78787878'找到一个地址xxxxxxxx,然后下bpm xxxxxxxx,回到注册画面,按下“OK”,马上被拦截,再接下来就是艰苦的跟踪过程,过程比较复杂,似乎在进行一些计算,还没看到什么值得怀疑的内容就回到了“人体”,什么提示都没有。也不知道是否注册成功,怎么办?再追一次,还是一样。看一下它的帮助信息,它提示说没有注册就不能打印,试一下,果然一按“打印”,马上提示“未注册,不能打印”,既然这样就有办法了。下bpx messageboxexa,按“打印”,马上被拦截,然后慢慢走,看这个消息框是哪儿调用的。走啊走……直到地址47A3BA(如下),一看很值得怀疑,既然怀疑就要验证,怎么办?先bc去掉以前的中断,再下bp 47a33c,回到“人体”再按“打印”,马上拦截,然后一步一步走。到47a380,ecx与edi不相同,跳到下面提示未注册,如让47a382那个不跳,让47a3a5那个跳的话,就出现打印对话框。看样子关键果然在这,换一个注册码"34345656"注册一下后再试,发现在47a380处的ecx是“0c5d”保持不变,edi在改变,而且,每换一个注册码,edi都会改变,是否可以猜想,ecx由机器号决定,edi由注册码决定?再看edi是由内存中两个数决定的,那两个数是“0D6A”和“1618”,换成十进制不是“3434”和“5656”吗?有一些眉目了!再看下面47a3a3的比较,其中的edi也是由这两个数决定的,而且它应与eax相同,仔细看一下,列一个二元一次方程组解出这两个四位数,如不足四位如xxx则添零变成0xxx,然后连成一个8位数就是注册码。如果您对机器码的计算过程也感兴趣的话,也可试一下,只是一些求商、求余的算法,很简单。
0167:0047A33C  PUSH    EBX
0167:0047A33D  PUSH    ESI
0167:0047A33E  PUSH    EDI
0167:0047A33F  PUSH    ECX
0167:0047A340  MOV      [ESP],EDX
0167:0047A343  MOV      EBX,EAX
0167:0047A345  MOV      EAX,[004808AC]
0167:0047A34A  SUB      EAX,BYTE +47
0167:0047A34D  MOV      ECX,EAX
0167:0047A34F  SHL      ECX,02
0167:0047A352  LEA      ECX,[ECX+ECX*2]
0167:0047A355  MOV      EDX,[004808C0]
0167:0047A35B  SUB      EDX,BYTE +2F
0167:0047A35E  MOV      EDI,EDX
0167:0047A360  ADD      EDI,EDI
0167:0047A362  SUB      ECX,EDI
0167:0047A364  MOV      ESI,[004808B8]
0167:0047A36A  SUB      ESI,BYTE +2B
0167:0047A36D  IMUL    EDI,ESI,BYTE +0B
0167:0047A370  ADD      ECX,EDI
0167:0047A372  MOV      EDI,[004808B0]  \
0167:0047A378  ADD      EDI,EDI          <-算edi
0167:0047A37A  SUB      EDI,[004808C4]  /
0167:0047A380  CMP      ECX,EDI
0167:0047A382  JNZ      0047A3A7
0167:0047A384  MOV      ECX,[004808C4]  \
0167:0047A38A  ADD      ECX,ECX          <-算edi
0167:0047A38C  MOV      EDI,[004808B0]  /
0167:0047A392  SUB      EDI,ECX
0167:0047A394  LEA      EAX,[EAX+EAX*2]
0167:0047A397  ADD      EDX,EDX
0167:0047A399  LEA      EDX,[EDX+EDX*4]
0167:0047A39C  SUB      EAX,EDX
0167:0047A39E  LEA      EDX,[ESI+ESI*4]
0167:0047A3A1  SUB      EAX,EDX
0167:0047A3A3  CMP      EDI,EAX
0167:0047A3A5  JZ      0047A3C1
0167:0047A3A7  PUSH    BYTE +10
0167:0047A3A9  MOV      ECX,0047A430
0167:0047A3AE  MOV      EDX,0047A43C
0167:0047A3B3  MOV      EAX,[0047F828]
0167:0047A3B8  MOV      EAX,[EAX]
0167:0047A3BA  CALL    0044CB30        <-运行则提示“未注册”
0167:0047A3BF  JMP      SHORT 0047A428
0167:0047A3C1  MOV      EAX,[EBX+0318]
0167:0047A3C7  MOV      EDX,[EAX]
0167:0047A3C9  CALL    NEAR [EDX+3C]
0167:0047A3CC  TEST    AL,AL
0167:0047A3CE  JZ      0047A428
0167:0047A3D0  CMP      BYTE [EBX+2763],00
0167:0047A3D7  JZ      0047A3E6
0167:0047A3D9  XOR      EDX,EDX
0167:0047A3DB  MOV      EAX,[EBX+0410]
0167:0047A3E1  CALL    0042E7F0
0167:0047A3E6  MOV      BYTE [EBX+2762],01
0167:0047A3ED  CALL    0041F0DC
0167:0047A3F2  CALL    0041E7AC
0167:0047A3F7  MOV      EDX,[ESP]
0167:0047A3FA  MOV      EAX,EBX
0167:0047A3FC  CALL    00476A20
0167:0047A401  CALL    0041F0DC
0167:0047A406  CALL    0041E834
0167:0047A40B  MOV      BYTE [EBX+2762],00
0167:0047A412  CMP      BYTE [EBX+2763],00
0167:0047A419  JZ      0047A428
0167:0047A41B  MOV      DL,01
0167:0047A41D  MOV      EAX,[EBX+0410]
0167:0047A423  CALL    0042E7F0
0167:0047A428  POP      EDX
0167:0047A429  POP      EDI
0167:0047A42A  POP      ESI
0167:0047A42B  POP      EBX
0167:0047A42C  RET

破后感:对于这个软件,如果一味跟踪注册码输入过程的话,可能永远找不到关键所在,因为没有明显的对、错标志,或许根本不在那儿判断,但是只要找到一个标志,如我用的打印,从这个标志入手破解可能会变得很简单。还有就是破解一个软件时,如果费了很多精力仍然破不了,那可以想一想,是否可以换个角度、换个地方入手,找个最薄弱的环节,绕过它的马其诺防线,可能就会有“山重水复疑无路,柳暗花明又一村”的感觉。

  • 标 题:还方程组?建议软件作者去http://www.counterpane.com/搞份Twofish或Blowfish的源码来算注册码算了 (空)
  • 作 者:dr0
  • 时 间:2000-8-14 22:38:53