探索 http://programhunter.home.china.com
杂志宗旨:知识共享 资料共享 资源共享
制作成员:程式猎人
发行时间:2000-7-22
网站地址:http://programhunter.home.china.com

编辑寄语:

对于解密来说,如果你想成为这方面的高手的话,没有什么快捷方法,就是一个能够多吃苦,有毅力,有恒心,光有这些还是不够的,你还要多学习,你要学习汇编知识,要学习电脑语言,要学习解密技巧,要学习解密软件的使用,要学习……,总之你要学习的很多,所以希望想成功解密高手的人努力吧!

今天很高兴收到来自china_li的作品,一方面是看到了自己写的东西能够给大家一点帮助,另一方面是看到了大家能够通过自己的努力逐渐的提高自己的解密水平,我们解密者就是要吃苦,就是要专研。希望各位能够努力、努力、再努力噢!^-^

目 录:
1.
ExpPrint V1.4.1.7 程式猎人
CDRWIN V3.5 程式猎人
autorunman V1.0 china_li
HEX WorkShop 2.51 Sun Bird
2.
   
3.
   
4.
   
5.
   
返回
                ExpPrint V1.4.1.7
                        程式猎人
文件大小:153K
发布公司:http://ourworld.compuserve.com/homepage/jdd
软件简介:可以将文件夹或是文件变白中的文件名称输出成为文件或是直接打印出来的工具,提供
有多种文件排列方式。
追踪:name:dahuilang
      RN:01234567
  对于追踪这个软件来说,因为它只是一个dll文件,所以它没有主程序,它是使用系统文
件来进行工作的。所以如果你使用反汇编的方式进行破解的话,你到下面的目录中找到wind
ows/system/shellext/Expprint.dll,对它进行反汇编就可以了。现在我先使用TRW来追踪
这个软件,输入各项后设bpx hmemcpy(这个可是一个相应好的中断)
006F5FD4 8D45F0                  lea eax, dword ptr [ebp-10]  <-进入主程序中
006F5FD7 8BCE                    mov ecx, esi
006F5FD9 50                      push eax

* Possible Reference to Dialog: DialogID_0068, CONTROL_ID:0432, ""
                                  |
006F5FDA 6832040000              push 00000432
006F5FDF E8B1B40000              call 10011495

* Possible StringData Ref from Data Obj ->"ExplorerPrintListing"
                                  |
006F5FE4 68C4F30110              push 1001F3C4
006F5FE9 FF75F0                  push [ebp-10]
006F5FEC FF75EC                  push [ebp-14]
006F5FEF E84D0006F0              call 006F6141
006F5FF4 83C40C                  add esp, 0000000C
006F5FF7 84C0                    test al, al
006F5FF9 7412                    je 006F600D
006F5FFB FF75F0                  push [ebp-10]
006F5FFE FF75EC                  push [ebp-14]
006F6001 E8FB020000              call 006F6301
006F6006 59                      pop ecx
006F6007 A2600E0210              mov byte ptr [10020E60], al
006F600C 59                      pop ecx

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|006F5FF9(C)
|
006F600D 8065FC00                and byte ptr [ebp-04], 00
006F6011 8D4DF0                  lea ecx, dword ptr [ebp-10]
006F6014 E8A4DA0000              call 10013ABD
006F6019 834DFCFF                or dword ptr [ebp-04], FFFFFFFF
  程序从上面的位置进入主程序中,在这里依照经验来看,call 006F6141一定是一个重要
的函数,因为从它出来后,程序就跳跃了,程序就将窗口收起来了。如果你将jz变为jnz后
程序将在about选项中显示注册成功了,但是当你重新运行程序时,它依然告诉你它是一个
没有注册的版本,所以一定要进入那个函数中,对了在这里如果你将jz改为jnz后,程序就
变成随意注册版了。但是我想得到这个软件的注册码,所以进入研究它。

006F6141 55                      push ebp
006F6142 8BEC                    mov ebp, esp
006F6144 83EC7C                  sub esp, 0000007C
006F6147 53                      push ebx
006F6148 8D4584                  lea eax, dword ptr [ebp-7C]
006F614B FF7508                  push [ebp+08]
006F614E 32DB                    xor bl, bl
006F6150 50                      push eax

* Reference To: KERNEL32.lstrcpyA, Ord:0302h
                                  |
006F6151 FF1544920110            Call dword ptr [10019244]
006F6157 6A20                    push 00000020  20(H)=空格
006F6159 FF7508                  push [ebp+08]  dahuilang 
006F615C E8CF1A0000              call 006F7C30
006F6161 59                      pop ecx
006F6162 85C0                    test eax, eax
006F6164 59                      pop ecx
006F6165 0F84AE000000            je 006F6219
  进入后我在这里遇到了第一个拦路虎,上面这个je是一个重要的跳跃,因为我在这里就跳
跃了,无法运行到下面的注册码比较的地方,在这里我从经验可以知道它是为什么跳跃,但
是对于初学者在这里有可以就要难到你们,为什么?你们可以认为这里是比较的一个关键地
方,会研究它,可是如果你仔细分析函数在进入之前它压入函数的两个值你们就有可能从中
受到启发,因为程序压入两个值一个是name,而另一个是ASC中的20(H),这个值就是空格,
那么现在你们将name和空格联系在一起,你们就该知道程序在这里要检察什么了。程序在这
里检察你输入的name中是否有空格,这又要问大家为什么了,因为这个软件是外国人设计的
,它就要求你输入的name中有空格,这是一个常识吧。
  好了,现在将name:program hunter后程序将从上面的je处出来向下进行了。
006F618F 894510                  mov dword ptr [ebp+10], eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|006F61FB(U)
|
006F6192 8A06                    mov al, byte ptr [esi]
006F6194 84C0                    test al, al
006F6196 7465                    je 006F61FD
006F6198 83FF0C                  cmp edi, 0000000C
006F619B 7360                    jnb 006F61FD
006F619D 3C39                    cmp al, 39
006F619F 7E02                    jle 006F61A3
006F61A1 2C07                    sub al, 07

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|006F619F(C)
|
006F61A3 C0E004                  shl al, 04
006F61A6 46                      inc esi
006F61A7 88450B                  mov byte ptr [ebp+0B], al
006F61AA 8A06                    mov al, byte ptr [esi]
006F61AC 84C0                    test al, al
006F61AE 740D                    je 006F61BD
006F61B0 3C39                    cmp al, 39
006F61B2 7F04                    jg 006F61B8
006F61B4 2C30                    sub al, 30
006F61B6 EB02                    jmp 006F61BA

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|006F61B2(C)
|
006F61B8 2C37                    sub al, 37

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|006F61B6(U)
|
006F61BA 08450B                  or byte ptr [ebp+0B], al

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|006F61AE(C)
|
006F61BD 3B7D10                  cmp edi, dword ptr [ebp+10]
006F61C0 7D30                    jge 006F61F2
006F61C2 8A5C3D84                mov bl, byte ptr [ebp+edi-7C]
006F61C6 885D0C                  mov byte ptr [ebp+0C], bl
006F61C9 FF750C                  push [ebp+0C]

* Reference To: USER32.IsCharAlphaNumericA, Ord:017Eh
                                  |
006F61CC FF157C930110            Call dword ptr [1001937C]
006F61D2 85C0                    test eax, eax
006F61D4 751C                    jne 006F61F2
006F61D6 0FBEC3                  movsx eax, bl
006F61D9 50                      push eax
006F61DA E80E1A0000              call 006F7BED
006F61DF 85C0                    test eax, eax
006F61E1 59                      pop ecx
006F61E2 750E                    jne 006F61F2
006F61E4 80FB2E                  cmp bl, 2E
006F61E7 7409                    je 006F61F2
006F61E9 80FB2D                  cmp bl, 2D
006F61EC 7404                    je 006F61F2
006F61EE 80750B41                xor byte ptr [ebp+0B], 41

* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|006F61C0(C), 006F61D4(C), 006F61E2(C), 006F61E7(C), 006F61EC(C)
|
006F61F2 8A450B                  mov al, byte ptr [ebp+0B]
006F61F5 46                      inc esi
006F61F6 88443DF4                mov byte ptr [ebp+edi-0C], al  ***
006F61FA 47                      inc edi
006F61FB EB95                    jmp 006F6192
  现在我们又来到了这里,我在刚开始追踪到这里时,也以为这里是运算注册码的地方,因
为在这里有许多计算过程,可是经过分析这里其实是……,我先不说,让大家猜一猜,试一
试你们的功力。
  如何判断这里是做什么的,关键就在于看经过一个循环后程序将得到什么样的计算值,上
面的过程最后得到的值就为***这里,在这里你会发现al的值其实就是我们输入的数字,现
在大家知道上面的程序其实就是将你输入的数字转化为字符储存起来了。现在知道了吧,你
们就不用再分析上面那些程式了,向下走。
006F61FD 8D45F4                  lea eax, dword ptr [ebp-0C]
006F6200 6A0C                    push 0000000C
006F6202 50                      push eax
006F6203 8D45E8                  lea eax, dword ptr [ebp-18]
006F6206 50                      push eax
006F6207 E804190000              call 006F7B10
006F620C 8BD8                    mov ebx, eax
006F620E 83C40C                  add esp, 0000000C
006F6211 F7DB                    neg ebx
006F6213 1ADB                    sbb bl, bl
006F6215 5F                      pop edi
006F6216 FEC3                    inc bl
006F6218 5E                      pop esi

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|006F6165(C)
|
006F6219 8AC3                    mov al, bl
006F621B 5B                      pop ebx
006F621C C9                      leave
006F621D C3                      ret
  现在你们看到没有mov al, bl这个命令,这个可是call返回前al的值,我们想要得到的就
是这个al值,那么程序在那里能够改变这个al的值,这里因为只有一个call,所以进入call
 006F7B10中。
006F7B10 8B44240C                mov eax, dword ptr [esp+0C]
006F7B14 85C0                    test eax, eax
006F7B16 7444                    je 006F7B5C
006F7B18 8B542404                mov edx, dword ptr [esp+04]
006F7B1C 56                      push esi
006F7B1D 57                      push edi
006F7B1E 8BF2                    mov esi, edx
006F7B20 8B7C2410                mov edi, dword ptr [esp+10]
006F7B24 0BD7                    or edx, edi
006F7B26 83E203                  and edx, 00000003
006F7B29 7432                    je 006F7B5D
  到达je 006F7B5D处程序跳到006F7B5D处
006F7B5D 8BC8                    mov ecx, eax
006F7B5F 83E003                  and eax, 00000003
006F7B62 C1E902                  shr ecx, 02
006F7B65 742B                    je 006F7B92
006F7B67 F3                      repz
006F7B68 A7                      cmpsd
006F7B69 7427                    je 006F7B92 ***
   我想现在大家一定熟悉上面的比较形式吧,只要在这里使用命令d edi和d esi,你就可
以看到你输入的注册码和正确的注册码了。
  好了,这个程序又被破解成功了。现在如果你想再提高自己的话,你可以将这个软件的注
册机制作出来,但是它一定会花掉你不少时间,但是……
  
                       *************************************
                       *      name:program hunter          *
                       *      RN:2D1419111F52020031061B01  *
                       *************************************
返回
                   CDRWIN V3.5
                          程式猎人

主页:http://www.goldenhawk.com/ 
评价:★★★★ 
说明:CDRWin 是一套强力的 CD 刻录软件。它独特的「整片写入」刻录方式可让你完全
在控制结束 磁盘的配置,而且可让你产生商业性质的光盘。CDRWin 支持了音讯、
CD-ROM (模式1)、CD-ROM-XA(模式 2)、CD-I、混合模式和多次写入磁盘等的刻录方式。
CDRWin 的特征包括:ISO9660,支持开机光盘,伴唱机 CD+G 的支持,和磁盘 UPC 和磁
轨 ISRC 数支持。共享软件版的刻录速度被限制在1 倍的刻录速度。 
追踪:   name:dahuilang     
         company:program hunter        
         unlock key:01234567
         check  key:78787878
  因为以前曾经破解过它的V3.8A版,所以今天遇到这个V3.5版算是将它注册过程又研究
的一遍,我想这是一个规律吧,前版的保护方式一定要落后于新版的保护方式。现在就
来看一看它如何注册的。
00416EDC E859510300              call 0044C03A    name
00416EE1 8D4DE4                  lea ecx, dword ptr [ebp-1C]
00416EE4 51                      push ecx
00416EE5 8B4E60                  mov ecx, dword ptr [esi+60]
00416EE8 E84D510300              call 0044C03A    compay
00416EED 8B4E64                  mov ecx, dword ptr [esi+64]  
00416EF0 8D55E8                  lea edx, dword ptr [ebp-18]
00416EF3 52                      push edx
00416EF4 E841510300              call 0044C03A     unlock
00416EF9 8B4E68                  mov ecx, dword ptr [esi+68]  
00416EFC 8D45EC                  lea eax, dword ptr [ebp-14]
00416EFF 50                      push eax
00416F00 E835510300              call 0044C03A     RN
00416F05 8D4DBC                  lea ecx, dword ptr [ebp-44]  
00416F08 8D55C0                  lea edx, dword ptr [ebp-40]  
00416F0B 51                      push ecx
00416F0C 8D45C4                  lea eax, dword ptr [ebp-3C]
00416F0F 52                      push edx
00416F10 8B55E8                  mov edx, dword ptr [ebp-18]
00416F13 8D4DC8                  lea ecx, dword ptr [ebp-38]
00416F16 50                      push eax
00416F17 51                      push ecx

* Possible StringData Ref from Data Obj ->"%lx-%lx-%lx-%lx"
                                  |
00416F18 6848DE4600              push 0046DE48
00416F1D 52                      push edx
00416F1E E89DF30100              call 004362C0
00416F23 83C418                  add esp, 00000018
00416F26 83F804                  cmp eax, 00000004   比较是否有三个"-"
00416F29 7412                    je 00416F3D

* Possible Reference to String Resource ID=00255: "Maximum number of tracks allowed is 99."
                                  |
00416F2B 6AFF                    push FFFFFFFF
00416F2D 53                      push ebx

* Possible Reference to String Resource ID=00210: "Bad key format"
                                  |
00416F2E 68D2000000              push 000000D2
00416F33 E8C7AF0300              call 00451EFF
00416F38 E994000000              jmp 00416FD1
  上面是程序将注册的四个选项从内存中读出来,在这里还有一个地方进行比较,这里
是比较你的注册格中是否有三个"-",也就是注册码的格式为11-22-33-44,向下RN的格
式也是一样的。
00416F3D 8D45CC                  lea eax, dword ptr [ebp-34]
00416F40 8D4DD0                  lea ecx, dword ptr [ebp-30]
00416F43 50                      push eax
00416F44 8D55D4                  lea edx, dword ptr [ebp-2C]
00416F47 51                      push ecx
00416F48 8B4DEC                  mov ecx, dword ptr [ebp-14]
00416F4B 8D45D8                  lea eax, dword ptr [ebp-28]
00416F4E 52                      push edx
00416F4F 50                      push eax

* Possible StringData Ref from Data Obj ->"%lx-%lx-%lx-%lx"
                                  |
00416F50 6848DE4600              push 0046DE48
00416F55 51                      push ecx         <-RN
00416F56 E865F30100              call 004362C0
00416F5B 83C418                  add esp, 00000018
00416F5E 83F804                  cmp eax, 00000004
00416F61 740F                    je 00416F72

* Possible Reference to String Resource ID=00255: "Maximum number of tracks allowed is 99."
                                  |
00416F63 6AFF                    push FFFFFFFF
00416F65 53                      push ebx

* Possible Reference to String Resource ID=00210: "Bad key format"
                                  |
00416F66 68D2000000              push 000000D2
00416F6B E88FAF0300              call 00451EFF
00416F70 EB5F                    jmp 00416FD1
  上面就是验证RN的格式,这里已经没有什么可以留恋的了,赶快向下走。
00416F72 8B4DE4                  mov ecx, dword ptr [ebp-1C]
00416F75 8D55CC                  lea edx, dword ptr [ebp-34]
00416F78 8D45BC                  lea eax, dword ptr [ebp-44]
00416F7B 52                      push edx
00416F7C 8B55E0                  mov edx, dword ptr [ebp-20]
00416F7F 50                      push eax
00416F80 51                      push ecx
00416F81 52                      push edx
00416F82 C645FC04                mov [ebp-04], 04
00416F86 E825170000              call 004186B0
00416F8B 83C410                  add esp, 00000010
00416F8E C745FC03000000          mov [ebp-04], 00000003

* Possible Reference to String Resource ID=00255: "Maximum number of tracks allowed is 99."
                                  |
00416F95 6AFF                    push FFFFFFFF
00416F97 6A40                    push 00000040

* Possible Reference to String Resource ID=00186: "Welcome to CDRWIN...
This software is now unlocked and fully"
                                  |
00416F99 68BA000000              push 000000BA
00416F9E E85CAF0300              call 00451EFF
00416FA3 8BCE                    mov ecx, esi
00416FA5 E89A400300              call 0044B044
00416FAA E8F4820300              call 0044F2A3
00416FAF 85C0                    test eax, eax
00416FB1 740E                    je 00416FC1
  当我向下走时,本以为能够来到上面这个je处,可是程序在call 004186B0就出错了,
所以没有办法,进入call 004186B0这里。
  设UN:01-23-45-67
    RN:aa-bb-cc-dd
004186B0 8B4C2410                mov ecx, dword ptr [esp+10]
004186B4 53                      push ebx
004186B5 56                      push esi
004186B6 8B742414                mov esi, dword ptr [esp+14]
004186BA 8B19                    mov ebx, dword ptr [ecx]
004186BC 57                      push edi
004186BD 8B3E                    mov edi, dword ptr [esi]
004186BF 8B4604                  mov eax, dword ptr [esi+04]
004186C2 8BD7                    mov edx, edi
004186C4 33D0                    xor edx, eax
004186C6 3BDA                    cmp ebx, edx
004186C8 7525                    jne 004186EF
004186CA 8B5608                  mov edx, dword ptr [esi+08]
004186CD 8BDA                    mov ebx, edx
004186CF 33D8                    xor ebx, eax
004186D1 8B4104                  mov eax, dword ptr [ecx+04]
004186D4 3BC3                    cmp eax, ebx
004186D6 7517                    jne 004186EF
004186D8 8B460C                  mov eax, dword ptr [esi+0C]
004186DB 8BD8                    mov ebx, eax
004186DD 33DA                    xor ebx, edx
004186DF 8B5108                  mov edx, dword ptr [ecx+08]
004186E2 3BD3                    cmp edx, ebx
004186E4 7509                    jne 004186EF
004186E6 8B510C                  mov edx, dword ptr [ecx+0C]
004186E9 33C7                    xor eax, edi
004186EB 3BD0                    cmp edx, eax
004186ED 7413                    je 00418702
  进入后发现这里是运算及比较注册码的地方,但是大家在这里不要先将注册码的值修
改,因为在下面还有修改注册码的地方,也就是说下面修改后,上面的注册码还要变化
,所以现在就先到下面为妙。
00418702 8B5C2414                mov ebx, dword ptr [esp+14]
00418706 8B7C2410                mov edi, dword ptr [esp+10]
0041870A 56                      push esi
0041870B 53                      push ebx
0041870C 57                      push edi
0041870D E89E040000              call 00418BB0
00418712 83C40C                  add esp, 0000000C
00418715 85C0                    test eax, eax
00418717 7510                    jne 00418729
00418719 50                      push eax
0041871A 50                      push eax
0041871B 50                      push eax
0041871C 6837FFFFFF              push FFFFFF37
00418721 E84A610000              call 0041E870   出错函数
00418726 83C410                  add esp, 00000010
  现在如果大家听我的,你们将来到这里,现在看到上面有一个test命令了吧,这个可
是一个关键的比较命令,因为如果你从这个call出来后,没有跳跃,它将下面的call 
0041E870出错,进入call 00418BB0中
00418BC0 83C9FF                  or ecx, FFFFFFFF
00418BC3 33C0                    xor eax, eax
00418BC5 F2                      repnz
00418BC6 AE                      scasb
00418BC7 F7D1                    not ecx
00418BC9 49                      dec ecx
00418BCA 83F906                  cmp ecx, 00000006
00418BCD 726D                    jb 00418C3C
00418BCF 8B6C2418                mov ebp, dword ptr [esp+18]
00418BD3 83C9FF                  or ecx, FFFFFFFF
00418BD6 8BFD                    mov edi, ebp
00418BD8 F2                      repnz
00418BD9 AE                      scasb
00418BDA F7D1                    not ecx
00418BDC 49                      dec ecx
00418BDD 83F906                  cmp ecx, 00000006
00418BE0 725A                    jb 00418C3C
00418BE2 F7C3FFFF0000            test ebx, 0000FFFF
00418BE8 7452                    je 00418C3C
00418BEA F7C30000FFFF            test ebx, FFFF0000
00418BF0 744A                    je 00418C3C
   来到这个call中,可以发现这里先是验证name和company是否符合要求,程序要求它
们的个数应都大于等于6,验证后,程序还将验证unlock的第三项33是否小于等于4,如
果是的话,程序认为它们是错误的,所以在这里就先将UN和RN重新设置。
  UN:00000000-11111111-22222222-33333333
  RN:aaaaaaaa-bbbbbbbb-cccccccc-dddddddd
  我们设好后就要来到下面的地方了。
00418C2B C1EA08                  shr edx, 08
00418C2E 0BCA                    or ecx, edx
00418C30 33CE                    xor ecx, esi
00418C32 3BCB                    cmp ecx, ebx    ecx=33333333
00418C34 0F94C0                  sete al         edx=C89EFADB
   现在我们才能够得到UN的最后一项的值,对于其它的我们还要看程序。
00418729 8B06                    mov eax, dword ptr [esi]
0041872B C1E810                  shr eax, 10
0041872E 66334604                xor ax, word ptr [esi+04]
00418732 25FFFF0000              and eax, 0000FFFF
00418737 8D48FA                  lea ecx, dword ptr [eax-06]
0041873A 81F9A2040000            cmp ecx, 000004A2
00418740 7F0A                    jg 0041874C
00418742 83C00C                  add eax, 0000000C
00418745 3DA2040000              cmp eax, 000004A2
0041874A 7D13                    jge 0041875F
0041874C 6A00                    push 00000000
0041874E 6A00                    push 00000000
00418750 6A00                    push 00000000
00418752 6835FFFFFF              push FFFFFF35
00418757 E814610000              call 0041E870    出错函数
0041875C 83C410                  add esp, 00000010
0041875F 56                      push esi
00418760 E89B050000              call 00418D00
00418765 C605A87C470055          mov byte ptr [00477CA8], 55
   我们这回可以从call 00418BB0出来跳跃到下面了,
00418729 8B06                    mov eax, dword ptr [esi]
0041872B C1E810                  shr eax, 10
0041872E 66334604                xor ax, word ptr [esi+04]
00418732 25FFFF0000              and eax, 0000FFFF
00418737 8D48FA                  lea ecx, dword ptr [eax-06]
0041873A 81F9A2040000            cmp ecx, 000004A2
00418740 7F0A                    jg 0041874C
00418742 83C00C                  add eax, 0000000C
00418745 3DA2040000              cmp eax, 000004A2
0041874A 7D13                    jge 0041875F
0041874C 6A00                    push 00000000
0041874E 6A00                    push 00000000
00418750 6A00                    push 00000000
00418752 6835FFFFFF              push FFFFFF35
00418757 E814610000              call 0041E870
0041875C 83C410                  add esp, 00000010
0041875F 56                      push esi
00418760 E89B050000              call 00418D00
00418765 C605A87C470055          mov byte ptr [00477CA8], 55
  这里将是程序最后的比较地方了,它是如何比较的呢?
  首先将UN中的第四项的C89E取出来,再将UN第三项中后四个值2222取出来,将它们进
行XOR计算后,得到的值为eax,eax-6>04A2,而eax+c>04A2,现在我们知道计算过程就
很容易的得到符合条件的值了。通过计算知道使用CC3D替换2222就可以了。现在设
  UN00000000-11111111-2222CC3D-C89EFADB
  现在就再回到上面比较注册码的地方从中得到RN就可以了。
  大家知道这个软件将我们注册的资料都保存在那里吗?如果不知道的话,我在这里可
以告诉你们,它将资料都保存在同它主文件同一个目录下的cdrwin.dat文件中,如果你
对自己的破解没有信心,你可以先保存这个文件到另一个目录上,这样等到再注册时就
可以copy回来,又可以重新注册了。这点对3.8A版特别重新,因为在3.8A版中如果你使
用强行注册的话,它将在开始检查,如果不正确的注册码,你将再也无法使用这个软件
了。
  如果大家想要知道3.8A版的注册过程,你们可要等到下期了。
                  ***********************************************
                  *    name:dahuilang                           *
                  *    compayn:programhunter                    *
                  *    UN00000000-11111111-2222CC3D-C89EFADB    *
                  *    RN:C89EFADB-11111111-3333DD2C-EABC36E6   *
                  ***********************************************
返回
                             Autorunman V1.0

                                      china_li
第一种方法:(绿色字体为编者加入)
  1 先输入fake RN:123456
  2 ctrl+M调出TRW(crtl+D调出SI),在这里设bpx hmemcpy
  3 回到程序中,点击Register,SI弹出,然后键入BC *(清除断点)
  4 然后使用F12,跳跃直到00421D6A处就可以了
    :00421D6A 5E                      pop esi
    :00421D6B 5B                      pop ebx
    :00421D6C C3                      ret
    :00421D6D 8D4000                  lea eax, dword ptr [eax+00]
    :00421D70 56                      push esi
    :00421D71 8BF0                    mov esi, eax
    :00421D73 8BC6                    mov eax, esi
  5.然后使用F10,跳跃到0045AB90处,然后使用F8在0045AB98跟进去
        :0045AB90 8B55FC                  mov edx, dword ptr [ebp-04]
	:0045AB93 B848F94500              mov eax, 0045F948
	:0045AB98 E8878EFAFF              call 00403A24   - -<跟进去>- -
	:0045AB9D 8BC3                    mov eax, ebx
	:0045AB9F E87CFEFFFF              call 0045AA20
	:0045ABA4 84C0                    test al, al
	:0045ABA6 7413                    je 0045ABBB
  6.在00403A26处会自动跳到00403A4B
        :00403A24 85D2                    test edx, edx
	:00403A26 7423                    je 00403A4B
	:00403A28 8B4AF8                  mov ecx, dword ptr [edx-08]
	:00403A2B 41                      inc ecx
	:00403A2C 7F1A                    jg 00403A48
  7.然后按F8跑到00403A4D,看一下edx寄存器,S/N就在里面了
	:00403A4B 8710                    xchg dword ptr [eax], edx
	:00403A4D 85D2                    test edx, edx        - -  注册码就在这里 - -    S/N:36633990221A8
	:00403A4F 7413                    je 00403A64
	:00403A51 8B4AF8                  mov ecx, dword ptr [edx-08]
  总结一下:这个软件的S/N就是36633990221A8

  第二种方法:使用w32dasm破解  (这种方法是我一开始用TRW找了半天也没找到注册码,才用的)
  1.先输入fake RN:123456,点击Register,"咣"一声弹出一个错误框,说什么"Wrong serial number"
    好,用笔把他记下来,嘿嘿.开始喽.....
  2.运行W32Dasm,把要破解的这个软件反汇编,查找"Wrong serial number" 
    searching...........找到喽
	:0045AB98 E8878EFAFF              call 00403A24
	:0045AB9D 8BC3                    mov eax, ebx
	:0045AB9F E87CFEFFFF              call 0045AA20
	:0045ABA4 84C0                    test al, al
	:0045ABA6 7413                    je 0045ABBB

	* Possible StringData Ref from Code Obj ->"Thank you"
                                  |
	:0045ABA8 B8F0AB4500              mov eax, 0045ABF0
	:0045ABAD E8E2C5FEFF              call 00447194
	:0045ABB2 8BC3                    mov eax, ebx
	:0045ABB4 E85F000000              call 0045AC18
	:0045ABB9 EB0A                    jmp 0045ABC5
	
	* Possible StringData Ref from Code Obj ->"Wrong serial number"  --  就是这里  ---
	                                 |
	:0045ABBB B804AC4500              mov eax, 0045AC04
	:0045ABC0 E8CFC5FEFF              call 00447194
	* Referenced by a (U)nconditional or (C)onditional Jump at Address:
	|:0045ABB9(U)
	|
	:0045ABC5 33C0                    xor eax, eax
	:0045ABC7 5A                      pop edx
	:0045ABC8 59                      pop ecx
	:0045ABC9 59                      pop ecx
	:0045ABCA 648910                  mov dword ptr fs:[eax], edx
  
   3.疑????前面有一个"Thank you"  应该是注册后出现的窗口吧!再看一下他前面还有一个je 0045abbb,哦,原来如此,如果不对
的话就会跳到0045ABBB处,也就会出现错误框了
	:0045AB98 E8878EFAFF              call 00403A24
	:0045AB9D 8BC3                    mov eax, ebx
	:0045AB9F E87CFEFFFF              call 0045AA20
	:0045ABA4 84C0                    test al, al
	:0045ABA6 7413                    je 0045ABBB     ---关键在这里  ---
   4.好,既然这样,我就用UltraEdit-32打开Autorunman.exe查找E87CFEFFFF84C07413,把74改为75(也就是把JE改为JNE),然后Save.
        :0045ABA6 7413                    je 0045ABBB     把7413改为9090
   5.让我们来run一下,在注册框里随便填入几个数字,然后点击Register,Bingo......哈哈,跳出来的是"Thank you",
      "呼",功课终于完成了!好累呀!!!!!为了破这个软件,我断断续续用了好几天,好惭愧呀!想想别人只要几分钟我......哎!惭愧   

    ZZZZZZZZZZZZZZZzzzzzzzzzzzzzzzzzzzz
   
 
返回
HEX WorkShop 2.51
 
Step 1. Run HWORKS32.EXE
Step 2. Click on Help, About HEX Wo..
Step 3. Enter any code to get the error message. (You should write down this
        message) and exit the program.
Step 4. Run Norton Commander, go to HWS directory.
Step 5. Copy HWORKS32.EXE to HWORKS32.EXX (for backup) and copy HWORKS32.EXE to
        1.EXE (for use by W32Dasm)
Step 6. Run W32Dasm and disassemble 1.EXE.
Step 7. Once it's disassembled, click FIND TEXT, enter "You have entered an"
        (You should remember that error message), find it. (You won't find it
        at SDR window!)
Step 8. Now you should see the line:
 
        Name: DialogID_0075, # of Controls=003, Caption:"Registration Unsucce..
        001-ControlID:FFFF, Control Class:""Control Text:"You have entered an..
        002-ControlID:FFFF, Control Class:""Control Text:"Please confirm you..
 
Step 9. Ok, now you know what ControlID it'll use when entering wrong codes,
        Click FIND TEXT, enter "dialogid_0075" till you find:
 
        * Possible reference to DialogID_0075
        :0041E233 6A75             push 00000075
        :0041E235 8D8D10FFFFFF     lea ecx, dword ptr [ebp+FF10]
 
Step 10. Ok, now you must look for the last comparison like CMP, JNE, JE, etc
         before the error dialog. Press UP arrow key till you find:
 
         :0041E145 837DEC00         cmp dword ptr [ebp-14], 00000000
         :0041E149 0F8479000000     je 0041E1C8
         :0041E14F 8B8DFCFEFFFF     mov ecx, dword ptr [ebp+FEFC]
 
Step 11. Now you want see if it will work when you replace "je" with "jne".
         Make sure the green color bar is on :0041E149 0F8479000000 je 0041E1C8
         You should see Offset address below on the screen like @Offset
         0001D549h. It's where you can patch it in HWORKS32.EXE.
 
Step 12. Go back to Norton Commander, run HIEW HWORKS32.EXE, press F4 to select
         Decode mode (ASM), press F5 and enter 1D549. You should see like:
 
         0001D549: 0F847900               je     00001D5C6   ---------- (1)
         0001D54D: 0000                   add    [bx][si],al
         0001D54F: 8B8DFCFE               mov    cx,[di][0FEFC]
 
Step 13. That's where you can change the bytes, press F3, enter 0F85, press F9
         to update HWORKS32.EXE. Exit HIEW.
 
Step 14. Run HWORKS32.EXE and enter any code, does it work? NO?!?
         Hehe, don't worry, go back to NC. Copy HWORKS32.EXX to HWORKS32.EXE.
         (Now you see why I use EXX file for backup). Now go back to W32Dasm,
         you should be there where you were (at 0041E145).
 
Step 15. Press F3 to search again for "dialogid_0075", you should find:
 
         * Possible reference to DialogID_0075
         :00430ADD 6A75             push 00000075
         :00430ADF 8D8D10FFFFFF     lea ecx, dword ptr [ebp+FF10]
 
Step 16. Ok, now you must look for the last comparison like CMP, JNE, JE, etc
         before the error dialog. Press UP arrow key till you find:
 
         :004309EF 837DEC00         cmp dword ptr [ebp-14], 00000000
         :004309F3 0F8479000000     je 00430A72
         :004309F9 8B8DFCFEFFFF     mov ecx, dword ptr [ebp+FEFC]
 
Step 17. Now you want see if it will work when you replace "je" with "jne".
         (It should work) Move the bar to :004309F3 0F8479000000 je 00430A72.
         You should see Offset address below on the screen like @Offset
         0002FDF3h. It's where you can patch it in HWORKS32.EXE.
 
Step 18. Go back to Norton Commander, run HIEW HWORKS32.EXE, press F4 to select
         Decode mode (ASM), press F5 and enter 2FDF3. You should see like:
 
         0002FDF3: 0F847900               je     00001D5C6   ---------- (1)
         0002FDF7: 0000                   add    [bx][si],al
         0002FDF9: 8B8DFCFE               mov    cx,[di][0FEFC]
 
Step 19. That's where you can change the bytes, press F3, enter 0F85, press F9
         to update HWORKS32.EXE. Exit HIEW.
 
Step 20. Run again HWORKS32.EXE and enter any code, does it work? Voila!!
         Congratulations! You've cracked HEX WorkShop 2.51!
返回
初学天地:
                         破解教程三
                             程式猎人
  各位大家好,今天我有两件值得高兴的事情,一是收到了china_li写来的关于破解autora
nman V1.0的文章,这个很重要。因为我可以从这个文章中知道我写的教程是否能够对你们
初学者有一定的帮助;另一方面是我的房间从今天开始将处在空调的状态下,在这的生活的
确不是好过的,天气太热使我下午都无法工作,只能在晚上进行写文章,现在好了,我也可
以安心的给大家上课了。
  好了,言归正传,现在开始上课。
  我先同大家先说一下关于上次作业的问题,因为收到了china_li的文章,大家可以先看一
下它的破解过程,他在文章介绍的比较清楚了。对于这个软件的注册方式其实它的一个soft
 key,也就是它通过自身的计算来验证注册码的正确性,这个有些超出了我讲课的内容,但
是大家都能够做出来了,我想了也没有关系了。
  现在大家再回想一下上节课介绍的比较形式,如下:
     mov  eax [      ]  这里可以是地址,也可以是其它寄存器
     mov  edx [      ]  同上  通常这两个地址就储存着重要信息
     call 00??????
     jne(je)
 下面是它的另一种形式,如下:
     mov  eax [      ]  这里可以是地址,也可以是其它寄存器
     pop  edx           同上  通常这两个地址就储存着重要信息
     call 00??????
     jne(je)
 我想对于这个比较形式大家一定要记住,这个比较形式对于破解软件来说有着相当重要性
,我想这节课还讨论这个比较(因为它的确是太重要,在name->register number注册方式
中也常常出现)。这节课我们先不再讨论hard key,这加将举name->register number的例
子。
  我以前提到的例子都是国外人写的,今天就将国人写的一个软件当例子来用。
                           跟踪者 V1.10
                              程式猎人
软件名称:跟踪者 V1.10 [国产] 
软件授权:共享软件
注册费用:20元人民币
使用平台:Win95/98/NT/2000
软件简介:
  本软件运行后可记录键盘的动作,同时可以控制软件的自删除,启动时口令、随Win9X
一起启动及Win9X的系统秘密设置。启动时,无任何反应,隐蔽性好;运行本软件后,程序将
驻留内存,任务栏上无本程序图标,安全性高;并随时可以查阅记录文件,且每隔5分钟检
查一次是否上网,将记录文件发送给您。运行后按Ctrl+Alt+Space激活程序,初始口令为88
8。
追踪:
  对于追踪这个来说,它有着复杂的计算过程,但是却有着简单的比较过程,所以对于不想
得到这个软件注册机的人来说是一个相当简单的破解过程。比如我就是,现将列出来。
  现在就开始追踪,使用我以胶提到的过程。
  1 先输入name:dahuilang
          RN:01234567
  2 ctrl+M调出TRW(crtl+D调出SI),在这里设bpx hmemcpy
  3 回到程序中,点击OK,TRW弹出。 
  4 在这里你可以使用F12,跳跃直到上面0048C161处就可以了。
:0048C161 E8D63DFAFF              call 0042FF3C    读取RN
:0048C166 8D55F4                  lea edx, dword ptr [ebp-0C]  
:0048C169 8B45FC                  mov eax, dword ptr [ebp-04]
:0048C16C 8B80E0020000            mov eax, dword ptr [eax+000002E0]
:0048C172 E8C53DFAFF              call 0042FF3C    读取name
:0048C177 8B45F8                  mov eax, dword ptr [ebp-08]
:0048C17A E8397CF7FF              call 00403DB8
:0048C17F 85C0                    test eax, eax
:0048C181 7E0F                    jle 0048C192
  上面就是程序分别读取RN和name的地方,那么程序读取完name和RN后它将做什么呢?当然
是通过name来计算注册码了。它到底在那里比较呢?大家还记得这节主要讲什么了吗?大家
一定要记住下面的比较方式。
     mov  eax [      ]  这里可以是地址,也可以是其它寄存器
     mov  edx [      ]  同上  通常这两个地址就储存着重要信息
     call 00??????
     jne(je)
  这个比较形式为什么反复要大家记住呢?因为如果你追踪这个软件的话,向下看一定会发
现同这个比较形式相同的地方,如下:
:0048C29F E8D47BF7FF              call 00403E78
:0048C2A4 8B45F0                  mov eax, dword ptr [ebp-10]
:0048C2A7 8B55F4                  mov edx, dword ptr [ebp-0C]
:0048C2AA E8197CF7FF              call 00403EC8
:0048C2AF 0F8503010000            jne 0048C3B8
:0048C2B5 8B45FC                  mov eax, dword ptr [ebp-04]
:0048C2B8 8B80D0020000            mov eax, dword ptr [eax+000002D0]
:0048C2BE B201                    mov dl, 01
   大家看到上面的形式了吧,那么大家直到0048C2AA后,使用d eax;d edx你们会发现它将
是两个字符串,当然它们一个是你输入的fake RN,另一个是real RN。这回大家知道这个比
较方式的重要性了吧。
   我想再说一下刚才提到的例子,软件如果注册成功后将注册值保存在HKEY_CURRENT_USER
\Software\Microsoft\dxpsetghost\regsetpro这里,如果你再想研究它的话,你只要将它
删除掉就可以了。它将再一次要求你进行注册,你就可以再研究它了。
   对于这个比较方式对于初学者来说一定一定要记住,如果你能够掌握它,它可以加快你
找到破解点,具体能够快多少,我想如果你熟悉就可以不用多想多试就可以知道比较的重点
地方。
  现在又到了下课时间了,在下课之前还要给大家出两个作业,它是Speak Clock Deluxe V
2.01SuperMail V2.8h,这个作业大家如果有时间的话,不妨做一下,我想它会使你体会
到我介绍给大家的这个比较形式。
  好了,我现在在空调房中呆着,你们呢?
返回
问题答疑:
slccoff:建议在教学中设置当期破解软件的下载地址。
这个问题其它很好解决,一是我会努力找到它们的下载地址,另一个方面还要你们到我的网页中在初学天地的栏目中使用软件查找功能就能够找到。其实这个我是使用电脑报的查找能够,大家可以到电脑报的网址http://mydown.com查找
返回
网站介绍:《破解文库》永久URL:http://krack.126.com
现在向大家推荐的是一个相当好的网站,这个网站的站长iloveeagle是想解密者之所想,及解密者之所及。解密者不用再到其它网站上查找解密文章,只要登陆上这个网站你几乎可以查找到各种各样的解密文章,要不也不敢称为《解密文库》啊。希望想要提高自己的解密水平的人一定要进入这个网站来看一看。(这个网站可是我常常去了啊!)
返回
杂志信箱:
投稿信箱:discoveredit@china.com
答疑信箱:discoveranswer@china.com
斑竹信箱:programhunter@china.com
返回