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
【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢! 我还以为风球兄弟天天在写破文咧
;P;P 原帖由 紫色缘 于 2006-1-11 11:17 发表
我还以为风球兄弟天天在写破文咧
;P;P
呵```哪有那么多时间```有时间就转几篇文章过来论坛里,大家一起学习```;P 学习学哥的 需多学学呀!
页:
[1]