软件名称:WinImage4.0(FileVersion:4.00.4000) WinImage.EXE 320KB
下载地点:http://www.winimage.com/winimage.htm
发 信 人: 井 风
时 间: 2000-12-08
破解工具:Trw20001.22
前 言:此软件有专业模式和标准模式两组注册码,试用期为30天。
详细过程:
一、 运行TRW2000程序
二、 运行WinImage4.0
三、 粗跟踪
1 点[选项]-->[注册]......
2 输入 姓名:CCCC 注册码: 88888888 (8个8)
3 Ctrl+N 呼出TRW,下断点:BPX getdlgitemtexta 按F5 返回
4 点[确定],被拦截,
0137:BFF61654 RET 0C
0137:BFF61657 MOV CL,96 <------中断于此行
0137:BFF61659 PUSH EBP
0137:BFF6165A MOV EBP,ESP
0137:BFF6165C PUSH ECX
0137:BFF6165D SUB ESP,BYTE +3C
0137:BFF61660 PUSH WORD [EBP+08]
0137:BFF61664 PUSH DWORD [EBP+0C]
0137:BFF61667 CALL `KERNEL32!SMapLS_IP_EBP_16`
0137:BFF6166C PUSH EAX
0137:BFF6166D PUSH WORD [EBP+14]
0137:BFF61671 CALL NEAR [BFF61206]
5 bd * , 作废所有断点
6 pmodule,直接到达WinImage领空,如下代码:
0137:00429093 CALL ESI
0137:00429095 MOV EDI,0043C420 <------来到此行,标记为[A]
0137:0042909A PUSH BYTE +7F
0137:0042909C PUSH EDI
0137:0042909D PUSH DWORD 0817
7 按F12,在1次后出现非法注册码错误对话框,点[确定]退出
8 分析: 按1次后即出现非法注册码错误框,说明验证注册码就在这段代码中(F12 运行到遇到 RET,
RETF,IRET指令时停下来)。接下来应找出具体哪个CALL产生错误框,并记录下大致跳转的过程。
以便可找出在哪个跳转位置可以跳过产生错误框的的CALL。进一步找出验证注册码、计算注册码
的位置。
四、 细跟踪
1 同前,输入注册码,呼出TRW,设断点:BPX 00429095 <--是上面A行
2 点[确定],被拦截,代码如下[步聚7后面]
3 bc * ,清除所有断点
4 现在要找出产生误注册码框的的哪个CALL:按F10,即单步跟踪。一直按F10,33次,出现错误框。
5 从步聚1开始重来,做到步聚4时按F10(33-1)次,即找出了产生错误的CALL,
是下面代码后部的0137:00429131 CALL 0041D7F5 ,就是这条指令产生错误框。
6 着重分析如何跳过0137:00429131 CALL 0041D7F5 这条产生错误框指令。读者可从下面代码由后面向前
读,弄懂本人的分析过程。
7 现在已基本找出验证注册码的地方了004290AE CALL 0042CD8320这个CALL中验证注册码,所以要深
入跟踪进这个CALL。(深入跟踪步聚在代码后面)
0137:00429093 CALL ESI
0137:00429095 MOV EDI,0043C420 <------四中的1步中断于此,按F10 33次出现错误框。
0137:0042909A PUSH BYTE +7F
0137:0042909C PUSH EDI
0137:0042909D PUSH DWORD 0817
0137:004290A2 PUSH DWORD [EBP+08]
0137:004290A5 CALL ESI
0137:004290A7 PUSH DWORD 0043C800
0137:004290AC PUSH EDI
0137:004290AD PUSH EBX
0137:004290AE CALL 0042CD8320 <---可以确定此CALL为计算或验证注册码,为后面跳转产生
判断条件(置EAX寄存器为1),所要着重深入跟踪此CALL
0137:004290B3 MOV ECX,[0043C800]
0137:004290B9 XOR EDX,EDX
0137:004290BB ADD ESP,BYTE +0C
0137:004290BE CMP EAX,EDX
0137:004290C0 MOV [0043C5E8],EAX
0137:004290C5 JZ 004290CD <---错注册码此行跳
0137:004290C7 MOV [0043C7C4],ECX
0137:004290CD CMP [0043C7C4],EDX
0137:004290D3 MOV [0043CA54],ECX
0137:004290D9 JNZ 004290E0 <---错注册码此行跳
0137:004290DB MOV [0043CA54],EAX
0137:004290E0 PUSH BYTE +01
0137:004290E2 CMP EAX,EDX <---比较寄存器(即相减),产生后一跳转判断的条件
0137:004290E4 POP ESI
0137:004290E5 JNZ 00429113 <---此行如果不跳则到C行,继而到B行出错
0137:004290E7 PUSH DWORD 2000
0137:004290EC PUSH DWORD 042D
0137:004290F1 PUSH DWORD 042B
0137:004290F6 MOV [0043C6CC],ESI
0137:004290FC PUSH DWORD [EBP+08]
0137:004290FF MOV [0043C824],ESI
0137:00429105 MOV [0043C420],DL
0137:0042910B MOV [0043C828],DL
0137:00429111 JMP SHORT 00429131 <---如执行到此行则跳到B行,记着[C]
0137:00429113 PUSH DWORD 2000
0137:00429118 PUSH DWORD 042D
0137:0042911D PUSH DWORD 042A
0137:00429122 MOV [0043C6CC],EDX
0137:00429128 PUSH DWORD [EBP+08]
0137:0042912B MOV [0043C824],EDX
0137:00429131 CALL 0041D7F5 <---第1步按F10键32次来到此行,执行此出错误框,记着[B]行
0137:00429136 ADD ESP,BYTE +10
0137:00429139 PUSH ESI
0137:0042913A PUSH DWORD [EBP+08]
0137:0042913D CALL `USER32!EndDialog`
0137:00429143 MOV EAX,ESI
0137:00429145 JMP SHORT 00429180
0137:00429147 PUSH DWORD [EBP+08]
0137:0042914A CALL 0041D512
0137:0042914F CMP DWORD [0043C5E8],BYTE +00
四、 深入跟踪
1 追入此004290AE CALL 0042CD8320 此行的CALL,来到下面代码。
0137:0042CD83 PUSH EBP <---深入跟踪追入后来到此行
0137:0042CD84 MOV EBP,ESP
0137:0042CD86 SUB ESP,0200
0137:0042CD8C PUSH ESI
.
.
.
0137:0042CDE0 JZ NEAR 0042CE86
0137:0042CDE6 LEA EAX,[EBP+FFFFFF00]
0137:0042CDEC PUSH EAX
0137:0042CDED LEA EAX,[EDI+14051948]
0137:0042CDF3 PUSH EAX
0137:0042CDF4 LEA EAX,[EBP+FFFFFE00]
0137:0042CDFA PUSH EAX
0137:0042CDFB CALL 0042CD36 <---此CALL计算注册码,
执行此行后D EAX 看见标准注册码:144E1ADC
0137:0042CE00 POP ECX
0137:0042CE01 POP ECX
0137:0042CE02 PUSH EAX
0137:0042CE03 CALL `CRTDLL!strcmp`
0137:0042CE08 POP ECX
0137:0042CE09 TEST EAX,EAX
0137:0042CE0B POP ECX
0137:0042CE0C JZ 0042CE86
0137:0042CE0E LEA EAX,[EBP+FFFFFF00]
0137:0042CE14 PUSH EAX
0137:0042CE15 LEA EAX,[EDI+17061954]
0137:0042CE1B PUSH EAX
0137:0042CE1C LEA EAX,[EBP+FFFFFE00]
0137:0042CE22 PUSH EAX
0137:0042CE23 CALL 0042CD36 <---此CALL计算另一注册码,
执行此行后D EAX 看见标准注册码:174F1AEB
0137:0042CE28 POP ECX
0137:0042CE29 POP ECX
0137:0042CE2A PUSH EAX
0137:0042CE2B CALL `CRTDLL!strcmp`
0137:0042CE30 POP ECX
0137:0042CE31 TEST EAX,EAX
0137:0042CE33 POP ECX
0137:0042CE34 JZ 0042CE86
0137:0042CE36 LEA EAX,[EBP+FFFFFF00]
0137:0042CE3C PUSH EAX
0137:0042CE3D LEA EAX,[EDI+10051981]
0137:0042CE43 PUSH EAX
0137:0042CE44 LEA EAX,[EBP+FFFFFE00]
0137:0042CE4A PUSH EAX
0137:0042CE4B CALL 0042CD36 <---此CALL计算注册码,
执行此行后D EAX 看见专业注册码:104E1815
0137:0042CE50 POP ECX
0137:0042CE51 POP ECX
0137:0042CE52 PUSH EAX
.
.
.
0137:0042CEC0 POP EDI
0137:0042CEC1 POP ESI
0137:0042CEC2 LEAVE
0137:0042CEC3 RET <---------执行此行返回呼叫程序
至此,找出注册码!
小 结:
此程序有三处计算注册码的子程序。有兴趣的读者可追入计算注册码的CALL,详细研究其
算法,写注册机。
姓名:CCCC 标准注册码:144E1ADC 或 174F1AEB 专业注册码:104E1815
后 记:
有疑问请与我联系:hz.cy@163.net
- 标 题:WinImage4.0(FileVersion:4.00.4000)
- 作 者:井风
- 时 间:2000-12-08
- 链 接:http://bbs.pediy.com/showthread.php?t=127837