首页
社区
课程
招聘
[原创]全局变量简单分析:屏幕监视专家2.1
发表于: 2006-1-24 16:52 7987

[原创]全局变量简单分析:屏幕监视专家2.1

2006-1-24 16:52
7987

全局变量简单分析:屏幕监视专家2.1
【破解作者】 jsliyangsj
【作者邮箱】 sjcrack@yahoo.com.cn
【使用工具】 peid OllyDbg1.10
【破解平台】 Winxp
【软件名称】 屏幕监视专家2.1
【软件地址】 http://www.tlxsoft.com/pmjszj/index.htm
【编写语言】 C
       一直在用它,不错。分析还是上个学期的事了,不能在拖了(不然忘了)。这里稍微整理了一下下。
此软件烦在全局变量上,败也在全局变量上。
如果看到注册成功就收手,呵呵录像白屏!!
全局变量--下内存断点。
过程:
0041EF38  /.  55   push ebp
0041EF39  |.  8BEC mov ebp,esp
0041EF3B  |.  83C4>add esp,-3C
0041EF3E  |.  8955>mov dword ptr ss:[ebp-3C],edx
0041EF41  |.  8945>mov dword ptr ss:[ebp-38],eax
0041EF44  |.  B8 B>mov eax,pmjszj.004A4BBC
0041EF49  |.  E8 6>call pmjszj.0048EDB8
0041EF4E  |.  66:C>mov word ptr ss:[ebp-24],8
0041EF54  |.  8D45>lea eax,dword ptr ss:[ebp-4]
0041EF57  |.  E8 5>call pmjszj.004035AC
0041EF5C  |.  8BD0 mov edx,eax
0041EF5E  |.  FF45>inc dword ptr ss:[ebp-18]
0041EF61  |.  8B4D>mov ecx,dword ptr ss:[ebp-38]
0041EF64  |.  8B81>mov eax,dword ptr ds:[ecx+2E4]
0041EF6A  |.  E8 3>call pmjszj.0045B2A0
0041EF6F  |.  8D55>lea edx,dword ptr ss:[ebp-4]
0041EF72  |.  FF32 push dword ptr ds:[edx]                 ;  压入注册码
0041EF74  |.  8D45>lea eax,dword ptr ss:[ebp-8]
0041EF77  |.  E8 3>call pmjszj.004035AC
0041EF7C  |.  8BD0 mov edx,eax
0041EF7E  |.  FF45>inc dword ptr ss:[ebp-18]
0041EF81  |.  8B4D>mov ecx,dword ptr ss:[ebp-38]
0041EF84  |.  8B81>mov eax,dword ptr ds:[ecx+2DC]
0041EF8A  |.  E8 1>call pmjszj.0045B2A0
0041EF8F  |.  8D55>lea edx,dword ptr ss:[ebp-8]            ; |
0041EF92  |.  FF32 push dword ptr ds:[edx]                 ; |压入用户名
0041EF94  |.  8B0D>mov ecx,dword ptr ds:[4A93D0]           ; |pmjszj._MainForm
0041EF9A  |.  FF31 push dword ptr ds:[ecx]                 ; |Arg1
0041EF9C  |.  E8 A>call pmjszj.0040EE44                    ; \pmjszj.0040EE44
0041EFA1  |.  83C4>add esp,0C
0041EFA4  |.  FF4D>dec dword ptr ss:[ebp-18]
0041EFA7  |.  8D45>lea eax,dword ptr ss:[ebp-8]
0041EFAA  |.  BA 0>mov edx,2
0041EFAF  |.  E8 F>call pmjszj.004991AC
0041EFB4  |.  FF4D>dec dword ptr ss:[ebp-18]
0041EFB7  |.  8D45>lea eax,dword ptr ss:[ebp-4]
0041EFBA  |.  BA 0>mov edx,2
0041EFBF  |.  E8 E>call pmjszj.004991AC
0041EFC4  |.  8B0D>mov ecx,dword ptr ds:[4A93D0]           ;  pmjszj._MainForm
0041EFCA  |.  FF31 push dword ptr ds:[ecx]                 ; /Arg1
0041EFCC  |.  E8 4>call pmjszj.00409A14                    ; \对注册码第一次判断--注册码码输入格式是否正确
0041EFD1  |.  59   pop ecx
0041EFD2  |.  3C 0>cmp al,1
0041EFD4  |.  0F85>jnz pmjszj.0041F05E
0041EFDA  |.  A1 D>mov eax,dword ptr ds:[4A93D0]
0041EFDF  |.  FF30 push dword ptr ds:[eax]                 ; /Arg1
0041EFE1  |.  E8 8>call pmjszj.00409A68                    ; \第二次判断--用注册的前5位运算结果与机器码用户名计算的结果比较
0041EFE6  |.  59   pop ecx
0041EFE7  |.  3C 0>cmp al,1
0041EFE9  |.  75 7>jnz short pmjszj.0041F05E               ;  关键比较
0041EFEB  |.  66:C>mov word ptr ss:[ebp-24],14
0041EFF1  |.  BA 3>mov edx,pmjszj.004A4B30                 ;  注册成功
0041EFF6  |.  8D45>lea eax,dword ptr ss:[ebp-C]
0041EFF9  |.  E8 A>call pmjszj.00498FA0
0041EFFE  |.  FF45>inc dword ptr ss:[ebp-18]
0041F001  |.  8B00 mov eax,dword ptr ds:[eax]
0041F003  |.  E8 6>call pmjszj.00456168
0041F008  |.  FF4D>dec dword ptr ss:[ebp-18]
0041F00B  |.  8D45>lea eax,dword ptr ss:[ebp-C]
0041F00E  |.  BA 0>mov edx,2
0041F013  |.  E8 9>call pmjszj.004991AC
0041F018  |.  8B0D>mov ecx,dword ptr ds:[4A93D0]           ;  pmjszj._MainForm
0041F01E  |.  8B01 mov eax,dword ptr ds:[ecx]
0041F020  |.  C680>mov byte ptr ds:[eax+414],1
0041F027  |.  8B15>mov edx,dword ptr ds:[4A93D0]           ;  pmjszj._MainForm
0041F02D  |.  8B0A mov ecx,dword ptr ds:[edx]
0041F02F  |.  8B81>mov eax,dword ptr ds:[ecx+3C4]
0041F035  |.  B2 0>mov dl,1
0041F037  |.  E8 5>call pmjszj.0043478C
0041F03C  |.  8B0D>mov ecx,dword ptr ds:[4A93D0]           ;  pmjszj._MainForm
0041F042  |.  FF31 push dword ptr ds:[ecx]                 ; /Arg1
0041F044  |.  E8 0>call pmjszj.0040AC54                    ; \pmjszj.0040AC54
0041F049  |.  59   pop ecx
0041F04A  |.  8B45>mov eax,dword ptr ss:[ebp-38]
0041F04D  |.  C680>mov byte ptr ds:[eax+2F4],1
0041F054  |.  8B45>mov eax,dword ptr ss:[ebp-38]
0041F057  |.  E8 4>call pmjszj.004490A0
0041F05C  |.  EB 3>jmp short pmjszj.0041F09A
0041F05E  |>  66:C>mov word ptr ss:[ebp-24],20
0041F064  |.  BA 3>mov edx,pmjszj.004A4B39                 ;  注册失败
0041F069  |.  8D45>lea eax,dword ptr ss:[ebp-10]
0041F06C  |.  E8 2>call pmjszj.00498FA0
0041F071  |.  FF45>inc dword ptr ss:[ebp-18]
0041F074  |.  8B00 mov eax,dword ptr ds:[eax]
0041F076  |.  E8 E>call pmjszj.00456168
0041F07B  |.  FF4D>dec dword ptr ss:[ebp-18]
0041F07E  |.  8D45>lea eax,dword ptr ss:[ebp-10]

………………………………………………………………………………………………………………………………
进入:0041EFCC  |.  E8 4>call pmjszj.00409A14                    ; \对注册码第一次判断--注册码码输入格式是否正确
………………………………………………………………………………………………………………………………
00409A14  /$  55   push ebp
00409A15  |.  8BEC mov ebp,esp
00409A17  |.  83C4>add esp,-8
00409A1A  |.  33C0 xor eax,eax
00409A1C  |.  8945>mov dword ptr ss:[ebp-8],eax
00409A1F  |.  33D2 xor edx,edx
00409A21  |.  8955>mov dword ptr ss:[ebp-4],edx
00409A24  |>  8B4D>/mov ecx,dword ptr ss:[ebp+8]           ;  全加起来
00409A27  |.  8B45>|mov eax,dword ptr ss:[ebp-4]
00409A2A  |.  0FBE>|movsx edx,byte ptr ds:[ecx+eax+445]    ;  得到每一位注册码
00409A32  |.  0155>|add dword ptr ss:[ebp-8],edx           ;  把得到的每一位的ASCII加起来
00409A35  |.  FF45>|inc dword ptr ss:[ebp-4]               ;  计数器
00409A38  |.  837D>|cmp dword ptr ss:[ebp-4],13            ;  总共19位
00409A3C  |.^ 7C E>\jl short pmjszj.00409A24               ;  将每一位值相加
00409A3E  |.  8B4D>mov ecx,dword ptr ss:[ebp+8]
00409A41  |.  0FBE>movsx eax,byte ptr ds:[ecx+458]         ;  第20位的注册
00409A48  |.  83C0>add eax,-41                             ;  第20位的注册码的ASCII减去16进制41
00409A4B  |.  8945>mov dword ptr ss:[ebp-4],eax
00409A4E  |.  8B45>mov eax,dword ptr ss:[ebp-8]            ;  得到前19位相加之和
00409A51  |.  B9 1>mov ecx,14
00409A56  |.  99   cdq
00409A57  |.  F7F9 idiv ecx                                ;  得到前19位相加之和除以16进制14
00409A59  |.  3B55>cmp edx,dword ptr ss:[ebp-4]            ;  相除的余数与第20位的注册码的ASCII减去16进制41的结果比较
00409A5C  |.  75 0>jnz short pmjszj.00409A62
00409A5E  |.  B0 0>mov al,1
00409A60  |.  EB 0>jmp short pmjszj.00409A64
00409A62  |>  33C0 xor eax,eax
00409A64  |>  59   pop ecx
00409A65  |.  59   pop ecx
00409A66  |.  5D   pop ebp
…………………………………………………………………………………………………………………………
上面检查输入格式,注册码一共有20位,第20位的注册码的ASCII减去41得到的结果
一定要等于前19位的输入码的ASCII相加的和除以20得到的余数。
…………………………………………………………………………………………………………………………
………………………………………………………………………………………………………………………………
进入  0041EFE1  |.  E8 8>call pmjszj.00409A68                    ; \第二次判断--用注册的前5位运算结果与机器码用户名计算的结果比较
…………………………………………………………………………………………………………………………………………
00409A68  /$  55   push ebp
00409A69  |.  8BEC mov ebp,esp
00409A6B  |.  83C4>add esp,-58
00409A6E  |.  B8 1>mov eax,pmjszj.0049E518
00409A73  |.  E8 4>call pmjszj.0048EDB8
00409A78  |.  33D2 xor edx,edx
00409A7A  |.  8955>mov dword ptr ss:[ebp-30],edx
00409A7D  |>  8B4D>/mov ecx,dword ptr ss:[ebp-30]          ;  控制位数
00409A80  |.  8B45>|mov eax,dword ptr ss:[ebp+8]           ;  用户名的基地址
00409A83  |.  8A94>|mov dl,byte ptr ds:[eax+ecx+430]       ;  得到用户名各个字符的ASCII
00409A8A  |.  8B4D>|mov ecx,dword ptr ss:[ebp-30]
00409A8D  |.  8B45>|mov eax,dword ptr ss:[ebp+8]
00409A90  |.  3294>|xor dl,byte ptr ds:[eax+ecx+46F]       ;  用依次得到的用户名ASCII与依次得到机器码的每个字符的ASCII进行XOR运算
00409A97  |.  8B4D>|mov ecx,dword ptr ss:[ebp-30]          ;  位数
00409A9A  |.  8854>|mov byte ptr ss:[ebp+ecx-54],dl        ;  上面XOR结果存储了
00409A9E  |.  FF45>|inc dword ptr ss:[ebp-30]              ;  位数加1
00409AA1  |.  837D>|cmp dword ptr ss:[ebp-30],14           ;  一共20位
00409AA5  |.^ 7C D>\jl short pmjszj.00409A7D
…………………………………………………………………………………………………………………………
把用户名与机器码对应的ASCII   XOR  储存用于下面再次运算
…………………………………………………………………………………………………………………………
00409AA7  |.  33D2 xor edx,edx
00409AA9  |.  8955>mov dword ptr ss:[ebp-34],edx
00409AAC  |.  33C0 xor eax,eax
00409AAE  |.  8945>mov dword ptr ss:[ebp-30],eax           ;  计数器
00409AB1  |>  8B55>/mov edx,dword ptr ss:[ebp-30]
00409AB4  |.  0FBE>|movsx ecx,byte ptr ss:[ebp+edx-54]     ;  依次得到上面刚刚处理好的20位结果
00409AB9  |.  894D>|mov dword ptr ss:[ebp-58],ecx
00409ABC  |.  DB45>|fild dword ptr ss:[ebp-58]             ;  把得到的ASCII码转化为10进制实数
00409ABF  |.  83C4>|add esp,-8                             ; /
00409AC2  |.  DD1C>|fstp qword ptr ss:[esp]                ; |Arg1 (8-byte)
00409AC5  |.  E8 2>|call pmjszj.004920F0                   ; \pmjszj.004920F0
00409ACA  |.  83C4>|add esp,8
00409ACD  |.  DB45>|fild dword ptr ss:[ebp-30]
00409AD0  |.  DEC9 |fmulp st(1),st                         ;  依次得到上面对应XOR的20个结果乘以位数
00409AD2  |.  DB45>|fild dword ptr ss:[ebp-34]             ;  得到上一次相加的结果
00409AD5  |.  DEC1 |faddp st(1),st                         ;  加上这次计算(与位数相乘)的结果
00409AD7  |.  E8 3>|call pmjszj.00492118                   ;  把实数转化为16进制数
00409ADC  |.  8945>|mov dword ptr ss:[ebp-34],eax          ;  结果储存
00409ADF  |.  FF45>|inc dword ptr ss:[ebp-30]
00409AE2  |.  837D>|cmp dword ptr ss:[ebp-30],14
00409AE6  |.^ 7C C>\jl short pmjszj.00409AB1
00409AE8  |.  8145>add dword ptr ss:[ebp-34],0D431         ;  最后结果加上0D431
…………………………………………………………………………………………………………………………
把上面得到的结果用20位,每一位的ASCII分别乘以它自己的位数全部相加起来最后结果加上D431(16进制)
位数从0开始的
…………………………………………………………………………………………………………………………
00409AEF  |.  33D2 xor edx,edx
00409AF1  |.  8955>mov dword ptr ss:[ebp-30],edx
00409AF4  |>  8B4D>/mov ecx,dword ptr ss:[ebp-30]          ;  计数器
00409AF7  |.  8B45>|mov eax,dword ptr ss:[ebp+8]
00409AFA  |.  8A94>|mov dl,byte ptr ds:[eax+ecx+445]       ;  依次得到得到注册码
00409B01  |.  80C2>|add dl,0E7                             ;  每一位注册码的ASCII加上0E7只有两位进位不算
00409B04  |.  8B4D>|mov ecx,dword ptr ss:[ebp-30]          ;  位数
00409B07  |.  8854>|mov byte ptr ss:[ebp+ecx-3C],dl        ;  储存了
00409B0B  |.  FF45>|inc dword ptr ss:[ebp-30]
00409B0E  |.  837D>|cmp dword ptr ss:[ebp-30],5            ;  只取前5位
00409B12  |.^ 7C E>\jl short pmjszj.00409AF4
00409B14  |.  C645>mov byte ptr ss:[ebp-37],0
00409B18  |.  8B45>mov eax,dword ptr ss:[ebp-34]           ;  得到上面加上0D431后的数据
00409B1B  |.  8B55>mov edx,dword ptr ss:[ebp+8]
00409B1E  |.  8982>mov dword ptr ds:[edx+418],eax          ;  转存在另一个地方,重要的数据后面第三次用到的(由第三次计算后下内存断点得到这里)
00409B24  |.  8D45>lea eax,dword ptr ss:[ebp-8]
00409B27  |.  8B55>mov edx,dword ptr ss:[ebp-34]
00409B2A  |.  E8 8>call pmjszj.004990B8                    ;  进入  用机器码与用户名得到的结果计算出1个字符串
00409B2F  |.  50   push eax
00409B30  |.  FF45>inc dword ptr ss:[ebp-10]
00409B33  |.  66:C>mov word ptr ss:[ebp-1C],8
00409B39  |.  8D55>lea edx,dword ptr ss:[ebp-3C]
00409B3C  |.  8D45>lea eax,dword ptr ss:[ebp-4]
00409B3F  |.  E8 5>call pmjszj.00498FA0
00409B44  |.  FF45>inc dword ptr ss:[ebp-10]
00409B47  |.  5A   pop edx
00409B48  |.  E8 2>call pmjszj.0049927C
00409B4D  |.  50   push eax
00409B4E  |.  FF4D>dec dword ptr ss:[ebp-10]
00409B51  |.  8D45>lea eax,dword ptr ss:[ebp-8]
00409B54  |.  BA 0>mov edx,2
00409B59  |.  E8 4>call pmjszj.004991AC
00409B5E  |.  FF4D>dec dword ptr ss:[ebp-10]
00409B61  |.  8D45>lea eax,dword ptr ss:[ebp-4]
00409B64  |.  BA 0>mov edx,2
00409B69  |.  E8 3>call pmjszj.004991AC
00409B6E  |.  58   pop eax
00409B6F  |.  84C0 test al,al
00409B71  |.  74 0>je short pmjszj.00409B81
00409B73  |.  B0 0>mov al,1
00409B75  |.  8B55>mov edx,dword ptr ss:[ebp-2C]
00409B78  |.  64:8>mov dword ptr fs:[0],edx
00409B7F  |.  EB 0>jmp short pmjszj.00409B8D
00409B81  |>  33C0 xor eax,eax
00409B83  |.  8B55>mov edx,dword ptr ss:[ebp-2C]
00409B86  |.  64:8>mov dword ptr fs:[0],edx
00409B8D  |>  8BE5 mov esp,ebp
00409B8F  |.  5D   pop ebp
……………………………………………………………………………………………………………………………………………………
00409B2A  |.  E8 8>call pmjszj.004990B8                    ;  进入  用机器码与用户名得到的结果计算出1个字符串
……………………………………………………………………………………………………………………………………………………
004990D4  |.  8B55>mov edx,dword ptr ss:[ebp-4]
004990D7  |.  33C9 xor ecx,ecx
004990D9  |.  890A mov dword ptr ds:[edx],ecx
004990DB  |.  53   push ebx                                ; /由用户名与机器码计算出来的数据
004990DC  |.  68 E>push pmjszj.004A8EE3                    ; |Arg2 = 004A8EE3 ASCII "%i"
004990E1  |.  FF75>push dword ptr ss:[ebp-4]               ; |Arg1
004990E4  |.  E8 F>call pmjszj.004992E8                    ; \进入
004990E9  |.  83C4>add esp,0C
004990EC  |.  8B45>mov eax,dword ptr ss:[ebp-28]
004990EF  |.  64:6>mov dword ptr fs:[0],eax

…………………………………………………………………………………………
进入004990E4  |.  E8 F>call pmjszj.004992E8                    ; \进入
…………………………………………………………………………………………………………………………
004992EF  |.  8D45>lea eax,dword ptr ss:[ebp+10]
004992F2  |.  50   push eax                                ; /Arg3
004992F3  |.  FF75>push dword ptr ss:[ebp+C]               ; |Arg2
004992F6  |.  53   push ebx                                ; |Arg1
004992F7  |.  E8 B>call pmjszj.004992AC                    ; \进入
004992FC  |.  83C4>add esp,0C
004992FF  |.  8BC3 mov eax,ebx

…………………………………………………………………………………………………………………………
004992F7  |.  E8 B>call pmjszj.004992AC                    ; \进入
……………………………………………………………………………………………………………………………………
004992B0  |.  56   push esi
004992B1  |.  57   push edi
004992B2  |.  8B7D>mov edi,dword ptr ss:[ebp+C]
004992B5  |.  8B5D>mov ebx,dword ptr ss:[ebp+8]
004992B8  |.  FF75>push dword ptr ss:[ebp+10]              ; /Arg4
004992BB  |.  57   push edi                                ; |Arg3
004992BC  |.  6A 0>push 0                                  ; |Arg2 = 00000000
004992BE  |.  6A 0>push 0                                  ; |Arg1 = 00000000
004992C0  |.  E8 9>call pmjszj.00490560                    ; \进入
004992C5  |.  83C4>add esp,10
004992C8  |.  8BF0 mov esi,eax
004992CA  |.  8BD6 mov edx,esi
……………………………………………………………………………………………………
004992C0  |.  E8 9>call pmjszj.00490560                    ; \进入
…………………………………………………………………………………………………………………………
0049057C  |.  8D45>lea eax,dword ptr ss:[ebp+8]            ; |
0049057F  |.  50   push eax                                ; |Arg2
00490580  |.  68 0>push pmjszj.00490500                    ; |Arg1 = 00490500
00490585  |.  E8 0>call pmjszj.00490998                    ; \pmjszj.00490998
0049058A  |.  83C4>add esp,18
……………………………………………………………………………………………………………………………………
进入00490585  |.  E8 0>call pmjszj.00490998                    ; \pmjszj.00490998
………………………………………………………………………………………………………………………………
00490DD2  |> \8A45>|mov al,byte ptr ss:[ebp-1D]
00490DD5  |.  50   |push eax                               ; /Arg6
00490DD6  |.  51   |push ecx                               ; |Arg5
00490DD7  |.  8B55>|mov edx,dword ptr ss:[ebp-38]          ; |
00490DDA  |.  52   |push edx                               ; |Arg4
00490DDB  |.  8B4D>|mov ecx,dword ptr ss:[ebp-18]          ; |
00490DDE  |.  51   |push ecx                               ; |Arg3
00490DDF  |.  FF75>|push dword ptr ss:[ebp-24]             ; |Arg2
00490DE2  |.  FF75>|push dword ptr ss:[ebp-28]             ; |Arg1
00490DE5  |.  E8 B>|call pmjszj.004921A8                   ; \进入计算出注册码的前5位
00490DEA  |.  83C4>|add esp,18
00490DED  |>  837D>|cmp dword ptr ss:[ebp-8],0
00490DF1  |.  0F8C>|jl pmjszj.00491010
00490DF7  |.  8B55>|mov edx,dword ptr ss:[ebp-18]
…………………………………………………………………………………………………………
进入
……………………………………………………………………………………………………………………
004921A8  /$  55   push ebp
004921A9  |.  8BEC mov ebp,esp
004921AB  |.  83C4>add esp,-44
004921AE  |.  53   push ebx
004921AF  |.  56   push esi
004921B0  |.  57   push edi
004921B1  |.  8B7D>mov edi,dword ptr ss:[ebp+14]
004921B4  |.  8B75>mov esi,dword ptr ss:[ebp+10]
004921B7  |.  83FF>cmp edi,2
004921BA  |.  0F8C>jl pmjszj.0049224C
004921C0  |.  83FF>cmp edi,24
004921C3  |.  0F8F>jg pmjszj.0049224C
004921C9  |.  837D>cmp dword ptr ss:[ebp+C],0
004921CD  |.  75 0>jnz short pmjszj.004921D7
004921CF  |.  837D>cmp dword ptr ss:[ebp+8],0
004921D3  |.  73 2>jnb short pmjszj.004921F6
004921D5  |.  EB 0>jmp short pmjszj.004921D9
004921D7  |>  7D 1>jge short pmjszj.004921F6
004921D9  |>  807D>cmp byte ptr ss:[ebp+18],0
004921DD  |.  74 1>je short pmjszj.004921F6
004921DF  |.  C606>mov byte ptr ds:[esi],2D
004921E2  |.  46   inc esi
004921E3  |.  8B45>mov eax,dword ptr ss:[ebp+8]
004921E6  |.  8B55>mov edx,dword ptr ss:[ebp+C]
004921E9  |.  F7D8 neg eax
004921EB  |.  83D2>adc edx,0
004921EE  |.  8945>mov dword ptr ss:[ebp+8],eax
004921F1  |.  F7DA neg edx
004921F3  |.  8955>mov dword ptr ss:[ebp+C],edx
004921F6  |>  8D5D>lea ebx,dword ptr ss:[ebp-44]           ;  这里是计算前5位注册码的地方
004921F9  |>  8BC7 /mov eax,edi
004921FB  |.  99   |cdq
004921FC  |.  52   |push edx                               ;  0
004921FD  |.  50   |push eax                               ;  A
004921FE  |.  8B45>|mov eax,dword ptr ss:[ebp+8]           ;  得到机器码与用户名计算出来的数据
00492201  |.  8B55>|mov edx,dword ptr ss:[ebp+C]
00492204  |.  E8 2>|call pmjszj.00491C2E                   ;  机器码与用户名计算出来的数据计算出来的值除以A得到余数
00492209  |.  8803 |mov byte ptr ds:[ebx],al               ;  余数储存
0049220B  |.  8BC7 |mov eax,edi
0049220D  |.  99   |cdq
0049220E  |.  52   |push edx                               ;  0
0049220F  |.  50   |push eax                               ;  A
00492210  |.  8B45>|mov eax,dword ptr ss:[ebp+8]           ;  得到机器码与用户名计算出来的数据
00492213  |.  8B55>|mov edx,dword ptr ss:[ebp+C]
00492216  |.  43   |inc ebx
00492217  |.  E8 4>|call pmjszj.00491B6B                   ;  机器码与用户名计算出来的数据计算出来的值除以A得到商
0049221C  |.  8945>|mov dword ptr ss:[ebp+8],eax           ;  把得到的商储存覆盖原来的计算出来的值
0049221F  |.  8955>|mov dword ptr ss:[ebp+C],edx
00492222  |.  83FA>|cmp edx,0
00492225  |.^ 75 D>|jnz short pmjszj.004921F9
00492227  |.  83F8>|cmp eax,0
0049222A  |.^ 75 C>\jnz short pmjszj.004921F9              ;  上面的循环是把机器码与用户名计算的值一次一次除以A得到余数
0049222C  |.  EB 1>jmp short pmjszj.00492245
0049222E  |>  4B   /dec ebx
0049222F  |.  8A03 |mov al,byte ptr ds:[ebx]               ;  依次从最后得到的余数值
00492231  |.  3C 0>|cmp al,0A
00492233  |.  7D 0>|jge short pmjszj.0049223D              ;  是否大于A不可能的 必不跳
00492235  |.  83C0>|add eax,30                             ;  加30
00492238  |.  8806 |mov byte ptr ds:[esi],al               ;  储存了!!
0049223A  |.  46   |inc esi
0049223B  |.  EB 0>|jmp short pmjszj.00492245
0049223D  |>  0245>|add al,byte ptr ss:[ebp+1C]
00492240  |.  04 F>|add al,0F6
00492242  |.  8806 |mov byte ptr ds:[esi],al
00492244  |.  46   |inc esi
00492245  |>  8D55> lea edx,dword ptr ss:[ebp-44]          ;  得到上面余数地址
00492248  |.  3BDA |cmp ebx,edx
0049224A  |.^ 75 E>\jnz short pmjszj.0049222E
0049224C  |>  C606>mov byte ptr ds:[esi],0
0049224F  |.  8B45>mov eax,dword ptr ss:[ebp+10]           ;  得到一串字符串,肯定为0~9
00492252  |.  5F   pop edi
00492253  |.  5E   pop esi
00492254  |.  5B   pop ebx
00492255  |.  8BE5 mov esp,ebp
00492257  |.  5D   pop ebp
…………………………………………………………………………………………………………………………
用机器码与用户名得到的结果(乘以位数加上D341之后的)分别除以A得到余数在加上30得到一串字符串
必定在0~9之间用这个字符串与输入码的处理后的前5位进行比较
…………………………………………………………………………………………………………………………
00409B6E  |.  58   pop eax
00409B6F  |.  84C0 test al,al
00409B71  |.  74 0>je short pmjszj.00409B81
00409B73  |.  B0 0>mov al,1
00409B75  |.  8B55>mov edx,dword ptr ss:[ebp-2C]
00409B78  |.  64:8>mov dword ptr fs:[0],edx
00409B7F  |.  EB 0>jmp short pmjszj.00409B8D
00409B81  |>  33C0 xor eax,eax
…………………………………………………………………………………………………………………………
0041EFE1  |.  E8 8>call pmjszj.00409A68                    ; \第二次判断--用注册的前5位运算结果与机器码用户名计算的结果比较
0041EFE6  |.  59   pop ecx
0041EFE7  |.  3C 0>cmp al,1
0041EFE9  |.  75 7>jnz short pmjszj.0041F05E               ;  关键比较
0041EFEB  |.  66:C>mov word ptr ss:[ebp-24],14
0041EFF1  |.  BA 3>mov edx,pmjszj.004A4B30                 ;  注册成功
0041EFF6  |.  8D45>lea eax,dword ptr ss:[ebp-C]
0041EFF9  |.  E8 A>call pmjszj.00498FA0
0041EFFE  |.  FF45>inc dword ptr ss:[ebp-18]
0041F001  |.  8B00 mov eax,dword ptr ds:[eax]
0041F003  |.  E8 6>call pmjszj.00456168
0041F008  |.  FF4D>dec dword ptr ss:[ebp-18]
0041F00B  |.  8D45>lea eax,dword ptr ss:[ebp-C]
0041F00E  |.  BA 0>mov edx,2
0041F013  |.  E8 9>call pmjszj.004991AC
0041F018  |.  8B0D>mov ecx,dword ptr ds:[4A93D0]           ;  pmjszj._MainForm
0041F01E  |.  8B01 mov eax,dword ptr ds:[ecx]
0041F020  |.  C680>mov byte ptr ds:[eax+414],1
0041F027  |.  8B15>mov edx,dword ptr ds:[4A93D0]           ;  pmjszj._MainForm
0041F02D  |.  8B0A mov ecx,dword ptr ds:[edx]
0041F02F  |.  8B81>mov eax,dword ptr ds:[ecx+3C4]
0041F035  |.  B2 0>mov dl,1
0041F037  |.  E8 5>call pmjszj.0043478C
0041F03C  |.  8B0D>mov ecx,dword ptr ds:[4A93D0]           ;  pmjszj._MainForm
0041F042  |.  FF31 push dword ptr ds:[ecx]                 ; /Arg1
0041F044  |.  E8 0>call pmjszj.0040AC54                    ; \pmjszj.0040AC54
0041F049  |.  59   pop ecx
0041F04A  |.  8B45>mov eax,dword ptr ss:[ebp-38]
0041F04D  |.  C680>mov byte ptr ds:[eax+2F4],1
0041F054  |.  8B45>mov eax,dword ptr ss:[ebp-38]
0041F057  |.  E8 4>call pmjszj.004490A0
0041F05C  |.  EB 3>jmp short pmjszj.0041F09A
0041F05E  |>  66:C>mov word ptr ss:[ebp-24],20
0041F064  |.  BA 3>mov edx,pmjszj.004A4B39                 ;  注册失败
0041F069  |.  8D45>lea eax,dword ptr ss:[ebp-10]
0041F06C  |.  E8 2>call pmjszj.00498FA0
0041F071  |.  FF45>inc dword ptr ss:[ebp-18]
0041F074  |.  8B00 mov eax,dword ptr ds:[eax]
0041F076  |.  E8 E>call pmjszj.00456168
0041F07B  |.  FF4D>dec dword ptr ss:[ebp-18]
0041F07E  |.  8D45>lea eax,dword ptr ss:[ebp-10]
………………………………………………………………………………………………………………………………………………
总结:
把用户名与机器码对应的ASCII   XOR运算得到20位结果,得到的结果用20位,每一位的ASCII分别乘以它自己的
位数全部相加起来最后结果加上D431(16进制)位数从0开始的;结果分别除以A得到余数在加上30得到一串字符串
必定在0~9之间用这个字符串一共有5字符,用这5个字符的ASCII加上16进制19,即得到输入码的前5位字符
输入码一共有20位字符,第20位有要求:
第20位的注册码的ASCII减去41得到的结果
一定要等于前19位的输入码的ASCII相加的和除以20得到的余数

其中:把用户名与机器码对应的ASCII   XOR运算得到20位结果,得到的结果用20位,每一位的ASCII分别乘以它自己的
位数全部相加起来最后结果加上D431(16进制)位数从0开始的用到第三次。结果为A。
…………………………………………………………………………………………………………………………………………
如果看到注册成功就收手,呵呵录像白屏!!
…………………………………………………………………………………………………………
第二部分:
………………………………………………………………………………………………………………………………
004026C8   $  55   push ebp                                ;  这里准备计算第二组(第10位到第16位)计算及判断
004026C9   .  8BEC mov ebp,esp
004026CB   .  83C4>add esp,-34
004026CE   .  53   push ebx
004026CF   .  56   push esi
004026D0   .  57   push edi
004026D1   .  B8 3>mov eax,pmjszj.0049BE38
004026D6   .  E8 D>call pmjszj.0048EDB8
004026DB   .  33D2 xor edx,edx
004026DD   .  8955>mov dword ptr ss:[ebp-2C],edx
004026E0   .  66:C>mov word ptr ss:[ebp-14],8
004026E6   .  FF35>push dword ptr ds:[_MainForm]           ; /Arg1 = 00E720CC
004026EC   .  E8 D>call pmjszj.004029D0                    ; \处理机器码的地方(处理的结果为第二次判断作准备)
004026F1   .  59   pop ecx
004026F2   .  B9 0>mov ecx,0A
004026F7   .  8B55>mov edx,dword ptr ss:[ebp+8]
004026FA   .  8B45>mov eax,dword ptr ss:[ebp+C]
004026FD   .  8B18 mov ebx,dword ptr ds:[eax]
004026FF   .  FF53>call dword ptr ds:[ebx+8]
00402702   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402705   .  E8 9>call pmjszj.00479FA4
0040270A   .  8945>mov dword ptr ss:[ebp-30],eax
0040270D   .  8D55>lea edx,dword ptr ss:[ebp-2C]
00402710   .  B9 0>mov ecx,4
00402715   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402718   .  8B18 mov ebx,dword ptr ds:[eax]
0040271A   .  FF53>call dword ptr ds:[ebx+8]
0040271D   .  FF35>push dword ptr ds:[_MainForm]
00402723   .  E8 7>call pmjszj.00402AA0                    ;  这里要得到全局变量(注册码)进行转化后计算
00402728   .  59   pop ecx
00402729   .  8B55>mov edx,dword ptr ss:[ebp+8]
0040272C   .  83C2>add edx,24
0040272F   .  B9 0>mov ecx,4
00402734   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402737   .  8B18 mov ebx,dword ptr ds:[eax]
00402739   .  FF53>call dword ptr ds:[ebx+8]
0040273C   .  8B55>mov edx,dword ptr ss:[ebp+8]
0040273F   .  83C2>add edx,28
00402742   .  B9 0>mov ecx,4
00402747   .  8B45>mov eax,dword ptr ss:[ebp+C]
0040274A   .  8B18 mov ebx,dword ptr ds:[eax]
0040274C   .  FF53>call dword ptr ds:[ebx+8]
0040274F   .  8B55>mov edx,dword ptr ss:[ebp+8]
00402752   .  83C2>add edx,38
00402755   .  B9 0>mov ecx,4
0040275A   .  8B45>mov eax,dword ptr ss:[ebp+C]
0040275D   .  8B18 mov ebx,dword ptr ds:[eax]
0040275F   .  FF53>call dword ptr ds:[ebx+8]
00402762   .  8B55>mov edx,dword ptr ss:[ebp+8]
00402765   .  83C2>add edx,3C
00402768   .  B9 0>mov ecx,4
0040276D   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402770   .  8B18 mov ebx,dword ptr ds:[eax]
00402772   .  FF53>call dword ptr ds:[ebx+8]
00402775   .  8B55>mov edx,dword ptr ss:[ebp+8]
00402778   .  83C2>add edx,2C
0040277B   .  B9 0>mov ecx,4
00402780   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402783   .  8B18 mov ebx,dword ptr ds:[eax]
00402785   .  FF53>call dword ptr ds:[ebx+8]
00402788   .  A1 4>mov eax,dword ptr ds:[_MainForm]
0040278D   .  80B8>cmp byte ptr ds:[eax+414],0
00402794   .  75 2>jnz short pmjszj.004027BF
00402796   .  8B15>mov edx,dword ptr ds:[_MainForm]
0040279C   .  8B8A>mov ecx,dword ptr ds:[edx+3EC]
004027A2   .  8B41>mov eax,dword ptr ds:[ecx+6C]
004027A5   .  8B15>mov edx,dword ptr ds:[_MainForm]
004027AB   .  3B82>cmp eax,dword ptr ds:[edx+484]
004027B1   .  7E 0>jle short pmjszj.004027BF
004027B3   .  8B4D>mov ecx,dword ptr ss:[ebp+8]
004027B6   .  C741>mov dword ptr ds:[ecx+24],2
004027BD   .  EB 0>jmp short pmjszj.004027CB
004027BF   >  FF35>push dword ptr ds:[_MainForm]
004027C5   .  E8 E>call pmjszj.00402BB4                    ;  这里两个结果相减了一定要保证等于0(其实是前6相减的绝对值小于10-6)
004027CA   .  59   pop ecx                                 ;  00E720CC
004027CB   >  8B45>mov eax,dword ptr ss:[ebp+8]
004027CE   .  8378>cmp dword ptr ds:[eax+24],0
004027D2   .  74 0>je short pmjszj.004027E1
004027D4   .  8B55>mov edx,dword ptr ss:[ebp+8]
004027D7   .  837A>cmp dword ptr ds:[edx+24],1
004027DB   .  0F85>jnz pmjszj.0040291F
004027E1   >  8B55>mov edx,dword ptr ss:[ebp+8]
004027E4   .  83C2>add edx,1C
004027E7   .  B9 0>mov ecx,4
004027EC   .  8B45>mov eax,dword ptr ss:[ebp+C]
004027EF   .  8B18 mov ebx,dword ptr ds:[eax]
004027F1   .  FF53>call dword ptr ds:[ebx+8]
004027F4   .  8B55>mov edx,dword ptr ss:[ebp+8]
004027F7   .  83C2>add edx,20
004027FA   .  B9 0>mov ecx,4
004027FF   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402802   .  8B18 mov ebx,dword ptr ds:[eax]
00402804   .  FF53>call dword ptr ds:[ebx+8]
00402807   .  8B55>mov edx,dword ptr ss:[ebp+8]
0040280A   .  83C2>add edx,30
0040280D   .  B9 0>mov ecx,4
00402812   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402815   .  8B18 mov ebx,dword ptr ds:[eax]
00402817   .  FF53>call dword ptr ds:[ebx+8]
0040281A   .  A1 4>mov eax,dword ptr ds:[_MainForm]        ;  下面是验证上面两处是否相等
0040281F   .  D980>fld dword ptr ds:[eax+42C]              ;  又得到刚才的结果数据
00402825   .  D80D>fmul dword ptr ds:[4029CC]              ;  乘以1000
0040282B   .  E8 E>call pmjszj.00492118                    ;  将结果转化为16进制放到EAX中
00402830   .  8945>mov dword ptr ss:[ebp-2C],eax           ;  存储此处一定要为0
00402833   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402836   .  E8 6>call pmjszj.00479FA4
0040283B   .  8BD0 mov edx,eax
0040283D   .  8B0D>mov ecx,dword ptr ds:[_MainForm]
00402843   .  33C0 xor eax,eax
00402845   .  8A81>mov al,byte ptr ds:[ecx+414]
0040284B   .  0FAF>imul eax,dword ptr ss:[ebp-2C]          ;  上面的结果乘以0
0040284F   .  03D0 add edx,eax
00402851   .  8B45>mov eax,dword ptr ss:[ebp+C]
00402854   .  E8 5>call pmjszj.00479FB4
00402859   .  8B55>mov edx,dword ptr ss:[ebp+8]
0040285C   .  8B4A>mov ecx,dword ptr ds:[edx+14]
0040285F   .  8B41>mov eax,dword ptr ds:[ecx+8]
00402862   .  8945>mov dword ptr ss:[ebp-2C],eax
……………………………………………………………………………………………………………………………………………………
进入00402723   .  E8 7>call pmjszj.00402AA0                    ;  这里要得到全局变量(注册码)进行转化后计算
…………………………………………………………………………………………………………………………………………………………
00402AA0   $  55   push ebp
00402AA1   .  8BEC mov ebp,esp
00402AA3   .  83C4>add esp,-48
00402AA6   .  53   push ebx
00402AA7   .  56   push esi
00402AA8   .  57   push edi
00402AA9   .  B8 F>mov eax,pmjszj.0049DAFC
00402AAE   .  E8 0>call pmjszj.0048EDB8
00402AB3   .  66:C>mov word ptr ss:[ebp-1C],8
00402AB9   .  8D45>lea eax,dword ptr ss:[ebp-4]
00402ABC   .  E8 E>call pmjszj.004035AC
00402AC1   .  FF45>inc dword ptr ss:[ebp-10]
00402AC4   .  66:C>mov word ptr ss:[ebp-1C],14
00402ACA   .  33D2 xor edx,edx
00402ACC   .  8955>mov dword ptr ss:[ebp-30],edx
00402ACF   >  B9 0>mov ecx,0F
00402AD4   .  2B4D>sub ecx,dword ptr ss:[ebp-30]
00402AD7   .  8B45>mov eax,dword ptr ss:[ebp+8]
00402ADA   .  8A94>mov dl,byte ptr ds:[eax+ecx+445]        ;  这里取值了第二次取值。(全局变量)!!(是下内存访问断点首先来到这里的)
00402AE1   .  80C2>add dl,0EC                              ;  从后面向前面取值(第16位到第10位)分别加上EC
00402AE4   .  8B4D>mov ecx,dword ptr ss:[ebp-30]
00402AE7   .  8854>mov byte ptr ss:[ebp+ecx-48],dl         ;  存储了
00402AEB   .  FF45>inc dword ptr ss:[ebp-30]
00402AEE   .  837D>cmp dword ptr ss:[ebp-30],6
00402AF2   .^ 7C D>jl short pmjszj.00402ACF
00402AF4   .  C645>mov byte ptr ss:[ebp-42],0
00402AF8   .  66:C>mov word ptr ss:[ebp-1C],20
00402AFE   .  8D55>lea edx,dword ptr ss:[ebp-48]           ;  取从第16位开始的6位向前是个小数
00402B01   .  8D45>lea eax,dword ptr ss:[ebp-8]
00402B04   .  E8 9>call pmjszj.00498FA0
00402B09   .  FF45>inc dword ptr ss:[ebp-10]
00402B0C   .  8D55>lea edx,dword ptr ss:[ebp-8]
00402B0F   .  8D45>lea eax,dword ptr ss:[ebp-4]
00402B12   .  E8 C>call pmjszj.004991DC
00402B17   .  FF4D>dec dword ptr ss:[ebp-10]
00402B1A   .  8D45>lea eax,dword ptr ss:[ebp-8]
00402B1D   .  BA 0>mov edx,2
00402B22   .  E8 8>call pmjszj.004991AC
00402B27   .  66:C>mov word ptr ss:[ebp-1C],2C
00402B2D   .  8D45>lea eax,dword ptr ss:[ebp-4]
00402B30   .  E8 A>call pmjszj.004994E0                    ;  把上面根据注册码转变来的小数转化为实数
00402B35   .  8B55>mov edx,dword ptr ss:[ebp+8]
00402B38   .  D99A>fstp dword ptr ds:[edx+428]
00402B3E   .  66:C>mov word ptr ss:[ebp-1C],14
00402B44   .  EB 1>jmp short pmjszj.00402B5C
00402B46   .  8B4D>mov ecx,dword ptr ss:[ebp+8]
00402B49   .  33C0 xor eax,eax
00402B4B   .  8981>mov dword ptr ds:[ecx+428],eax
00402B51   .  66:C>mov word ptr ss:[ebp-1C],34
00402B57   .  E8 3>call pmjszj.00496092
00402B5C   >  8B55>mov edx,dword ptr ss:[ebp+8]
00402B5F   .  D982>fld dword ptr ds:[edx+428]
00402B65   .  83C4>add esp,-8                              ; /
00402B68   .  DD1C>fstp qword ptr ss:[esp]                 ; |Arg1 (8-byte)
00402B6B   .  E8 5>call pmjszj.004934C4                    ; \将转化后的值进行取SIN值(计算器中的弧度值)
00402B70   .  83C4>add esp,8
00402B73   .  DC0D>fmul qword ptr ds:[402BAC]              ;  SIN后的值与固定值进行相乘0.88891
00402B79   .  8B4D>mov ecx,dword ptr ss:[ebp+8]
00402B7C   .  D8A9>fsubr dword ptr ds:[ecx+428]            ;  再次用注册码转化来的小数减去上面得到的结果值
00402B82   .  8B45>mov eax,dword ptr ss:[ebp+8]
00402B85   .  D998>fstp dword ptr ds:[eax+428]             ;  结果存储起来
00402B8B   .  FF4D>dec dword ptr ss:[ebp-10]
00402B8E   .  8D45>lea eax,dword ptr ss:[ebp-4]
00402B91   .  BA 0>mov edx,2
00402B96   .  E8 1>call pmjszj.004991AC
00402B9B   .  8B4D>mov ecx,dword ptr ss:[ebp-2C]
00402B9E   .  64:8>mov dword ptr fs:[0],ecx
00402BA5   .  5F   pop edi
00402BA6   .  5E   pop esi
00402BA7   .  5B   pop ebx
00402BA8   .  8BE5 mov esp,ebp
00402BAA   .  5D   pop ebp
00402BAB   .  C3   retn
………………………………………………………………………………………………………………………………………………
这里是:将注册码的第16位开始向前取6位每一位加上EC变成ASCII其实是个小数,(转化为实数)结果为B再进行运算B-0.88891*SINB
这个值然后与机器码计算出来的值比较看是否相等。
…………………………………………………………………………………………………………………………………………………………
004027C5   .  E8 E>call pmjszj.00402BB4                    ;  这里两个结果相减了一定要保证等于0(其实是前6相减的绝对值小于10-6)
……………………………………………………………………………………………………………………………………………………………………
00402BB4  /$  55   push ebp                                ;  呵呵
00402BB5  |.  8BEC mov ebp,esp
00402BB7  |.  8B45>mov eax,dword ptr ss:[ebp+8]
00402BBA  |.  D980>fld dword ptr ds:[eax+428]              ;  得到刚才的值
00402BC0  |.  8B55>mov edx,dword ptr ss:[ebp+8]
00402BC3  |.  D8A2>fsub dword ptr ds:[edx+424]             ;  减去由机器码计算出来的值
00402BC9  |.  83C4>add esp,-8                              ; /
00402BCC  |.  DD1C>fstp qword ptr ss:[esp]                 ; |Arg1 (8-byte)
00402BCF  |.  E8 1>call pmjszj.004920F0                    ; \将负数变位正数
00402BD4  |.  83C4>add esp,8
00402BD7  |.  8B4D>mov ecx,dword ptr ss:[ebp+8]
00402BDA  |.  D999>fstp dword ptr ds:[ecx+42C]             ;  存储
00402BE0  |.  5D   pop ebp
……………………………………………………………………………………………………………………………………
上面就是与机器码计算出来的值进行比较
……………………………………………………………………………………………………………………………………
这里就是进行处理机器码的地方:004026EC   .  E8 D>call pmjszj.004029D0   
…………………………………………………………………………………………………………………………
004029D0  /$  55   push ebp                                ;  处理机器码的地方
004029D1  |.  8BEC mov ebp,esp
004029D3  |.  83C4>add esp,-2C
004029D6  |.  33C0 xor eax,eax
004029D8  |.  8945>mov dword ptr ss:[ebp-C],eax
004029DB  |>  8B55>/mov edx,dword ptr ss:[ebp+8]
004029DE  |.  8B4D>|mov ecx,dword ptr ss:[ebp-C]
004029E1  |.  8A84>|mov al,byte ptr ds:[edx+ecx+46F]       ;  依次得到每一位机器码
004029E8  |.  8B55>|mov edx,dword ptr ss:[ebp+8]
004029EB  |.  8B4D>|mov ecx,dword ptr ss:[ebp-C]
004029EE  |.  0A84>|or al,byte ptr ds:[edx+ecx+430]        ;  依次得到每一位机器码与用户名进行OR运算
004029F5  |.  8B55>|mov edx,dword ptr ss:[ebp-C]
004029F8  |.  8844>|mov byte ptr ss:[ebp+edx-24],al        ;  保存
004029FC  |.  FF45>|inc dword ptr ss:[ebp-C]
004029FF  |.  837D>|cmp dword ptr ss:[ebp-C],14
00402A03  |.^ 7C D>\jl short pmjszj.004029DB               ;  这一段就是就机器码与用户名对应位进行OR运算最后结果保存
00402A05  |.  33C0 xor eax,eax                             ;  这里处理机器码了
00402A07  |.  8945>mov dword ptr ss:[ebp-8],eax
00402A0A  |.  33C9 xor ecx,ecx
00402A0C  |.  894D>mov dword ptr ss:[ebp-C],ecx
00402A0F  |>  8B45>/mov eax,dword ptr ss:[ebp-C]
00402A12  |.  0FBE>|movsx edx,byte ptr ss:[ebp+eax-24]     ;  得到刚才计算出来的每一位
00402A17  |.  8955>|mov dword ptr ss:[ebp-28],edx
00402A1A  |.  DB45>|fild dword ptr ss:[ebp-28]             ;  将每一位机器码转化为实数
00402A1D  |.  83C4>|add esp,-8                             ; /
00402A20  |.  DD1C>|fstp qword ptr ss:[esp]                ; |存储
00402A23  |.  E8 C>|call pmjszj.004920F0                   ; \负数转化为正数
00402A28  |.  83C4>|add esp,8
00402A2B  |.  B9 1>|mov ecx,14
00402A30  |.  2B4D>|sub ecx,dword ptr ss:[ebp-C]
00402A33  |.  894D>|mov dword ptr ss:[ebp-2C],ecx
00402A36  |.  DB45>|fild dword ptr ss:[ebp-2C]
00402A39  |.  DEC9 |fmulp st(1),st                         ;  将刚才计算出来的每一位机器码转化10进制后乘以(20减去位数)
00402A3B  |.  DB45>|fild dword ptr ss:[ebp-8]              ;  装入前一次的结果
00402A3E  |.  DEC1 |faddp st(1),st                         ;  将每一次结果加起来
00402A40  |.  E8 D>|call pmjszj.00492118                   ;  结果转化位16进制放到EAX中
00402A45  |.  8945>|mov dword ptr ss:[ebp-8],eax
00402A48  |.  FF45>|inc dword ptr ss:[ebp-C]               ;  下一位
00402A4B  |.  837D>|cmp dword ptr ss:[ebp-C],14
00402A4F  |.^ 7C B>\jl short pmjszj.00402A0F
00402A51  |.  8B45>mov eax,dword ptr ss:[ebp-8]
00402A54  |.  B9 A>mov ecx,186A0                           ;  固定值100000
00402A59  |.  99   cdq
00402A5A  |.  F7F9 idiv ecx                                ;  上面的结果除以100000
00402A5C  |.  8955>mov dword ptr ss:[ebp-4],edx            ;  余数存储
00402A5F  |.  8B45>mov eax,dword ptr ss:[ebp-8]            ;  取上面相加的值
00402A62  |.  05 3>add eax,3039                            ;  将上面相加的值加上12345
00402A67  |.  25 0>and eax,80000007                        ;  结果与80000007进行与运算
00402A6C  |.  79 0>jns short pmjszj.00402A73               ;  如果是E数
00402A6E  |.  48   dec eax
00402A6F  |.  83C8>or eax,FFFFFFF8
00402A72  |.  40   inc eax
00402A73  |>  8945>mov dword ptr ss:[ebp-8],eax            ;  存储
00402A76  |.  DB45>fild dword ptr ss:[ebp-8]               ;  装入这个值
00402A79  |.  DB45>fild dword ptr ss:[ebp-4]               ;  在装入前面除以100000的余数值
00402A7C  |.  DB2D>fld tbyte ptr ds:[402A94]               ;  装入固定值1.5283002229637196370E-06
00402A82  |.  DEC9 fmulp st(1),st                          ;  余数乘以固定值1.5283002229637196370E-06
00402A84  |.  DEC1 faddp st(1),st                          ;  再加上2
00402A86  |.  8B55>mov edx,dword ptr ss:[ebp+8]
00402A89  |.  D99A>fstp dword ptr ds:[edx+424]             ;  结果存储了
00402A8F  |.  8BE5 mov esp,ebp
00402A91  |.  5D   pop ebp
00402A92  \.  C3   retn
……………………………………………………………………………………………………………………………………………………

第三部分;注意来到这里是随机的
…………………………………………………………………………………………………………………………………………………………
00406A10  /$  55   push ebp                                ;  这里就是计算正确第三组数据的地方
00406A11  |.  8BEC mov ebp,esp
00406A13  |.  83C4>add esp,-8
00406A16  |.  8B45>mov eax,dword ptr ss:[ebp+8]
00406A19  |.  8B90>mov edx,dword ptr ds:[eax+418]          ;  取出第一次计算计算出来的数据(是根据在EAX+418下内存访问断点知道是第一次计算中的结果)
00406A1F  |.  8955>mov dword ptr ss:[ebp-4],edx
00406A22  |.  8B4D>mov ecx,dword ptr ss:[ebp-4]
00406A25  |.  81C1>add ecx,4D44                            ;  取出的结果加上4D44
00406A2B  |.  894D>mov dword ptr ss:[ebp-8],ecx
00406A2E  |.  DB45>fild dword ptr ss:[ebp-8]
00406A31  |.  DC0D>fmul qword ptr ds:[406A68]              ;  结果乘以3.14
00406A37  |.  DB2D>fld tbyte ptr ds:[406A70]
00406A3D  |.  DEC9 fmulp st(1),st                          ;  结果再乘以0.1594896331738437110
00406A3F  |.  E8 D>call pmjszj.00492118
00406A44  |.  8945>mov dword ptr ss:[ebp-4],eax
00406A47  |.  8B45>mov eax,dword ptr ss:[ebp-4]
00406A4A  |.  B9 A>mov ecx,186A0
00406A4F  |.  99   cdq
00406A50  |.  F7F9 idiv ecx
00406A52  |.  8955>mov dword ptr ss:[ebp-4],edx
00406A55  |.  8B45>mov eax,dword ptr ss:[ebp-4]
00406A58  |.  8B55>mov edx,dword ptr ss:[ebp+8]
00406A5B  |.  8982>mov dword ptr ds:[edx+41C],eax          ;  写入了(就是根据这里的地址(EDX+41C)下内存访问断点来到这里的)
00406A61  |.  59   pop ecx
00406A62  |.  59   pop ecx
00406A63  |.  5D   pop ebp
00406A64  \.  C3   retn
……………………………………………………………………………………………………………………………………………………………………
用第一次计算出来的值A在加上4D44再乘以3.14再乘以0.1594896331738437110
……………………………………………………………………………………………………………………………………………………………………

00406E50  /$  55   push ebp                                ;  注意来到这里是随机的!!这里是第三次比较判断:计算第三部分注册码的地方
00406E51  |.  8BEC mov ebp,esp
00406E53  |.  83C4>add esp,-34
00406E56  |.  33C0 xor eax,eax
00406E58  |.  8945>mov dword ptr ss:[ebp-4],eax
00406E5B  |>  8B55>/mov edx,dword ptr ss:[ebp-4]
00406E5E  |.  8B4D>|mov ecx,dword ptr ss:[ebp+8]
00406E61  |.  0FBE>|movsx eax,byte ptr ds:[ecx+edx+46F]
00406E69  |.  25 0>|and eax,80000001
00406E6E  |.  79 0>|jns short pmjszj.00406E75
00406E70  |.  48   |dec eax
00406E71  |.  83C8>|or eax,FFFFFFFE
00406E74  |.  40   |inc eax
00406E75  |>  85C0 |test eax,eax
00406E77  |.  75 2>|jnz short pmjszj.00406EA8
00406E79  |.  8B55>|mov edx,dword ptr ss:[ebp-4]
00406E7C  |.  8B4D>|mov ecx,dword ptr ss:[ebp+8]
00406E7F  |.  8A84>|mov al,byte ptr ds:[ecx+edx*2+44A]
00406E86  |.  04 E>|add al,0E7
00406E88  |.  8B55>|mov edx,dword ptr ss:[ebp-4]
00406E8B  |.  8844>|mov byte ptr ss:[ebp+edx*2-1C],al
00406E8F  |.  8B4D>|mov ecx,dword ptr ss:[ebp-4]
00406E92  |.  8B45>|mov eax,dword ptr ss:[ebp+8]
00406E95  |.  8A94>|mov dl,byte ptr ds:[eax+ecx*2+44B]
00406E9C  |.  80C2>|add dl,0E7
00406E9F  |.  8B4D>|mov ecx,dword ptr ss:[ebp-4]
00406EA2  |.  8854>|mov byte ptr ss:[ebp+ecx*2-1B],dl
00406EA6  |.  EB 2>|jmp short pmjszj.00406ED5
00406EA8  |>  8B45>|mov eax,dword ptr ss:[ebp-4]
00406EAB  |.  8B55>|mov edx,dword ptr ss:[ebp+8]
00406EAE  |.  8A8C>|mov cl,byte ptr ds:[edx+eax*2+44B]     ;  取第6位开始这一组的输入码(在全局变量〔可以在保存时候可以看到我这里00e72511看到,[edx+eax*2+44B]下内存断点)
00406EB5  |.  80C1>|add cl,0E7
00406EB8  |.  8B45>|mov eax,dword ptr ss:[ebp-4]
00406EBB  |.  884C>|mov byte ptr ss:[ebp+eax*2-1C],cl
00406EBF  |.  8B55>|mov edx,dword ptr ss:[ebp-4]
00406EC2  |.  8B4D>|mov ecx,dword ptr ss:[ebp+8]
00406EC5  |.  8A84>|mov al,byte ptr ds:[ecx+edx*2+44A]
00406ECC  |.  04 E>|add al,0E7
00406ECE  |.  8B55>|mov edx,dword ptr ss:[ebp-4]
00406ED1  |.  8844>|mov byte ptr ss:[ebp+edx*2-1B],al
00406ED5  |>  FF45>|inc dword ptr ss:[ebp-4]
00406ED8  |.  837D>|cmp dword ptr ss:[ebp-4],2
00406EDC  |.^ 0F8C>\jl pmjszj.00406E5B                     ;  这个循环取出四组数据
00406EE2  |.  8B4D>mov ecx,dword ptr ss:[ebp+8]
00406EE5  |.  FFB1>push dword ptr ds:[ecx+41C]             ; /取出ECX+41C地址的数据(根据这里地址ECX+41C下内存访问断点去上一层找怎么样计算出来的数据的)
00406EEB  |.  68 2>push pmjszj.0049BB2E                    ; |Arg2 = 0049BB2E ASCII "%d"
00406EF0  |.  8D45>lea eax,dword ptr ss:[ebp-34]           ; |
00406EF3  |.  50   push eax                                ; |Arg1
00406EF4  |.  E8 2>call pmjszj.00490628                    ; \将前面计算出来的用于比较的值转化为十进制
00406EF9  |.  83C4>add esp,0C
00406EFC  |.  8B55>mov edx,dword ptr ss:[ebp+8]
00406EFF  |.  8A8A>mov cl,byte ptr ds:[edx+44E]            ;  第5组了
00406F05  |.  80C1>add cl,0E7
00406F08  |.  884D>mov byte ptr ss:[ebp-18],cl
00406F0B  |.  C645>mov byte ptr ss:[ebp-17],0
00406F0F  |.  33C0 xor eax,eax
00406F11  |.  8945>mov dword ptr ss:[ebp-4],eax
00406F14  |>  8B55>/mov edx,dword ptr ss:[ebp-4]
00406F17  |.  0FBE>|movsx ecx,byte ptr ss:[ebp+edx-1C]
00406F1C  |.  83F9>|cmp ecx,28
00406F1F  |.  75 0>|jnz short pmjszj.00406F29
00406F21  |.  8B45>|mov eax,dword ptr ss:[ebp-4]
00406F24  |.  C644>|mov byte ptr ss:[ebp+eax-1C],0
00406F29  |>  FF45>|inc dword ptr ss:[ebp-4]
00406F2C  |.  837D>|cmp dword ptr ss:[ebp-4],4
00406F30  |.^ 7C E>\jl short pmjszj.00406F14
00406F32  |.  8D55>lea edx,dword ptr ss:[ebp-1C]
00406F35  |.  52   push edx
00406F36  |.  8D4D>lea ecx,dword ptr ss:[ebp-34]
00406F39  |.  51   push ecx
00406F3A  |.  E8 C>call pmjszj.0048EB00                    ;  取第6到10位与计算出来的进行比较
00406F3F  |.  83C4>add esp,8
00406F42  |.  8B55>mov edx,dword ptr ss:[ebp+8]
00406F45  |.  8982>mov dword ptr ds:[edx+420],eax
00406F4B  |.  8BE5 mov esp,ebp
00406F4D  |.  5D   pop ebp
00406F4E  \.  C3   retn
………………………………………………………………………………………………………………………………………………
第三次:
将用第一次计算出来的值A在加上4D44再乘以3.14再乘以0.1594896331738437110的结果取其整数部分与
输入码的第6、7、8、9、10位分别加上E7后的数比较
………………………………………………………………………………………………………………………………………………

总结:注册分三步:
第一步:(看上去成功,其实…………
把用户名与机器码对应的ASCII   XOR运算得到20位结果,得到的结果用20位,每一位的ASCII分别乘以它自己的
位数全部相加起来最后结果加上D431(16进制)位数从0开始的;结果分别除以A得到余数在加上30得到一串字符串
必定在0~9之间用这个字符串一共有5字符,用这5个字符的ASCII加上16进制19,即得到输入码的前5位字符
输入码一共有20位字符,第20位有要求:
第20位的注册码的ASCII减去41得到的结果
一定要等于前19位的输入码的ASCII相加的和除以20得到的余数

其中:把用户名与机器码对应的ASCII   XOR运算得到20位结果,得到的结果用20位,每一位的ASCII分别乘以它自己的
位数全部相加起来最后结果加上D431(16进制)位数从0开始的用到第三次。结果为A。

第二步:
将注册码的第16位开始向前取6位每一位加上EC变成ASCII其实是个小数,(转化为实数)结果为B再进行运算B-0.88891*SINB
这个值然后与机器码计算出来的值比较看是否相等。(当然要写注册机的会要反过来哦-解方程吧)

第三步:
第三次:
将用第一次计算出来的值A在加上4D44再乘以3.14再乘以0.1594896331738437110的结果取其整数部分与
输入码的第6、7、8、9、10位分别加上E7后的数比较
………………………………………………………………………………………………………………………………………………


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
2
2006-1-24 17:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
的确不错,我业有问题想研究以下。给你发邮件怎么不回?QQ 44328100
2006-2-23 15:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
佩服,继续努力
2006-2-23 21:42
0
雪    币: 424
活跃值: (3503)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
5
支持!学习!
2006-2-24 12:43
0
雪    币: 250
活跃值: (103)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
支持!!!!
2006-3-23 22:06
0
雪    币: 207
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
谢谢楼主的分析!希望能继续发像这样的好文!
2006-3-23 22:30
0
雪    币: 191
活跃值: (345)
能力值: ( LV9,RANK:450 )
在线值:
发帖
回帖
粉丝
8
分析花了多长时间?
2006-3-23 23:42
0
雪    币: 328
活跃值: (925)
能力值: ( LV9,RANK:1010 )
在线值:
发帖
回帖
粉丝
9
断断续续,开始一段时间没思路,反复尝试吧。呵呵。
2006-3-24 08:26
0
雪    币: 236
活跃值: (35)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
是比较好的文章  详细有经典 学习中
2006-3-24 08:53
0
雪    币: 390
活跃值: (37)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
楼主强啊!
2006-3-24 09:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
LZ强.......正在学习中!~
2006-3-24 20:22
0
游客
登录 | 注册 方可回帖
返回
//