风球 发表于 2006-1-11 11:11:14

BoxShotMaker1.88注册算法分析+汇编注册机

转自 看雪论坛

【破文标题】BoxShotMaker1.88注册算法分析+汇编注册机
【破文作者】snake
【软件名称】Box Shot Maker 1.88
【下载地址】http://yncnc.onlinedown.net/soft/44994.htm
【软件简介】一款能把普通的一维图片转变成具有三维效果的图片。自带了一个简单的图形编辑器。
【调试环境】Windows 2000+SP4、PEiD、Ollydbg
【作者声明】只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!

--------------------------------------------------------------------------------------
【算法总结】

注册码长度为50位,以"12345678901234567890123456789012345678901234567890"为例
1、第2位为字符'-'
2、第11位为字符'Y'
3、第41~44位为字符'BSM1'
4、取注册码前6位的每一位的ASCII值%10+30分别得到注册码的最后6位
   则注册码转换为"1-34567890Y23456789012345678901234567890BSM1951234"
5、将第2位换为字符‘#’
6、从常串"1z1h+2a0n-0g8y*9a1n|"第3位起分别取值与注册码从第2位起分别取值进行运算得到注册码的第12~19位
   结果为"1#34567890YIRNVLHHT012345678901234567890BSM1951234"
7、从注册码第2位起依次取相邻3位进行运算生成一个新的16位字符串+"ZY"得字符串"ovcplrkflaewqmcoZY"
8、依次取新字符串相邻两位进行运算得注册码第25~40位
9、注册码第24位为0~9之间的值,其余位任意
得最终注册码为"1-34567890YIRNVLHHT01234XBKARTDKIKFSKTJPBSM1951234",具体运算过程见下面分析

【破解过程】

一、程序脱壳

用PEiD查壳,为ASPack 2.001 -> Alexey Solodovnikov,OD载入手动脱壳(略)
脱壳后查为Borland C++ DLL Method 1

二、算法分析

分别输入Email Address,Registration Code,根据提示的错误信息,可断在此处

0042C4E5    .8BEC            mov ebp,esp
0042C4E7    .83C4 94         add esp,-6C
0042C4EA    .8955 98         mov dword ptr ss:,edx
0042C4ED    .8945 9C         mov dword ptr ss:,eax
0042C4F0    .B8 C4155200   mov eax,x.005215C4
0042C4F5    .E8 86D80C00   call x.004F9D80
0042C4FA    .66:C745 B0 0800 mov word ptr ss:,8
0042C500    .8D45 FC         lea eax,dword ptr ss:
0042C503    .E8 685FFDFF   call x.00402470
0042C508    .8BD0            mov edx,eax
0042C50A    .FF45 BC         inc dword ptr ss:
0042C50D    .8B4D 9C         mov ecx,dword ptr ss:
0042C510    .8B81 00030000   mov eax,dword ptr ds:
0042C516    .E8 E5E80700   call x.004AAE00
0042C51B    .8D45 FC         lea eax,dword ptr ss:
0042C51E    .E8 5DEEFFFF   call x.0042B380                               ;取输入的Email长度
0042C523    .83F8 03         cmp eax,3                                     ;是否有效
0042C526    .7C 6A         jl short x.0042C592
0042C528    .8D45 F8         lea eax,dword ptr ss:
0042C52B    .E8 405FFDFF   call x.00402470
......
0042C5F3    .66:C745 B0 2000 mov word ptr ss:,20
0042C5F9    .8D45 EC         lea eax,dword ptr ss:
0042C5FC    .E8 6F5EFDFF   call x.00402470
0042C601    .8BD0            mov edx,eax
0042C603    .FF45 BC         inc dword ptr ss:
0042C606    .8B4D 9C         mov ecx,dword ptr ss:
0042C609    .8B81 04030000   mov eax,dword ptr ds:
0042C60F    .E8 ECE70700   call x.004AAE00
0042C614    .8D55 EC         lea edx,dword ptr ss:
0042C617    .FF32            push dword ptr ds:                     ; /取徦码
0042C619    .E8 DAE9FFFF   call x.0042AFF8                               ; \算法call,跟进
0042C61E    .59            pop ecx
0042C61F    .8B0D E09B5200   mov ecx,dword ptr ds:               ;x._Form1
0042C625    .8B11            mov edx,dword ptr ds:
0042C627    .8882 91050000   mov byte ptr ds:,al                  ;设置标志位
0042C62D    .FF4D BC         dec dword ptr ss:
0042C630    .8D45 EC         lea eax,dword ptr ss:
0042C633    .BA 02000000   mov edx,2
0042C638    .E8 D7780D00   call x.00503F14
0042C63D    .A1 E09B5200   mov eax,dword ptr ds:
0042C642    .8B08            mov ecx,dword ptr ds:
0042C644    .80B9 91050000 0>cmp byte ptr ds:,0
0042C64B    .0F84 1F020000   je x.0042C870                                 ;关键跳转,不相等则验证通过
0042C651    .66:C745 B0 2C00 mov word ptr ss:,2C
0042C657    .8D45 E8         lea eax,dword ptr ss:
0042C65A    .E8 115EFDFF   call x.00402470
0042C65F    .8BD0            mov edx,eax
0042C661    .FF45 BC         inc dword ptr ss:
0042C664    .8B4D 9C         mov ecx,dword ptr ss:
0042C667    .8B81 04030000   mov eax,dword ptr ds:
0042C66D    .E8 8EE70700   call x.004AAE00
0042C672    .8D55 E8         lea edx,dword ptr ss:
0042C675    .8B45 9C         mov eax,dword ptr ss:
0042C678    .05 2C030000   add eax,32C
0042C67D    .E8 C2780D00   call x.00503F44
0042C682    .FF4D BC         dec dword ptr ss:
0042C685    .8D45 E8         lea eax,dword ptr ss:
0042C688    .BA 02000000   mov edx,2
0042C68D    .E8 82780D00   call x.00503F14
0042C692    .8B45 9C         mov eax,dword ptr ss:
0042C695    .05 2C030000   add eax,32C
0042C69A    .E8 015EFDFF   call x.004024A0
0042C69F    .0FBE50 17       movsx edx,byte ptr ds:                ;取假码第24位
0042C6A3    .83FA 30         cmp edx,30                                    ;与‘0’比较
0042C6A6    .7C 16         jl short x.0042C6BE                           ;不跳
0042C6A8    .8B45 9C         mov eax,dword ptr ss:
0042C6AB    .05 2C030000   add eax,32C
0042C6B0    .E8 EB5DFDFF   call x.004024A0
0042C6B5    .0FBE50 17       movsx edx,byte ptr ds:                ;取假码第24位
0042C6B9    .83FA 39         cmp edx,39                                    ;与‘9’比较
0042C6BC    .7E 0F         jle short x.0042C6CD                        ;跳
0042C6BE    >8B0D E09B5200   mov ecx,dword ptr ds:               ;x._Form1
0042C6C4    .8B01            mov eax,dword ptr ds:
0042C6C6    .C680 91050000 0>mov byte ptr ds:,0
0042C6CD    >B2 01         mov dl,1
0042C6CF    .A1 94074E00   mov eax,dword ptr ds:
0042C6D4    .E8 BB410B00   call x.004E0894
0042C6D9    .8945 94         mov dword ptr ss:,eax
0042C6DC    .BA 01000080   mov edx,80000001
0042C6E1    .8B45 94         mov eax,dword ptr ss:
0042C6E4    .E8 37760D00   call x.00503D20
0042C6E9    .8B15 E09B5200   mov edx,dword ptr ds:               ;x._Form1
0042C6EF    .8B0A            mov ecx,dword ptr ds:
0042C6F1    .80B9 91050000 0>cmp byte ptr ds:,0
0042C6F8    .0F84 06010000   je x.0042C804
0042C6FE    .66:C745 B0 3800 mov word ptr ss:,38
0042C704    .BA 660D5200   mov edx,x.00520D66                            ;ASCII "Software\XTZY\BoxShotMaker"
......

============ 跟进 0042C619    .E8 DAE9FFFF   call x.0042AFF8==========

0042AFF8   /$55            push ebp
0042AFF9   |.8BEC            mov ebp,esp
0042AFFB   |.81C4 64FFFFFF   add esp,-9C
0042B001   |.56            push esi
0042B002   |.57            push edi
0042B003   |.B8 A00F5200   mov eax,x.00520FA0
0042B008   |.E8 73ED0C00   call x.004F9D80
0042B00D   |.C745 F4 0100000>mov ,1
0042B014   |.8D55 08         lea edx,
0042B017   |.8D45 08         lea eax,
0042B01A   |.E8 CD8D0D00   call x.00503DEC
0042B01F   |.FF45 F4         inc
0042B022   |.66:C745 E8 0800 mov word ptr ss:,8
0042B028   |.C645 D7 00      mov byte ptr ss:,0
0042B02C   |.8D45 08         lea eax,
0042B02F   |.E8 4C030000   call x.0042B380                               ;取假码长度
0042B034   |.83F8 32         cmp eax,32                                    ;是否为50位
0042B037   |.0F85 B1000000   jnz x.0042B0EE
0042B03D   |.66:C745 E8 2000 mov word ptr ss:,20
0042B043   |.8D45 FC         lea eax,
0042B046   |.E8 2574FDFF   call x.00402470
0042B04B   |.50            push eax                                    ; /Arg1
0042B04C   |.FF45 F4         inc                                  ; |
0042B04F   |.8D45 08         lea eax,                               ; |
0042B052   |.B9 06000000   mov ecx,6                                     ; |
0042B057   |.BA 2D000000   mov edx,2D                                    ; |
0042B05C   |.E8 FB910D00   call x.0050425C                               ; \x.0050425C
0042B061   |.66:C745 E8 1400 mov word ptr ss:,14
0042B067   |.8D45 FC         lea eax,
0042B06A   |.E8 3174FDFF   call x.004024A0
0042B06F   |.50            push eax                                    ; /Arg2
0042B070   |.8D55 D0         lea edx,                            ; |
0042B073   |.52            push edx                                    ; |Arg1
0042B074   |.E8 6FEA0C00   call x.004F9AE8                               ; \x.004F9AE8
0042B079   |.83C4 08         add esp,8
0042B07C   |.C645 CF 01      mov byte ptr ss:,1
0042B080   |.33C9            xor ecx,ecx
0042B082   |.894D C8         mov ,ecx
0042B085   |>8D45 08         /lea eax,
0042B088   |.E8 1374FDFF   |call x.004024A0
0042B08D   |.8B55 C8         |mov edx,
0042B090   |.0FBE0410      |movsx eax,byte ptr ds:            ;分别取假码前6位进行运算
0042B094   |.B9 0A000000   |mov ecx,0A
0042B099   |.99            |cdq
0042B09A   |.F7F9            |idiv ecx
0042B09C   |.83C2 30         |add edx,30
0042B09F   |.8B45 C8         |mov eax,
0042B0A2   |.0FBE4C05 D0   |movsx ecx,byte ptr ss:
0042B0A7   |.3BD1            |cmp edx,ecx                                  ;每位运算的结果与分别与最后6位比较
0042B0A9   |.74 06         |je short x.0042B0B1                        ;必须跳,否则验证失败
0042B0AB   |.C645 CF 00      |mov byte ptr ss:,0
0042B0AF   |.EB 09         |jmp short x.0042B0BA
0042B0B1   |>FF45 C8         |inc
0042B0B4   |.837D C8 06      |cmp ,6
0042B0B8   |.^ 7C CB         \jl short x.0042B085
0042B0BA   |>8B15 E09B5200   mov edx,dword ptr ds:               ;x._Form1
0042B0C0   |.8B02            mov eax,dword ptr ds:
0042B0C2   |.8A55 CF         mov dl,byte ptr ss:
0042B0C5   |.8890 93050000   mov byte ptr ds:,dl
0042B0CB   |.8D45 08         lea eax,
0042B0CE   |.BA 2C000000   mov edx,2C
0042B0D3   |.E8 30900D00   call x.00504108                               ;取假码前44位
0042B0D8   |.FF4D F4         dec
0042B0DB   |.8D45 FC         lea eax,
0042B0DE   |.BA 02000000   mov edx,2
0042B0E3   |.E8 2C8E0D00   call x.00503F14
0042B0E8   |.66:C745 E8 0800 mov word ptr ss:,8
0042B0EE   |>8D45 08         lea eax,
0042B0F1   |.E8 8A020000   call x.0042B380
0042B0F6   |.83F8 2C         cmp eax,2C                                    ;是否为44位
0042B0F9   |.0F85 5C020000   jnz x.0042B35B
0042B0FF   |.BE 0E0C5200   mov esi,x.00520C0E                            ;ASCII "1z1h+2a0n-0g8y*9a1n|"
0042B104   |.8DBD 78FFFFFF   lea edi,
0042B10A   |.B9 05000000   mov ecx,5
0042B10F   |.F3:A5         rep movs dword ptr es:,dword ptr ds:[esi>
0042B111   |.A4            movs byte ptr es:,byte ptr ds:
0042B112   |.66:C745 E8 0800 mov word ptr ss:,8
0042B118   |.8D45 08         lea eax,
0042B11B   |.E8 8073FDFF   call x.004024A0
0042B120   |.0FBE50 28       movsx edx,byte ptr ds:                ;取第41位
0042B124   |.83FA 42         cmp edx,42                                    ;与‘B’比较
0042B127   |.74 23         je short x.0042B14C                           ;跳
0042B129   |.33C0            xor eax,eax
0042B12B   |.50            push eax
0042B12C   |.FF4D F4         dec
0042B12F   |.8D45 08         lea eax,
0042B132   |.BA 02000000   mov edx,2
0042B137   |.E8 D88D0D00   call x.00503F14
0042B13C   |.58            pop eax
0042B13D   |.8B55 D8         mov edx,
0042B140   |.64:8915 0000000>mov dword ptr fs:,edx
0042B147   |.E9 2E020000   jmp x.0042B37A
0042B14C   |>8D45 08         lea eax,
0042B14F   |.E8 4C73FDFF   call x.004024A0
0042B154   |.0FBE50 29       movsx edx,byte ptr ds:                ;取第42位
0042B158   |.83FA 53         cmp edx,53                                    ;与‘S’比较
0042B15B   |.74 23         je short x.0042B180                           ;跳
0042B15D   |.33C0            xor eax,eax
0042B15F   |.50            push eax
0042B160   |.FF4D F4         dec
0042B163   |.8D45 08         lea eax,
0042B166   |.BA 02000000   mov edx,2
0042B16B   |.E8 A48D0D00   call x.00503F14
0042B170   |.58            pop eax
0042B171   |.8B55 D8         mov edx,
0042B174   |.64:8915 0000000>mov dword ptr fs:,edx
0042B17B   |.E9 FA010000   jmp x.0042B37A
0042B180   |>8D45 08         lea eax,
0042B183   |.E8 1873FDFF   call x.004024A0
0042B188   |.0FBE50 2A       movsx edx,byte ptr ds:                ;取第43位
0042B18C   |.83FA 4D         cmp edx,4D                                    ;与‘M’比较
0042B18F   |.74 23         je short x.0042B1B4                           ;跳
0042B191   |.33C0            xor eax,eax
0042B193   |.50            push eax
0042B194   |.FF4D F4         dec
0042B197   |.8D45 08         lea eax,
0042B19A   |.BA 02000000   mov edx,2
0042B19F   |.E8 708D0D00   call x.00503F14
0042B1A4   |.58            pop eax
0042B1A5   |.8B55 D8         mov edx,
0042B1A8   |.64:8915 0000000>mov dword ptr fs:,edx
0042B1AF   |.E9 C6010000   jmp x.0042B37A
0042B1B4   |>8D45 08         lea eax,
0042B1B7   |.E8 E472FDFF   call x.004024A0
0042B1BC   |.0FBE50 2B       movsx edx,byte ptr ds:                ;取第44位
0042B1C0   |.83FA 31         cmp edx,31                                    ;与‘1’比较
0042B1C3   |.74 23         je short x.0042B1E8                           ;跳
0042B1C5   |.33C0            xor eax,eax
0042B1C7   |.50            push eax
0042B1C8   |.FF4D F4         dec
0042B1CB   |.8D45 08         lea eax,
0042B1CE   |.BA 02000000   mov edx,2
0042B1D3   |.E8 3C8D0D00   call x.00503F14
0042B1D8   |.58            pop eax
0042B1D9   |.8B55 D8         mov edx,
0042B1DC   |.64:8915 0000000>mov dword ptr fs:,edx
0042B1E3   |.E9 92010000   jmp x.0042B37A
0042B1E8   |>8D45 08         lea eax,
0042B1EB   |.E8 B072FDFF   call x.004024A0
0042B1F0   |.50            push eax                                    ; /Arg2
0042B1F1   |.8D55 90         lea edx,                            ; |
0042B1F4   |.52            push edx                                    ; |Arg1
0042B1F5   |.E8 EEE80C00   call x.004F9AE8                               ; \x.004F9AE8
0042B1FA   |.83C4 08         add esp,8
0042B1FD   |.0FBE4D 91       movsx ecx,byte ptr ss:                ;取第2位
0042B201   |.83F9 2D         cmp ecx,2D                                    ;与‘-’比较
0042B204   |.0F85 51010000   jnz x.0042B35B                              ;不跳
0042B20A   |.C645 91 23      mov byte ptr ss:,23                   ;将第2位改为‘#’
0042B20E   |.C645 D7 01      mov byte ptr ss:,1
0042B212   |.C745 C4 0200000>mov ,2
0042B219   |>8B45 C4         /mov eax,
0042B21C   |.0FBE9405 78FFFF>|movsx edx,byte ptr ss:         ;取常串第3位
0042B224   |.8B4D C4         |mov ecx,
0042B227   |.0FBE440D 8F   |movsx eax,byte ptr ss:         ;取假码第2位
0042B22C   |.03D0            |add edx,eax
0042B22E   |.8B4D C4         |mov ecx,
0042B231   |.0FBE440D 90   |movsx eax,byte ptr ss:         ;取假码第3位
0042B236   |.33D0            |xor edx,eax
0042B238   |.8B4D C4         |mov ecx,
0042B23B   |.0FBE840D 78FFFF>|movsx eax,byte ptr ss:         ;取常串第3位
0042B243   |.33D0            |xor edx,eax
0042B245   |.52            |push edx                                     ; /Arg1
0042B246   |.E8 25E0FFFF   |call x.00429270                              ; \x.00429270
0042B24B   |.59            |pop ecx
0042B24C   |.B9 1A000000   |mov ecx,1A
0042B251   |.99            |cdq
0042B252   |.F7F9            |idiv ecx
0042B254   |.83C2 41         |add edx,41                                 ;运算结果
0042B257   |.8B45 C4         |mov eax,
0042B25A   |.0FBE4C05 99   |movsx ecx,byte ptr ss:         ;取假码第12位
0042B25F   |.3BD1            |cmp edx,ecx                                  ;比较
0042B261   |.74 06         |je short x.0042B269                        ;必须跳
0042B263   |.C645 D7 00      |mov byte ptr ss:,0
0042B267   |.EB 09         |jmp short x.0042B272
0042B269   |>FF45 C4         |inc                                ;计数器
0042B26C   |.837D C4 0A      |cmp ,0A                            ;循环8次
0042B270   |.^ 7C A7         \jl short x.0042B219
0042B272   |>807D D7 00      cmp byte ptr ss:,0
0042B276   |.0F84 D2000000   je x.0042B34E
0042B27C   |.C745 C0 1800000>mov ,18
0042B283   |.66:C745 E8 0800 mov word ptr ss:,8
0042B289   |.837D C0 28      cmp ,28
0042B28D   |.7D 54         jge short x.0042B2E3
0042B28F   |>8B55 C0         /mov edx,
0042B292   |.0FBE8415 79FFFF>|movsx eax,byte ptr ss:         ;取假码第2位
0042B29A   |.B9 06000000   |mov ecx,6
0042B29F   |.99            |cdq
0042B2A0   |.F7F9            |idiv ecx
0042B2A2   |.8BCA            |mov ecx,edx
0042B2A4   |.8B45 C0         |mov eax,
0042B2A7   |.0FBE9405 7AFFFF>|movsx edx,byte ptr ss:         ;取假码第3位
0042B2AF   |.D3E2            |shl edx,cl
0042B2B1   |.8B45 C0         |mov eax,
0042B2B4   |.0FBE8C05 7BFFFF>|movsx ecx,byte ptr ss:         ;取假码第4位
0042B2BC   |.0BD1            |or edx,ecx
0042B2BE   |.52            |push edx                                     ; /Arg1
0042B2BF   |.E8 ACDFFFFF   |call x.00429270                              ; \x.00429270
0042B2C4   |.59            |pop ecx
0042B2C5   |.B9 1A000000   |mov ecx,1A
0042B2CA   |.99            |cdq
0042B2CB   |.F7F9            |idiv ecx
0042B2CD   |.80C2 61         |add dl,61                                    ;运算结果
0042B2D0   |.8B45 C0         |mov eax,
0042B2D3   |.889405 4CFFFFFF |mov byte ptr ss:,dl            ;生成新的字符串
0042B2DA   |.FF45 C0         |inc                                ;计数器
0042B2DD   |.837D C0 28      |cmp ,28                            ;循环16次
0042B2E1   |.^ 7C AC         \jl short x.0042B28F
0042B2E3   |>C685 74FFFFFF 5>mov byte ptr ss:,5A
0042B2EA   |.C685 75FFFFFF 5>mov byte ptr ss:,59
0042B2F1   |.C745 BC 1800000>mov ,18
0042B2F8   |.66:C745 E8 0800 mov word ptr ss:,8
0042B2FE   |.837D BC 28      cmp ,28
0042B302   |.7D 4A         jge short x.0042B34E
0042B304   |>8B55 BC         /mov edx,
0042B307   |.0FBE8415 4CFFFF>|movsx eax,byte ptr ss:         ;新字符串第1位
0042B30F   |.C1E0 04         |shl eax,4
0042B312   |.8B55 BC         |mov edx,
0042B315   |.0FBE8C15 4DFFFF>|movsx ecx,byte ptr ss:         ;新字符串第2位
0042B31D   |.D1F9            |sar ecx,1
0042B31F   |.33C1            |xor eax,ecx
0042B321   |.50            |push eax                                     ; /Arg1
0042B322   |.E8 49DFFFFF   |call x.00429270                              ; \x.00429270
0042B327   |.59            |pop ecx
0042B328   |.B9 1A000000   |mov ecx,1A
0042B32D   |.99            |cdq
0042B32E   |.F7F9            |idiv ecx
0042B330   |.83C2 41         |add edx,41                                 ;运算结果
0042B333   |.8B45 BC         |mov eax,
0042B336   |.0FBE4405 90   |movsx eax,byte ptr ss:         ;取假码第25位
0042B33B   |.3BD0            |cmp edx,eax                                  ;比较
0042B33D   |.74 06         |je short x.0042B345                        ;必须跳
0042B33F   |.C645 D7 00      |mov byte ptr ss:,0
0042B343   |.EB 09         |jmp short x.0042B34E
0042B345   |>FF45 BC         |inc                                ;计数器
0042B348   |.837D BC 28      |cmp ,28                            ;循环16次
0042B34C   |.^ 7C B6         \jl short x.0042B304
0042B34E   |>0FBE55 9A       movsx edx,byte ptr ss:                ;取假码第11位
0042B352   |.83FA 59         cmp edx,59                                    ;与‘Y’比较
0042B355   |.74 04         je short x.0042B35B                           ;跳
0042B357   |.C645 D7 00      mov byte ptr ss:,0
0042B35B   |>8A45 D7         mov al,byte ptr ss:                   ;验证标志位
0042B35E   |.50            push eax
0042B35F   |.FF4D F4         dec
0042B362   |.8D45 08         lea eax,
0042B365   |.BA 02000000   mov edx,2
0042B36A   |.E8 A58B0D00   call x.00503F14
0042B36F   |.58            pop eax
0042B370   |.8B55 D8         mov edx,
0042B373   |.64:8915 0000000>mov dword ptr fs:,edx
0042B37A   |>5F            pop edi
0042B37B   |.5E            pop esi
0042B37C   |.8BE5            mov esp,ebp
0042B37E   |.5D            pop ebp
0042B37F   \.C3            retn

【汇编注册机算法部分源码】

    .data
szStr    db'1z1h+2a0n-0g8y*9a1n|',0
szData    db'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',0
    .code
GetRegKeyprochDlg:DWORD
    localszReg:BYTE,szTmp:BYTE
    pushad
    invokeRtlZeroMemory,addr szReg,sizeof szReg
    invokeRtlZeroMemory,addr szTmp,sizeof szTmp
    invokeGetTickCount
    leaesi,szData
    leaedi,szReg
    movecx,32h
@@:
    andeax,1fh
    movdl,BYTE ptr
    movBYTE ptr ,dl
    addeax,3
    incedi
    dececx
    jnz@b
   
    leaedi,szReg
    movBYTE ptr ,2dh
    xorebx,ebx
@@:
    movsxeax,BYTE ptr
    movecx,0ah
    cdq
    idivecx
    addedx,30h
    movBYTE ptr ,dl
    incebx
    cmpebx,6
    jl@b
    movBYTE ptr ,42h
    movBYTE ptr ,53h
    movBYTE ptr ,4dh
    movBYTE ptr ,31h
    movBYTE ptr ,23h
    movBYTE ptr ,59h
    movBYTE ptr ,37h
   
    leaesi,szStr
    movebx,2
@@:
    movsxedx,BYTE ptr
    movsxeax,BYTE ptr
    addedx,eax
    movsxeax,BYTE ptr
    xoredx,eax
    movsxeax,BYTE ptr
    xoredx,eax
    moveax,edx
    movecx,1ah
    cdq
    idivecx
    addedx,41h
    movBYTE ptr ,dl
    incebx
    cmpebx,0ah
    jl@b
   
    leaesi,szTmp
    xorebx,ebx
@@:
    movsxeax,BYTE ptr
    movecx,6
    cdq
    idivecx
    movecx,edx
    movsxedx,BYTE ptr
    shledx,cl
    movsxecx,BYTE ptr
    oredx,ecx
    moveax,edx
    movecx,1ah
    cdq
    idivecx
    adddl,61h
    movBYTE ptr ,dl
    incebx
    cmpebx,10h
    jl@b
    movBYTE ptr ,5ah
    movBYTE ptr ,59h
   
    xorebx,ebx
@@:
    movsxeax,BYTE ptr
    shleax,4
    movsxecx,BYTE ptr
    sarecx,1
    xoreax,ecx
    movecx,1ah
    cdq
    idivecx
    addedx,41h
    movBYTE ptr ,dl
    incebx
    cmpebx,10h
    jl@b
    movBYTE ptr ,2dh
    invokeSetDlgItemText,hDlg,IDC_REG,addr szReg
    popad
    ret
GetRegKeyendp

【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!

紫色缘 发表于 2006-1-11 11:17:41

我还以为风球兄弟天天在写破文咧
;P;P

风球 发表于 2006-1-11 12:07:02

原帖由 紫色缘 于 2006-1-11 11:17 发表
我还以为风球兄弟天天在写破文咧
;P;P

呵```哪有那么多时间```有时间就转几篇文章过来论坛里,大家一起学习```;P

lzq1973 发表于 2006-1-11 12:58:20

学习学哥的

西岭秋风 发表于 2006-1-13 08:57:41

需多学学呀!
页: [1]
查看完整版本: BoxShotMaker1.88注册算法分析+汇编注册机