下载页面:
http://www.skycn.com/soft/6680.html
软件大小:
632 KB
软件语言: 简体中文
软件类别: 国产软件 / 共享版 / 视频处理
应用平台: Win9x/NT/2000/XP
加入时间:
2001-10-06 15:01:05
下载次数: 977
推荐等级: ****
开 发
商: http://www.boilsoft.com/
【软件简介】:DVDChapter
是一个独立的 DVD 光盘工具,用来抽取DVD 光盘上的章节,并把数据保存在硬盘上。本软件已广泛使用于视频点歌系统中,用于抽取 Karaoke 和 MTV
光盘上歌曲。支持 Microsoft Windows NT / 2000、95/98/Me。经过一年多的发展,DVDChapter 已成为一套成熟、稳定的工具软件。
【软件限制】:10次试用。
【作者声明】:初学Crack,只是感兴趣,没有其它目的。失误之处敬请诸位大侠赐教!
【破解工具】:TRW2000娃娃修改版、Ollydbg1.09、PEiD、W32Dasm 9.0白金版
—————————————————————————————————
【过
程】:
呵呵,坛子上有朋友提出这个东东,我半个月前就看了看,找到了核心,却水平太浅而无法求逆。
幸得
afanty 老师的指教,终于完成了这篇笔记。感谢 afanty 老师!
如果有错误当是我分析的原因。
DVDChapter.exe 无壳。Visual C++ 6.0 编写。
注册码格式为X-Y-Z 共3部分。简单假设X=1357
Y=2468 Z=9012
试炼码:1357-2468-9012
—————————————————————————————————
:004040D0 6AFF
push FFFFFFFF
:004040D2 68F0C14100
push 0041C1F0
:004040D7 64A100000000
mov eax, dword ptr fs:[00000000]
:004040DD 50
push eax
:004040DE 64892500000000
mov dword ptr fs:[00000000], esp
:004040E5
83EC08 sub esp,
00000008
:004040E8 56
push esi
:004040E9 8BF1
mov esi, ecx
:004040EB 6A01
push 00000001
:004040ED
E81A1F0100 call 0041600C
:004040F2
A1E4484200 mov eax, dword ptr
[004248E4]
:004040F7 89442408
mov dword ptr [esp+08], eax
:004040FB C744241400000000
mov [esp+14], 00000000
:00404103 89442404
mov dword ptr [esp+04], eax
*
Possible Reference to String Resource ID=00106: "o鲨?
|
:00404107 6A6A
push 0000006A
:00404109 8D4C240C
lea ecx, dword ptr [esp+0C]
:0040410D C644241801
mov [esp+18], 01
:00404112
E828450100 call 0041863F
:00404117
8B465C mov eax,
dword ptr [esi+5C]
====>EAX=1357-2468-9012
试炼码
:0040411A 50
push eax
:0040411B E860FBFFFF
call 00403C80
====>关键CALL!进入!
:00404120
83C404 add esp,
00000004
:00404123 85C0
test eax, eax
:00404125 7436
je 0040415D
====>跳则OVER!
:00404127 8B465C
mov eax, dword ptr [esi+5C]
:0040412A
50 push
eax
:0040412B E820FCFFFF call
00403D50
:00404130 83C404
add esp, 00000004
:00404133 8D4C2404
lea ecx, dword ptr [esp+04]
*
Possible Reference to String Resource ID=00104: "鑼?
"?(腹o?
|
:00404137 6A68
push 00000068
:00404139 E801450100
call 0041863F
:0040413E 8B442408
mov eax, dword ptr [esp+08]
:00404142
8B4C2404 mov ecx, dword
ptr [esp+04]
:00404146 6A00
push 00000000
:00404148 50
push eax
:00404149 51
push ecx
:0040414A
8BCE mov
ecx, esi
:0040414C E85F170100 call
004158B0
====>呵呵,胜利女神!
:00404151
8B16 mov
edx, dword ptr [esi]
:00404153 8BCE
mov ecx, esi
:00404155 FF92C4000000
call dword ptr [edx+000000C4]
:0040415B EB1E
jmp 0040417B
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404125(C)
|
*
Possible Reference to String Resource ID=00105: "???
?腹o鯰?
|
:0040415D 6A69
push 00000069
:0040415F 8D4C2408
lea ecx, dword ptr [esp+08]
:00404163
E8D7440100 call 0041863F
:00404168
8B442408 mov eax, dword
ptr [esp+08]
:0040416C 8B4C2404
mov ecx, dword ptr [esp+04]
:00404170 6A10
push 00000010
:00404172 50
push eax
:00404173
51 push
ecx
:00404174 8BCE
mov ecx, esi
:00404176 E835170100
call 004158B0
====>BAD
BOY!
* Referenced by a (U)nconditional or (C)onditional
Jump at Address:
|:0040415B(U)
|
:0040417B 8D4C2404
lea ecx, dword ptr [esp+04]
:0040417F C644241400
mov [esp+14], 00
:00404184
E852310100 call 004172DB
:00404189
8D4C2408 lea ecx, dword
ptr [esp+08]
:0040418D C7442414FFFFFFFF mov [esp+14],
FFFFFFFF
:00404195 E841310100 call
004172DB
:0040419A 8B4C240C
mov ecx, dword ptr [esp+0C]
:0040419E 5E
pop esi
:0040419F 64890D00000000
mov dword ptr fs:[00000000], ecx
:004041A6
83C414 add esp,
00000014
:004041A9 C3
ret
—————————————————————————————————
进入关键CALL:40411B call 00403C80
* Referenced
by a CALL at Addresses:
|:00401F4E , :0040411B
|
:00403C80
53 push
ebx
:00403C81 55
push ebp
:00403C82 56
push esi
:00403C83 8B742410
mov esi, dword ptr [esp+10]
====>ESI=1357-2468-9012 试炼码
:00403C87
33ED xor
ebp, ebp
:00403C89 57
push edi
:00403C8A 85F6
test esi, esi
:00403C8C 0F84B0000000
je 00403D42
:00403C92 803E00
cmp byte ptr [esi], 00
:00403C95
0F84A7000000 je 00403D42
:00403C9B
8BFE mov
edi, esi
:00403C9D 83C9FF
or ecx, FFFFFFFF
:00403CA0 33C0
xor eax, eax
:00403CA2 F2
repnz
:00403CA3 AE
scasb
:00403CA4
F7D1 not
ecx
:00403CA6 51
push ecx
====>取试炼码位数 ECX=F
:00403CA7 6A40 push 00000040
* Reference To: KERNEL32.LocalAlloc, Ord:01C8h
|
:00403CA9 FF1550D24100
Call dword ptr [0041D250]
:00403CAF 8BD8
mov ebx, eax
:00403CB1
85DB test
ebx, ebx
:00403CB3 0F8489000000 je
00403D42
:00403CB9 8BFE
mov edi, esi
:00403CBB 83C9FF
or ecx, FFFFFFFF
:00403CBE 33C0
xor eax, eax
:00403CC0 6A2D
push 0000002D
:00403CC2
F2 repnz
:00403CC3
AE scasb
:00403CC4
F7D1 not
ecx
:00403CC6 2BF9
sub edi, ecx
:00403CC8 53
push ebx
:00403CC9 8BC1
mov eax, ecx
:00403CCB 8BF7
mov esi,
edi
:00403CCD 8BFB
mov edi, ebx
:00403CCF C1E902
shr ecx, 02
:00403CD2 F3
repz
:00403CD3 A5
movsd
:00403CD4
8BC8 mov
ecx, eax
:00403CD6 83E103
and ecx, 00000003
:00403CD9 F3
repz
:00403CDA A4
movsb
:00403CDB 8BF3
mov esi,
ebx
====>ESI=1357-2468-9012
试炼码
:00403CDD E80E2E0000
call 00406AF0
====>检测CALL!看看注册码是否是X-Y格式
:00403CE2
83C408 add esp,
00000008
:00403CE5 85C0
test eax, eax
:00403CE7 7452
je 00403D3B
====>跳则OVER!
:00403CE9 8B7C2414 mov edi, dword ptr [esp+14]
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403D11(C)
|
:00403CED
45 inc
ebp
====>EBP依次增1
:00403CEE
C60000 mov byte
ptr [eax], 00
:00403CF1 8BCD
mov ecx, ebp
:00403CF3 40
inc eax
:00403CF4 49
dec ecx
:00403CF5
7409 je 00403D00
:00403CF7
49 dec
ecx
:00403CF8 7508
jne 00403D02
:00403CFA 89742414
mov dword ptr [esp+14], esi
:00403CFE EB02
jmp 00403D02
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00403CF5(C)
|
:00403D00
8BFE mov
edi, esi
* Referenced by a (U)nconditional or (C)onditional
Jump at Addresses:
|:00403CF8(C), :00403CFE(U)
|
:00403D02 6A2D
push 0000002D
:00403D04
50 push
eax
:00403D05 8BF0
mov esi, eax
====>ESI=2468-9012
:00403D07
E8E42D0000 call 00406AF0
====>检测CALL!看看注册码是否是Y-Z格式
====>即:这2个检测表明注册码格式为X-Y-Z
:00403D0C
83C408 add esp,
00000008
:00403D0F 85C0
test eax, eax
:00403D11 75DA
jne 00403CED
:00403D13 83FD02
cmp ebp, 00000002
====>EBP不等于2则跳!
:00403D16
7523 jne
00403D3B
====>跳则OVER!
:00403D18
85F6 test
esi, esi
:00403D1A 741F
je 00403D3B
:00403D1C 8B4C2414
mov ecx, dword ptr [esp+14]
:00403D20 51
push ecx
====>ECX=2468
:00403D21
56 push
esi
====>ESI=9012
:00403D22
57 push
edi
====>EDI=1357
:00403D23
E808FFFFFF call 00403C30
====>核心CALL!进入!
:00403D28
83C40C add esp,
0000000C
:00403D2B 8BF0
mov esi, eax
:00403D2D 53
push ebx
* Reference
To: KERNEL32.LocalFree, Ord:01CCh
|
:00403D2E
FF154CD24100 Call dword ptr [0041D24C]
:00403D34
8BC6 mov
eax, esi
:00403D36 5F
pop edi
:00403D37 5E
pop esi
:00403D38 5D
pop ebp
:00403D39
5B pop
ebx
:00403D3A C3
ret
* Referenced by a (U)nconditional
or (C)onditional Jump at Addresses:
|:00403CE7(C), :00403D16(C), :00403D1A(C)
|
:00403D3B
53 push
ebx
* Reference To: KERNEL32.LocalFree, Ord:01CCh
|
:00403D3C FF154CD24100
Call dword ptr [0041D24C]
* Referenced
by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403C8C(C), :00403C95(C),
:00403CB3(C)
|
:00403D42 5F
pop edi
:00403D43 5E
pop esi
:00403D44 5D
pop ebp
:00403D45
33C0 xor
eax, eax
====>清0则OVER! 爆破点①!
:00403D47
5B pop
ebx
:00403D48 C3
ret
—————————————————————————————————
进入核心CALL:403D23
call 00403C30
* Referenced by a CALL at
Address:
|:00403D23
|
:00403C30 8B442404
mov eax, dword ptr [esp+04]
====>EAX=1357
:00403C34 53
push
ebx
:00403C35 85C0
test eax, eax
:00403C37 57
push edi
:00403C38 7440
je 00403C7A
:00403C3A
8B7C2410 mov edi, dword
ptr [esp+10]
====>EDI=9012
:00403C3E
85FF test
edi, edi
:00403C40 7438
je 00403C7A
:00403C42 8B5C2414
mov ebx, dword ptr [esp+14]
====>EBX=2468
:00403C46 85DB
test ebx, ebx
:00403C48
7430 je 00403C7A
:00403C4A
56 push
esi
:00403C4B 50
push eax
:00403C4C E83FFFFFFF
call 00403B90
一、 ====>对1357进行运算得出C62B
:00403C51
57 push
edi
:00403C52 8BF0
mov esi, eax
====>ESI=EAX=C62B
:00403C54
E837FFFFFF call 00403B90
二、
====>对9012进行运算得出66866
:00403C59
53 push
ebx
:00403C5A 8BF8
mov edi, eax
====>EDI=EAX=66866
:00403C5C
E82FFFFFFF call 00403B90
三、
====>对2468进行运算得出181A0
:00403C61
57 push
edi
:00403C62 56
push esi
:00403C63 8BD8
mov ebx, eax
====>EBX=EAX=181A0
:00403C65
E886FFFFFF call 00403BF0
四、
====>运算CALL!进入!
:00403C6A 83C414
add esp, 00000014
:00403C6D
33C9 xor
ecx, ecx
:00403C6F 3BC3
cmp eax, ebx
====>比较了!如果这2者相等则OK!爆破点②!
====>EAX=498545E
====>EBX=181A0
:00403C71 0F94C1
sete cl
:00403C74
5E pop
esi
:00403C75 5F
pop edi
:00403C76 8BC1
mov eax, ecx
:00403C78 5B
pop ebx
:00403C79 C3
ret
—————————————————————————————————
进入运算一、二、三: call 00403B90
* Referenced
by a CALL at Addresses:
|:00403C4C , :00403C54 , :00403C5C
|
:00403B90 8B542404 mov
edx, dword ptr [esp+04]
:00403B94 33C0
xor eax, eax
:00403B96 85D2
test edx, edx
:00403B98 744F
je 00403BE9
:00403B9A
8A0A mov
cl, byte ptr [edx]
一、 ====>CL=依次取1357字符的HEX值
—————————————————————————
二、
====>CL=依次取9012字符的HEX值
—————————————————————————
三、
====>CL=依次取2468字符的HEX值
:00403B9C
84C9 test
cl, cl
:00403B9E 744C
je 00403BEC
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:00403BE6(C)
|
:00403BA0 80F930
cmp cl, 30
:00403BA3
7C11 jl 00403BB6
:00403BA5
80F939 cmp cl, 39
:00403BA8
7F0C jg 00403BB6
:00403BAA
0FBEC9 movsx ecx,
cl
:00403BAD 8D04C0
lea eax, dword ptr [eax+8*eax]
一、 1、 ====>EAX=00 * 9=0
2、 ====>EAX=01 * 9=9
3、
====>EAX=27 * 9=15F
4、 ====>EAX=581 *
9=3189
—————————————————————————
二、 1、 ====>EAX=00
* 9=0
2、 ====>EAX=09 * 9=51
3、 ====>EAX=144 * 9=B64
4、
====>EAX=2D91 * 9=19A19
—————————————————————————
三、 1、 ====>EAX=00
* 9=0
2、 ====>EAX=02 * 9=12
3、 ====>EAX=4C * 9=2AC
4、
====>EAX=AB6 * 9=6066
:00403BB0 8D4481D0
lea eax, dword ptr [ecx+4*eax-30]
一、
1、 ====>EAX=31 + 4*0 -30=1
2、
====>EAX=33 + 4*9 -30=27
3、
====>EAX=35 + 4*15F -30=581
4、 ====>EAX=37
+ 4*3189 -30=C62B
—————————————————————————
二、 1、 ====>EAX=39
+ 4*0 -30=9
2、 ====>EAX=30 + 4*51
-30=144
3、 ====>EAX=31 + 4*B64
-30=2D91
4、 ====>EAX=32 + 4*19A19 -30=66866
—————————————————————————
三、 1、 ====>EAX=32 + 4*0 -30=2
2、 ====>EAX=34 + 4*12 -30=4C
3、
====>EAX=36 + 4*2AC -30=AB6
4、 ====>EAX=38
+ 4*6066 -30=181A0
:00403BB4 EB2A
jmp 00403BE0
====>如果是字母的话则进行下面的运算!
* Referenced by
a (U)nconditional or (C)onditional Jump at Addresses:
|:00403BA3(C), :00403BA8(C)
|
:00403BB6
80F941 cmp cl, 41
:00403BB9
7C11 jl 00403BCC
:00403BBB
80F95A cmp cl, 5A
:00403BBE
7F0C jg 00403BCC
:00403BC0
0FBEC9 movsx ecx,
cl
:00403BC3 8D04C0
lea eax, dword ptr [eax+8*eax]
:00403BC6 8D4481C9
lea eax, dword ptr [ecx+4*eax-37]
:00403BCA
EB14 jmp
00403BE0
* Referenced by a (U)nconditional or (C)onditional
Jump at Addresses:
|:00403BB9(C), :00403BBE(C)
|
:00403BCC 80F961
cmp cl, 61
:00403BCF
7C18 jl 00403BE9
:00403BD1
80F97A cmp cl, 7A
:00403BD4
7F13 jg 00403BE9
:00403BD6
0FBEC9 movsx ecx,
cl
:00403BD9 8D04C0
lea eax, dword ptr [eax+8*eax]
:00403BDC 8D4481A9
lea eax, dword ptr [ecx+4*eax-57]
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00403BB4(U),
:00403BCA(U)
|
:00403BE0 8A4A01
mov cl, byte ptr [edx+01]
:00403BE3 42
inc edx
:00403BE4 84C9
test cl,
cl
:00403BE6 75B8
jne 00403BA0
====>继续循环?!
:00403BE8 C3 ret
根据
afanty 大哥的指教,这段代码其实是将1357、2468、9012看成36进制数,然后转换成16进制数的结果。
X=1357(36进制)=C62B(H)
;Y=2468(36)=181A0(H) ;Z=9012(36)=66866(H)
—————————————————————————————————
进入运算CALL四:00403C65
call 00403BF0
* Referenced by a CALL at
Address:
|:00403C65
|
:00403BF0 8B4C2404
mov ecx, dword ptr [esp+04]
====>ECX=[esp+04]=C62B
:00403BF4
56 push
esi
:00403BF5 8BC1
mov eax, ecx
====>EAX=ECX=C62B
:00403BF7
33D2 xor
edx, edx
:00403BF9 BE40B60000 mov
esi, 0000B640
====>ESI=B640
:00403BFE
F7F6 div
esi
====>EDX=C62B % B640=FEB
:00403C00
8D0492 lea eax,
dword ptr [edx+4*edx]
====>EAX=FEB
* 5=4F97
:00403C03 8D04C2
lea eax, dword ptr [edx+8*eax]
====>EAX=FEB + 8*4F97=28CA3
:00403C06
8D04C2 lea eax,
dword ptr [edx+8*eax]
====>EAX=FEB
+ 8*28CA3=147503
:00403C09 8D3440
lea esi, dword ptr [eax+2*eax]
====>ESI=147503 * 3=3D5F09
:00403C0C
B88303E659 mov eax, 59E60383
====>EAX=59E60383
:00403C11
F7E1 mul
ecx
====>59E60383 * C62B=45970059E901
====>EAX=59E60383 * C62B=0059E901
====>EDX=4597 进位 入 EDX
:00403C13
8B44240C mov eax, dword
ptr [esp+0C]
====>EAX=[esp+0C]=66866
:00403C17
C1EA0E shr edx,
0E
====>EDX=4597 SHR 0E=00000001
:00403C1A
8D0CC500000000 lea ecx, dword ptr [8*eax+00000000]
====>ECX=8 * 66866=334330
:00403C21
03F2 add
esi, edx
====>ESI=3D5F09 + 1=3D5F0A
:00403C23
2BC8 sub
ecx, eax
====>ECX=334330 - 66866=002CDACA
:00403C25
8D0488 lea eax,
dword ptr [eax+4*ecx]
====>EAX=66866
+ 4 * 2CDACA=00B9D38E
:00403C28 8D1440
lea edx, dword ptr [eax+2*eax]
====>EDX=B9D38E * 3=22D7AAA
:00403C2B
8D0456 lea eax,
dword ptr [esi+2*edx]
====>EAX=3D5F0A
+ 2 * 22D7AAA=498545E
:00403C2E 5E
pop esi
:00403C2F
C3 ret
根据
afanty 大哥的指教,这段代码可以表示为:(X%0xb640)*987+(X*0x59E60383)>>46+Z*174
注:987、46、174是10进制值。
—————————————————————————————————
【算 法 总 结】:
1、注册码格式为X-Y-Z 三个部分。每个部分必须是数字或字母。
2、分别把注册码的3组字符看成36进制数,求出其16进制值。
X=1357(36进制)=C62B(H)
;Y=2468(36)=181A0(H);Z=9012(36)=66866(H)
3、对X和Z的16进制值进行运算得出498545E
(0xC62B
% 0xb640) * 987 + (0xC62B * 0x59E60383) >> 46 + 0x66866 * 174=498545E
注:987、46、174是10进制值。
4、用上面得出的 498545E 和 Y 的16进制值进行比较,相等则OK!
5、所以我的Y应等于498545E(H)的36进制值19WCIM
呵呵,当然你也可以假设X=1
Y=2 Z=3,这样会方便点。^O^^O^^O^^O^
—————————————————————————————————
【完 美 爆 破】:
1、00403D45 33C0
xor eax, eax
改为: B001
mov al, 01
2、00403C6F 3BC3
cmp eax, ebx
改为:
3BC0 cmp
eax, eax
这样就可以任意输入注册码了。^O^^O^^O^^O^
—————————————————————————————————
【注册信息保存】:
REGEDIT4
[HKEY_LOCAL_MACHINE\Software\BoilSoft\DvdChapter\SN]
"sn"="1357-19WCIM-9012"
—————————————————————————————————
【整 理】:
一组可用的注册码:1357-19WCIM-9012
—————————————————————————————————
, _/
/| _.-~/
\_ , 青春都一饷
( /~ / \~-._
|\
`\\ _/
\ ~\ ) 忍把浮名
_-~~~-.) )__/;;,. \_ //'
/'_,\ --~ \ ~~~- ,;;\___( (.-~~~-.
换了破解轻狂
`~ _( ,_..--\ ( ,;'' /
~-- /._`\
/~~//' /' `~\
) /--.._, )_ `~
" `~" "
`" /~'`\ `\\~~\
"
" "~' ""
Cracked By —— afanty fly
2003-05-01 16:30
VC注册机源码部分
——作者:afanty
说明:由于我没有把判断注册码格式的代码部分告诉afanty大哥,因此afanty大哥限制了输入的1、3部分为4位字符。但是也足够用了。^-^
#include "stdafx.h"
#include "test01.h"
#include
"test01Dlg.h"
CTest01Dlg::CTest01Dlg(CWnd*
pParent /*=NULL*/)
: CDialog(CTest01Dlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CTest01Dlg)
m_code1
= _T("");
m_code2 = _T("");
m_code3 = _T("");
//}}AFX_DATA_INIT
}
void
CTest01Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CTest01Dlg)
DDX_Control(pDX,
IDC_EDIT_3, m_edit3);
DDX_Control(pDX, IDC_EDIT_2, m_edit2);
DDX_Control(pDX,
IDC_EDIT_1, m_edit1);
DDX_Text(pDX, IDC_EDIT_1, m_code1);
DDX_Text(pDX,
IDC_EDIT_2, m_code2);
DDX_Text(pDX, IDC_EDIT_3, m_code3);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CTest01Dlg,
CDialog)
//{{AFX_MSG_MAP(CTest01Dlg)
ON_BN_CLICKED(IDC_BUTTON, OnButton)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
BOOL
CTest01Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
m_edit1.SetLimitText(4);
m_edit3.SetLimitText(4);
m_edit2.SetReadOnly();
return TRUE;
}
void
CTest01Dlg::OnButton()
{
UpdateData(TRUE);
int i,num;
unsigned
long data1=0;
unsigned long data2=0;
unsigned long data3=0;
for(i=0;i<m_code1.GetLength();i++)
{
num=m_code1[i];
if((num>='0')&&(num<='9'))num=num-0x30;
else if((num>='A')&&(num<='Z'))num=num-0x37;
else
if((num>='a')&&(num<='z'))num=num-0x57;
else return;
data1=data1*36+num;
}
for(i=0;i<m_code3.GetLength();i++)
{
num=m_code3[i];
if((num>='0')&&(num<='9'))num=num-0x30;
else if((num>='A')&&(num<='Z'))num=num-0x37;
else
if((num>='a')&&(num<='z'))num=num-0x57;
else return;
data3=data3*36+num;
}
__int64 tmp=0x59E60383;
tmp=tmp*data1;
tmp=tmp>>46;
data2=(data1%0xB640)*987+(unsigned
long)tmp+(data3*174);
char ch;
m_code2="";
while(data2>0)
{
num=data2%36;
if((num>=0)&&(num<=9))num=num+0x30;
else
num=num+0x37;
ch=num;
m_code2.Insert(0,ch);
data2=data2/36;
}
UpdateData(FALSE);
}