PersonalCorpus 版 (精华区)

发信人: CF (网事随风), 信区: Hacker
标  题: 第三章 破解windows 95软件的方法
发信站: 哈工大紫丁香 (2000年09月18日09:14:34 星期一), 站内信件

    特徵是当未注册时, 一进去会有延迟画面, 可能有时效限制(30天後不能用之类),
在某个地方有个注册功能, 打开之後是个对话框, 要求输入密码, 有时还有姓名和公司
名称.

程式如何判断注册与否?
    通常两种方式:
1.  在程式码的某一处, 藏有 "注册印记". 如00表未注册, 01为已注册. 当然也有
    很奇怪的数字, 如 f8 03 表已注册.
2.  install 时程式开 *.ini, 或写入 win.ini, 把资料存在那里.

程式如何保护:
    最通常是用你的name当作key, 经过复杂演算法, 算出注册码。但也有一些并不是
用你的name当作key算注册码的,而是name与注册码无关,注册码是固定,name是随便
输入就可以了。对于前者,较容易可算出注册码,而后者要算注册码就不是一件容易的
事了。关于两者的具体处理方法,会在下面文章详细介绍。
注册处理:

1.  当输入name, company, password 後, 立即比对, 正确的话立即做注册处理, 以後
    再也不判断, 不正确要求再输入. 不输入 name 的话, 保持 shareware 版.
2.  同1, 但以後一执行程式还是会判断.
3.  输入时不比对, 只写入资料於 *.ini, 程式执行时再比对.
对于第一种情况,是最容易破解的了,因为只要找到软件注册时的比较失败窗口的call,
在向上找一找,就可以找到一个可以跳过这个call的jz或jnz,只要把这个jz改为jmp,
就可以随便注册了,因为它们的只进行一次性的比较,所以只要在注册时强行使它们注
册成功,则以后就不用管了。
它们的一般形式为:
xxxx:xxxxxxxx  call  比较注册码的call
xxxx:xxxxxxxx  test eax , eax
xxxx:xxxxxxxx  jnz (或jz) xxxxxxxx 只要把这个jnz 改为jmp 就可以了
                :
                :
xxxx:xxxxxxxx  call  比较失败的窗口的call
对于第二,第三种情况,就不能这么简单地破解了,而要追进比较注册码的call里去,
如果可以算出注册码的,就万事大吉了,如果不能,就比较地麻烦了,只有按下面介绍
的方法进行crack了,要知软件始终不是你写的,所以不可能所有的软件都可以crack的,
只能各凭功力了。对于不能简单地算出注册码的软件,我们的唯一的方法是先在比较注
册码的call里,设一个断点,然后再重新运行软件,如果软件被中断的,那么这个软件
就有八成可以破解了,只要在比较注册码的call里找到那些jz或jnz会导致eax的值变化,
把这些指令改为nop或jmp(视具体情况而定),则一般都可以迎韧而解了。
对于第一种情况的破解实例:
Hex32bit
这是一个多功能的编辑软件,有很强大的功能,是一个很好用的32位工具软件。
1.输入Registeration code:48484848(随意)
2.按CTRL-D 进入WIN S-ICE
3.下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
4.下BPM  30:XXXXXXXX  R
5.按F5 退出
6.用鼠标击Register
7.程序被WIN S-ICE 中断
8.按F12回到Hworks32的天空
9.直按F10至以下程式:
0137:0041635F   CALL  00426A70  比较密码的CALL
0137:00416364    ADD  ESP , 04
0137:00416367    MOV  [EBP-10] , EAX
0137:0041636A   CMP DWORD PTR [ EBP-10 ] , 00
0137:0041636E    JZ  004163ED    错误时跳,只要改为nop…………就OK了
              :
              :
0137:004163E8    JMP 00416440
              :
              :
0137:0041640D   CALL  004354EE  出现注册失败窗口的CALL
所以下code on 抄下机器代码,打开Hworks32.exe
找0f8479000000
改909090909090
OK!!!完工。

对于第二种情况的破解实例:
FLMASK3.00
1. 用WINSOFT-ICE载入FLMASK32.EXE
2. 输入Your Name :Ru Feng(随意)
      Registration Key : 48484848(随意)
3. 按CTRL-D进入WINSOFT-ICE ,下S 30:0 LFFFFFFFF '48484848'得一地址30:XXXX
4. 下BPM 30:XXXX R
5. 按F5退出 
6. 确定Registration
7. 程序被WINSOFT-ICE中断
8. 按F12跳到FLMASK32的天空
9. 按F10直到以下程式:
0137:00452D1F  CALL  00443118 比较注册码CALL
0137:00452D24  TEST  AL , AL
0137:00452D24  JZ  00452E89 不正确时就跳
            :
            :
0137:00452E89  MOV DX , 0030
0137:00452E8D  MOV EAX , 00001CFC
0137:00452E92  CALL  00443A54  出现错误窗口
10. 所以我们追进0137:00452D1F  CALL  00443118中去
一直走下支会见到以下程式:
0137:00443145  CALL  00403BCC
0137:0044314A  CMP  EAX , 08  比较注册码是否8个数字
0137:0044314D  JNZ  00443209  不等则跳,跳就失败
              :
              :
0137:004431BF  CALL  004076A4 比较注册码是否正确
0137:004431BF  CMP  ESI , EAX
0137:004431C6  JNZ  00443209  不正确则跳
所以由汇编知识可知,只要把CMP ESI,EAX改为MOV EAX,ESI
把JNZ 00443209 改为NOP NOP
把JNZ 00443209 改为NOP NOP
则随意输入数字都可以注册了。
赶快下CODE ON指令抄下程序代码:
码0F85B6000000
改909090909090
码3BF07541
改8BC69090
用ULTRAEDIT32改FLMASK32.EXE就行了。
对于第三种情况的破解实例:
winzip6.3
1. 输入Name:Ru Feng(随意)
2. 输入Registeration:48484848(随意)
3. 按CTRL—D 进入WIN S-ICE
4. 下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
5. 下BPM  30:XXXXXXXX  R
6. 按F5 退出
7. 用鼠标击Ok
8. 程序被WIN S-ICE 中断
9. 按F12回到WINZIP的天空
10. 直按F10至以下程式:
0137:00409D89  CALL  004096EA   比较注册码的CALL
0137:00409D8E  TEST  EAX,EAX  注册码不正确时EAX=00000000
0137:00409D90  JNZ  00409DD3  当注册码正确就跳
             :
             :
0137:00409DA8  CALL  004230FD   弹出注册失败的窗口
11.追进CALL 004096EA 按F10一直走,会见到以下程式
0137:004097FC   PUSH  EAX
0137:004097FD   CALL  004465D0  比较注册码的CALL
0137:00409802   POP  ECX
0137:00409803   POP  ECX
0137:00409804   NEG  EAX
0137:00409806   SBB  EAX,EAX
0137:00409808   INC  EAX
0137:00409809   MOV [004728F8],EAX   当EAX=00000001时注册码正确
0137:0040980E   CMP DWORD PTR [004728F8] , 00 
0137:00409815   JNZ  004098A6   正确时跳
12.追进CALL 004465D0 按F10一直走,会见到以下程式
0137:004465EC   OR  AL,AL
0137:004465EE   JZ  0044661E
0137:004465F0   MOV  AL,[ESI]  在此下D DS:ESI可看到所填写的注册码‘48484848’
0137:004465F2   INC  ESI
0137:004465F3   MOV  AH,[EDI] 在此下D DS:EDI 可看到正确的注册码‘8A0A07ab’
0137:004465F5   INC  EDI
0137:004465F6   CMP  AH,AL  比较注册码地方
0137:004465F8   JZ  004465EC
你用Ru Feng作名字可找到‘8A0A07ab’这组注册码。
而对于那些注册码是固定的软件,破解就不是那么有规律了,只能各凭技巧了,具体情
况具体分析了。
例:
winplay3 2.0
1. 输入Your Name:Ru Feng(随意)
2. 输入Registeration code:48484848(随意)
3. 按CTRL—D 进入WIN S-ICE
4. 下S 30:0 LFFFFFFF '48484848' 得一地址30:XXXXXXXX
5. 下BPM  30:XXXXXXXX  R
6. 按F5 退出
7. 用鼠标击Register
8. 程序被WIN S-ICE 中断
9. 按F12回到WINPLAY3的天空
10. 直按F10至以下程式:
2C6F:XXXX CALL 2F17: 3D72  比较注册码
2C6F:XXXX OR DX,AX
2C6F:XXXX JNZ C632        不跳则显示成功窗口
           至
2C6F:C632  PUSH 21
2C6F:C634  PUSH 0000FFFF
2C6F:C63A  CALL 2C6F: 22AE  出现错误窗口
11. 按F8追进去CALL 2F17: 3D72
            至
2F17:3E76   CALL 2F17: 357E
再追进去
            至
2F17:35C6   PUSH  DWORD  PTR [BP+06]
2F17:35CA   CALL 2F17: 340E
追进去至以下比较程式:
2F17:346F   XOR  AX,AX
            REPNZ  SCASB
            NOT  CX
            DEC  CX
            CMP  CX,12   表示正确注册码有18个数字
            JNZ   3554    不等就跳,一跳就完了,所以改为四个NOP。
            CMP  BYTE  PTR ES:[SI+06], 2D  说明正确注册码的格式为:
                                             XXXXXX-XXXXXX-XXXX
            JNZ   354E    不等就跳,一跳就完了,所以改为四个NOP。 
            CMP  BYTE  PTR ES:[SI+0D],2D
            JNZ   354E    不等就跳,一跳就完了,所以改为四个NOP。 
            …………….
            …………….
            CALL  30F7: 25C0  比较注册码
            ADD  SP , 02
            CMP  AX , SI
            JZ  34F6       相等就跳,所以改为JMP  34F6
            ……………..
            ……………..
            CALL  30F7: 25C0
            ADD  SP , 02 
            MOV  SI , AX
            CMP  SI, [1D36]
            JGE   3522     跳则正确,不跳则错误,所以改为JMP  3522
            …………….
            …………….
12. 下CODE ON 把所有要改的机器码都抄下来,用ULTRAEDIT32在L3AUDIO.DLL中
修改。
           机器码                   改      
          0F85D700              90909090
          0F85C800              90909090
          0F85BF00              90909090
          83C4023BC67406        83C4023BC6EB06
          8BF03B36361D7D06     8BF03B36361D7D06


--

再不学习,你就要......

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.227.121]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.833毫秒