• 标 题:初级~~初级~~~初初级~~~KanjiWeb 3.0 (汉字通)破解~~~~~~~~~ (8千字)
  • 作 者:Sam.com
  • 时 间:2001-3-11 0:31:30
  • 链 接:http://bbs.pediy.com

初级~~初级~~~初初级


软件名称:KanjiWeb 3.0 (汉字通)--台湾出的多语言支持软件,任何Windows 无需汉字版本,均可读写简体中文、
        繁体中文、日文。大小:1812KB 安装后也只有 2920KB(自带11种输入法)
下载地址: ftp.s2net.org.tw/pub/kanjiweb 这两个是官方网址,这软件到处都是,搜索一下吧,我不记得地址啦
          Http://kanjiweb.com
注册形式:在Register菜单里有个REGISTERED NO:1242637882(我这里是这个数,每次安装都不同),按Register鍵
          程序要求输入Serial No。程序肯定要用到上边这个数来运算的,到底是如何呢???
破解原因:这个程序我一直都在用,因为我台电脑很低级(和我一样)MMX166而已,这个小软件就很合适我用啦,虽然
        它的字库不够大,但也足够应付啦,另外它很稳定,我的电脑用其它类似的软件在某些时候一定会出错,用
        这个就绝对没事。其实这个软件我一早就破掉啦,在网上找的时候看到别人留下的SN,抄下一用,错的!看
        来这个RN是重点,这软件很容易破,看下面的代码就知道啦,所以我当时只花了几分钟就搞掂了,但却没有
        把过程记下来,而且我想为这个简单的东西做个注册机,于是有了这篇文章。但为此我却要重新安装它,因          为我根本找不到它的已注册标志在哪,有谁找到请指点一二。

下面有两种方法可以注册成功:一是找到注册码;二是半暴力破解(不用真正改动程序本身,只用改一次内存里的代码就OK啦),大家自己选择(我是完美主义追求者,尽量不用暴力),好啦请先从39EC处看起,因为这里是我最先发现的要害(请跟着我的思路走因为我是从后面往前找的)。另外这个程序是16位的,有点落后的感觉,调试时很不习惯。

:0001.39B4 8D8626FE              lea ax, [bp+FE26]
:0001.39B8 16                    push ss
:0001.39B9 50                    push ax
:0001.39BA FF76F6                push word ptr [bp-0A]
:0001.39BD 9AEE07093A            call 0001.07EE<----此call是运算RN的地方,但~~~~~唉~调用了系统call
:0001.39C2 83C408                add sp, 0008
:0001.39C5 8DB626FE              lea si, [bp+FE26]

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39D3(C)
|
:0001.39C9 803486                xor byte ptr [si], 86<---此处用86 xor 内存[si]里的数就得到真码啦
-------------------------------------------------------------------------------------------------
2.....此时我内存里的数是:B7 CC C9 C9 DF D0 C7 DF F4每位数与86相xor就得到了一个共9位的注册码,真码就放在[si]中替代了上面的这些数。我想这几个数一定是根据那个REGISTERED NO运算得来的,那如果找到了程序是如何运算那个RN的不就可以写出注册机啦吗?我用了个蠢办法来确定,我重新注册,当然是填入假注册码,因为我还不想它注册成功,然后中断,d刚才[si]的地方然后一直按F10,当经过39BD这个call后[si]就被写上以上的数据啦,但是当我跟进去的时候发现程序调用了call KERNEL.DOS3CALL这个call来运算以上数据的这个怎么跟呢,我在此就被阻了,这里请高手指点~~~~~~
-------------------------------------------------------------------------------------------------
:0001.39CC 46                    inc si
:0001.39CD 8D862FFE              lea ax, [bp+FE2F]
:0001.39D1 3BF0                  cmp si, ax
:0001.39D3 72F4                  jb 39C9
:0001.39D5 8DBE26FE              lea di, [bp+FE26]
:0001.39D9 8D76B6                lea si, [bp-4A]
:0001.39DC 8CD1                  mov cx, ss
:0001.39DE 8EC1                  mov es, cx
:0001.39E0 B9FFFF                mov cx, FFFF
:0001.39E3 33C0                  xor ax, ax
:0001.39E5 F2                    repnz
:0001.39E6 AE                    scasb
:0001.39E7 F7D1                  not cx
:0001.39E9 2BF9                  sub di, cx
:0001.39EB F3                    repz
:0001.39EC A6                    cmpsb  <----比较注册码的地方,这条语句很明显吧!!
-------------------------------------------------------------------------------------------------
1......调试时一样是用bpx hmemcpy,bd,pmodule来到程序领空(这里不能直接设bpx 39EB,因为程序是16位的,16位的程序地址是这样的:前面部分是段地址,后面部分是偏移地址,而段地址不是固定的,所以要用bpx hmemcpy来做个桥梁才能找到程序的领空---我这样说对吗??),一直按F10想看它几时出错,谁知走到此处我就停下来啦,因为这条语句太刺眼啦,好啦马上d ds:si看到了我输入的67676767,再d ds:di就可以看到真的注册码1JOOYVAYb啦,试一试~~~~Ok啦~~~当然因为我想做个注册机,所以要研究那个真注册码是怎么来的啦:-)于是往上看39C9处有可疑哟~~~~~
-------------------------------------------------------------------------------------------------
:0001.39ED 7405                  je 39F4
:0001.39EF 1BC0                  sbb ax, ax
:0001.39F1 1DFFFF                sbb ax, FFFF

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39ED(C)
|
:0001.39F4 0BC0                  or ax, ax
:0001.39F6 7542                  jne 3A3A  <----看这个call如果它不跳的话下面会不会还有呢??
-------------------------------------------------------------------------------------------------
4.....把它改成je 3A3A就不会跳啦,往下运行就注册成功了,但要退出程序再次进入才行,这时Register菜单就灰掉啦,程序作了标记,但我找不到!!!不过说真的我到现在都还不知道此软件如果不注册的话会有什么限制~~~~~呵呵~~~破了再说~~~~~~~
-------------------------------------------------------------------------------------------------
:0001.39F8 C646FBFF              mov byte ptr [bp-05], FF
:0001.39FC 33F6                  xor si, si
:0001.39FE 56                    push si
:0001.39FF 66FF76FC              push word ptr [bp-04]
:0001.3A03 FF76F6                push word ptr [bp-0A]
:0001.3A06 9A1A071B3A            call 0001.071A
:0001.3A0B 83C408                add sp, 0008
:0001.3A0E 6A04                  push 0004
:0001.3A10 8D46EE                lea ax, [bp-12]
:0001.3A13 16                    push ss
:0001.3A14 50                    push ax
:0001.3A15 FF76F6                push word ptr [bp-0A]
:0001.3A18 9A66092D3A            call 0001.0966
:0001.3A1D 83C408                add sp, 0008
:0001.3A20 6A01                  push 0001
:0001.3A22 8D46FB                lea ax, [bp-05]
:0001.3A25 16                    push ss
:0001.3A26 50                    push ax
:0001.3A27 FF76F6                push word ptr [bp-0A]
:0001.3A2A 9A6609413A            call 0001.0966
:0001.3A2F 83C408                add sp, 0008
:0001.3A32 EB1F                  jmp 3A53  <----上面那个call如果不跳的话就只有这个啦,而且还是一定
                                                会跳的,跳到了出错信息的后面去啦,上面的call就是要
                                                害啦,往上去改掉它



* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.3937(C)
|
:0001.3A34 8B76F8                mov si, [bp-08]
:0001.3A37 EB34                  jmp 3A6D


:0001.3A39 90                    nop

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.39F6(C)      <------从此处跳过来的~~~往上找此行
|
:0001.3A3A BE0100                mov si, 0001
:0001.3A3D FF760E                push word ptr [bp+0E]
:0001.3A40 68473A                push SEG ADDR of Segment 0001

* Possible StringData Ref from Code Seg 001 ->"SORRY !! ERROR SERIAL NO"<----出错信息!!!
-------------------------------------------------------------------------------------------------
3.....其实现在此软件已破掉了,现在说说用W32dasm来破解吧,相对来说应该容易一点。上面这个出错信息可以在W32dasm里的数据串里找到,只有一个地方。要想程序避开此处就要往前找啦
-------------------------------------------------------------------------------------------------
                                  |
:0001.3A43 68E45E                push 5EE4
:0001.3A46 685D3A                push SEG ADDR of Segment 0001

* Possible StringData Ref from Code Seg 001 ->"ERROR !!"
                                  |
:0001.3A49 68DA5E                push 5EDA
:0001.3A4C 6A00                  push 0000
:0001.3A4E 9A04170000            call USER.MESSAGEBOX

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0001.3A32(U)
|
:0001.3A53 66FF76F2              push word ptr [bp-0E]
:0001.3A57 FF76F6                push word ptr [bp-0A]
:0001.3A5A 9ADC11683A            call 0001.11DC
:0001.3A5F 83C406                add sp, 0006
:0001.3A62 FF76F6                push word ptr [bp-0A]
:0001.3A65 9AC6105D38            call 0001.10C6
:0001.3A6A 83C402                add sp, 0002


                                                                          24:07 2001-3-10