首页
社区
课程
招聘
[原创]UXXX?毒专家 单机版 内存注册机制作+算法分析
2014-8-2 20:38 7347

[原创]UXXX?毒专家 单机版 内存注册机制作+算法分析

2014-8-2 20:38
7347
====================前言====================
以前一直喜欢搞爆破,前几天还看到一个帖子说的是"UXXX?毒专家"的破解,一看过程真的是简单到爆!除了那个作者说的可以搜索字符串“已注册”的方法以外,打开它的语言ini文件还可以看到一些重要的信息:这个软件用数字代替了字符串,所以只要在语言文件里面搜索想要的内容,然后按照它的对应数字就可以到程序里面搜到代码了!本来想补充方法的,但是后来一想别人都已经发过了,那我就不重复提爆破了吧,来看看内存注册机的制作和算法分析。
因为是第一次搞算法,所以弄的程序是比较简单(是我看到程序注册码简单的样子我才敢去尝试),高手勿喷!

====================破解====================
<Part 1>第一部分,编写内存注册机
由于这个软件的注册码在内存里是会明码出现的(不会吧...但确实是这样的...),所以我们可以做内存注册机.
首先,我们为达到目的,最快方法先查找字符串,找到如下:
Ultra 字符串参考,项目 3800
 地址=0057FD32
 反汇编=mov edx,XXXXXXXX.0057FE14
 文本字符串=已注册

好的,双击看看:
0057FCA0  /$  55            push ebp
0057FCA1  |.  8BEC          mov ebp,esp
0057FCA3  |.  33C9          xor ecx,ecx
0057FCA5  |.  51            push ecx
0057FCA6  |.  51            push ecx
0057FCA7  |.  51            push ecx
0057FCA8  |.  51            push ecx
0057FCA9  |.  51            push ecx
0057FCAA  |.  51            push ecx
0057FCAB  |.  51            push ecx
0057FCAC  |.  53            push ebx
0057FCAD  |.  56            push esi
0057FCAE  |.  57            push edi
0057FCAF  |.  8BD8          mov ebx,eax
0057FCB1  |.  33C0          xor eax,eax
0057FCB3  |.  55            push ebp
0057FCB4  |.  68 FBFD5700   push XXXXXXXX.0057FDFB
0057FCB9  |.  64:FF30       push dword ptr fs:[eax]
0057FCBC  |.  64:8920       mov dword ptr fs:[eax],esp
0057FCBF  |.  B2 01         mov dl,1
0057FCC1  |.  A1 3CEB4D00   mov eax,dword ptr ds:[4DEB3C]
0057FCC6  |.  E8 99EFF5FF   call XXXXXXXX.004DEC64
0057FCCB  |.  8BF0          mov esi,eax
0057FCCD  |.  8D55 F4       lea edx,dword ptr ss:[ebp-C]
0057FCD0  |.  8BC6          mov eax,esi
0057FCD2  |.  E8 D9F9F5FF   call XXXXXXXX.004DF6B0
0057FCD7  |.  8B55 F4       mov edx,dword ptr ss:[ebp-C]
0057FCDA  |.  8B83 3C040000 mov eax,dword ptr ds:[ebx+43C]
0057FCE0  |.  E8 3B3BEDFF   call XXXXXXXX.00453820
0057FCE5  |.  8BC6          mov eax,esi
0057FCE7  |.  E8 00F6F5FF   call XXXXXXXX.004DF2EC                     ;  关键Call
0057FCEC  |.  2C 01         sub al,1                                   ;  Switch (cases 0..3)
0057FCEE  |.  72 0D         jb short XXXXXXXX.0057FCFD
0057FCF0  |.  2C 02         sub al,2
0057FCF2  |.  0F84 B5000000 je XXXXXXXX.0057FDAD
0057FCF8  |.  E9 DC000000   jmp XXXXXXXX.0057FDD9
0057FCFD  |>  8B83 1C040000 mov eax,dword ptr ds:[ebx+41C]             ;  Case 0 of switch 0057FCEC
0057FD03  |.  E8 7C71EDFF   call XXXXXXXX.00456E84
0057FD08  |.  8BF8          mov edi,eax
0057FD0A  |.  4F            dec edi
0057FD0B  |.  85FF          test edi,edi
0057FD0D  |.  7C 23         jl short XXXXXXXX.0057FD32
0057FD0F  |.  47            inc edi
0057FD10  |.  C745 F8 00000>mov dword ptr ss:[ebp-8],0
0057FD17  |>  8B55 F8       /mov edx,dword ptr ss:[ebp-8]
0057FD1A  |.  8B83 1C040000 |mov eax,dword ptr ds:[ebx+41C]
0057FD20  |.  E8 2371EDFF   |call XXXXXXXX.00456E48
0057FD25  |.  33D2          |xor edx,edx
0057FD27  |.  8B08          |mov ecx,dword ptr ds:[eax]
0057FD29  |.  FF51 64       |call dword ptr ds:[ecx+64]
0057FD2C  |.  FF45 F8       |inc dword ptr ss:[ebp-8]
0057FD2F  |.  4F            |dec edi
0057FD30  |.^ 75 E5         \jnz short XXXXXXXX.0057FD17
0057FD32  |>  BA 14FE5700   mov edx,XXXXXXXX.0057FE14                  ;  已注册 //我们到了这里
0057FD37  |.  8B83 34040000 mov eax,dword ptr ds:[ebx+434]
0057FD3D  |.  E8 DE3AEDFF   call XXXXXXXX.00453820
0057FD42  |.  8D55 F0       lea edx,dword ptr ss:[ebp-10]
0057FD45  |.  8BC6          mov eax,esi
0057FD47  |.  E8 ACFDF5FF   call XXXXXXXX.004DFAF8
0057FD4C  |.  8B55 F0       mov edx,dword ptr ss:[ebp-10]
0057FD4F  |.  8B83 40040000 mov eax,dword ptr ds:[ebx+440]
0057FD55  |.  E8 C63AEDFF   call XXXXXXXX.00453820
0057FD5A  |.  C645 FF 01    mov byte ptr ss:[ebp-1],1
0057FD5E  |.  8D55 EC       lea edx,dword ptr ss:[ebp-14]
0057FD61  |.  8BC6          mov eax,esi
0057FD63  |.  E8 00FDF5FF   call XXXXXXXX.004DFA68
0057FD68  |.  8B55 EC       mov edx,dword ptr ss:[ebp-14]
0057FD6B  |.  8B83 40060000 mov eax,dword ptr ds:[ebx+640]
0057FD71  |.  E8 AA3AEDFF   call XXXXXXXX.00453820
0057FD76  |.  8D55 E8       lea edx,dword ptr ss:[ebp-18]
0057FD79  |.  B8 24FE5700   mov eax,XXXXXXXX.0057FE24                  ;  ASCII "66"
0057FD7E  |.  E8 FD05F9FF   call XXXXXXXX.00510380
0057FD83  |.  8B55 E8       mov edx,dword ptr ss:[ebp-18]
0057FD86  |.  8B83 98050000 mov eax,dword ptr ds:[ebx+598]
0057FD8C  |.  E8 8F3AEDFF   call XXXXXXXX.00453820
0057FD91  |.  33D2          xor edx,edx
0057FD93  |.  8B83 9C050000 mov eax,dword ptr ds:[ebx+59C]
0057FD99  |.  E8 7239EDFF   call XXXXXXXX.00453710
0057FD9E  |.  33D2          xor edx,edx
0057FDA0  |.  8B83 A0050000 mov eax,dword ptr ds:[ebx+5A0]
0057FDA6  |.  E8 6539EDFF   call XXXXXXXX.00453710
0057FDAB  |.  EB 2C         jmp short XXXXXXXX.0057FDD9
0057FDAD  |>  C645 FF 00    mov byte ptr ss:[ebp-1],0                  ;  Case 3 of switch 0057FCEC
0057FDB1  |.  8D55 E4       lea edx,dword ptr ss:[ebp-1C]
0057FDB4  |.  B8 30FE5700   mov eax,XXXXXXXX.0057FE30                  ;  ASCII "67"
0057FDB9  |.  E8 C205F9FF   call XXXXXXXX.00510380
0057FDBE  |.  8B55 E4       mov edx,dword ptr ss:[ebp-1C]
0057FDC1  |.  8B83 98050000 mov eax,dword ptr ds:[ebx+598]
0057FDC7  |.  E8 543AEDFF   call XXXXXXXX.00453820
0057FDCC  |.  B2 01         mov dl,1
0057FDCE  |.  8B83 9C050000 mov eax,dword ptr ds:[ebx+59C]
0057FDD4  |.  E8 3739EDFF   call XXXXXXXX.00453710
0057FDD9  |>  8BC6          mov eax,esi                                ;  Default case of switch 0057FCEC
0057FDDB  |.  E8 4843E8FF   call XXXXXXXX.00404128
0057FDE0  |.  33C0          xor eax,eax
0057FDE2  |.  5A            pop edx
0057FDE3  |.  59            pop ecx
0057FDE4  |.  59            pop ecx
0057FDE5  |.  64:8910       mov dword ptr fs:[eax],edx
0057FDE8  |.  68 02FE5700   push XXXXXXXX.0057FE02
0057FDED  |>  8D45 E4       lea eax,dword ptr ss:[ebp-1C]
0057FDF0  |.  BA 05000000   mov edx,5
0057FDF5  |.  E8 DE51E8FF   call XXXXXXXX.00404FD8
0057FDFA  \.  C3            retn

如图我们到达的位置,向上不难找到一个关键可能包含算法的Call.(如所示)
于是我们在那个Call上F2下断重新来过。
F7进入Call,得到:
004DF2EC  /$  55            push ebp
004DF2ED  |.  8BEC          mov ebp,esp
004DF2EF  |.  B9 0B000000   mov ecx,0B
004DF2F4  |>  6A 00         /push 0
004DF2F6  |.  6A 00         |push 0
004DF2F8  |.  49            |dec ecx
004DF2F9  |.^ 75 F9         \jnz short XXXXXXXX.004DF2F4
004DF2FB  |.  53            push ebx
004DF2FC  |.  8BD8          mov ebx,eax
004DF2FE  |.  33C0          xor eax,eax
004DF300  |.  55            push ebp
004DF301  |.  68 ADF44D00   push XXXXXXXX.004DF4AD
004DF306  |.  64:FF30       push dword ptr fs:[eax]
004DF309  |.  64:8920       mov dword ptr fs:[eax],esp
004DF30C  |.  8D55 F8       lea edx,dword ptr ss:[ebp-8]
004DF30F  |.  8BC3          mov eax,ebx
004DF311  |.  E8 E2070000   call XXXXXXXX.004DFAF8
004DF316  |.  8B45 F8       mov eax,dword ptr ss:[ebp-8]
004DF319  |.  8D55 FC       lea edx,dword ptr ss:[ebp-4]
004DF31C  |.  E8 A3A7F2FF   call XXXXXXXX.00409AC4
004DF321  |.  8B45 FC       mov eax,dword ptr ss:[ebp-4]
004DF324  |.  BA C4F44D00   mov edx,XXXXXXXX.004DF4C4                  ;  ASCII "VIYVUQU" //假码,可能是陷阱
004DF329  |.  E8 9260F2FF   call XXXXXXXX.004053C0
004DF32E  |.  0F84 28010000 je XXXXXXXX.004DF45C
004DF334  |.  8D55 F0       lea edx,dword ptr ss:[ebp-10]
004DF337  |.  8BC3          mov eax,ebx
004DF339  |.  E8 BA070000   call XXXXXXXX.004DFAF8
004DF33E  |.  8B45 F0       mov eax,dword ptr ss:[ebp-10]
004DF341  |.  8D55 F4       lea edx,dword ptr ss:[ebp-C]
004DF344  |.  E8 7BA7F2FF   call XXXXXXXX.00409AC4
004DF349  |.  8B45 F4       mov eax,dword ptr ss:[ebp-C]
004DF34C  |.  50            push eax
004DF34D  |.  8D55 E8       lea edx,dword ptr ss:[ebp-18]
004DF350  |.  8BC3          mov eax,ebx
004DF352  |.  E8 05030000   call XXXXXXXX.004DF65C                     ;  似算法
004DF357  |.  8B45 E8       mov eax,dword ptr ss:[ebp-18]              ;   |
004DF35A  |.  8D55 EC       lea edx,dword ptr ss:[ebp-14]              ;   |
004DF35D  |.  E8 62A7F2FF   call XXXXXXXX.00409AC4                     ;  -|
004DF362  |.  8B55 EC       mov edx,dword ptr ss:[ebp-14]
004DF365  |.  58            pop eax
004DF366  |.  E8 5560F2FF   call XXXXXXXX.004053C0
004DF36B  |.  0F84 E7000000 je XXXXXXXX.004DF458
......

在004DF357出,注释显示:
堆栈 ss:[0012FD7C]=013871A8, (ASCII "IJOEIHUNOOQ")
eax=0012FD1C

出现注册码了. 所以我们就可以借此来制作内存注册机。(**注意:这个软件内有很多类似注册码的地方,而且注册码就是很简单的,这里是这个版本的算法,还有两个算法是前面的版本的,还有一个字符串搜索里能够成功搜到的一串当然是陷阱啦。**)
打开keymake(即使老也是经典),选择菜单上面“其他——内存注册机”,在中断地址列表里面点击添加,要填的东西如下:
中断地址:4DF357
中断次数:1
第一字节:8B
指令长度:3

“保存下列信息为注册码”的选项不用选,因为否则会有两遍注册码。
然后右边注册码的选项选择“内存方式”,寄存器前面打勾,选上EBP, 偏移写-18,然后再打上“地址指针”的勾勾,接着按“生成”就OK了!模式随便选。
这样,只要双击运行你生成的东西,会带起程序并在框中显示出注册码,复制下来输入到程序即可。
-----
程序的注册文件保存在"C:\Documents and Settings\All Users\Application Data\USBSecurity\svighost.dll"里面(至少我的电脑上是这样,你的电脑上应该也是这个,如果不是的话到<Part 2>的算法结束以后应该很快会看见程序保存注册信息位置),如果你觉得注册版会影响调试程序,可以直接把这个文件删掉以后就是未注册了。
-----
<Part 2>第二部分,分析算法
还记得在<Part 1>里面的注释吗?这句:
004DF352  |.  E8 05030000   call XXXXXXXX.004DF65C                     ;  似算法

标注处似算法,我们F7进看看. 得到:
004DF65C  /$  55            push ebp
004DF65D  |.  8BEC          mov ebp,esp
004DF65F  |.  6A 00         push 0
004DF661  |.  53            push ebx
004DF662  |.  56            push esi
004DF663  |.  8BF2          mov esi,edx
004DF665  |.  8BD8          mov ebx,eax
004DF667  |.  33C0          xor eax,eax
004DF669  |.  55            push ebp
004DF66A  |.  68 A1F64D00   push XXXXXXXX.004DF6A1
004DF66F  |.  64:FF30       push dword ptr fs:[eax]
004DF672  |.  64:8920       mov dword ptr fs:[eax],esp
004DF675  |.  8D55 FC       lea edx,dword ptr ss:[ebp-4]
004DF678  |.  8BC3          mov eax,ebx
004DF67A  |.  E8 31000000   call XXXXXXXX.004DF6B0
004DF67F  |.  8B55 FC       mov edx,dword ptr ss:[ebp-4]
004DF682  |.  8BCE          mov ecx,esi
004DF684  |.  8BC3          mov eax,ebx
004DF686  |.  E8 D5F8FFFF   call XXXXXXXX.004DEF60                     ;  可能是算法
004DF68B  |.  33C0          xor eax,eax
004DF68D  |.  5A            pop edx
004DF68E  |.  59            pop ecx
004DF68F  |.  59            pop ecx
004DF690  |.  64:8910       mov dword ptr fs:[eax],edx
004DF693  |.  68 A8F64D00   push XXXXXXXX.004DF6A8
004DF698  |>  8D45 FC       lea eax,dword ptr ss:[ebp-4]
004DF69B  |.  E8 1459F2FF   call XXXXXXXX.00404FB4
004DF6A0  \.  C3            retn

如图所示处可能是算法Call. (呵呵这要一层一层进入啊)
再进去看:
004DEF60  /$  55            push ebp
004DEF61  |.  8BEC          mov ebp,esp
004DEF63  |.  83C4 F0       add esp,-10
004DEF66  |.  53            push ebx
004DEF67  |.  56            push esi
004DEF68  |.  57            push edi
004DEF69  |.  33DB          xor ebx,ebx
004DEF6B  |.  895D F0       mov dword ptr ss:[ebp-10],ebx
004DEF6E  |.  895D F4       mov dword ptr ss:[ebp-C],ebx
004DEF71  |.  894D F8       mov dword ptr ss:[ebp-8],ecx
004DEF74  |.  8955 FC       mov dword ptr ss:[ebp-4],edx
004DEF77  |.  8B45 FC       mov eax,dword ptr ss:[ebp-4]
004DEF7A  |.  E8 E564F2FF   call XXXXXXXX.00405464
004DEF7F  |.  33C0          xor eax,eax
004DEF81  |.  55            push ebp
004DEF82  |.  68 45F04D00   push XXXXXXXX.004DF045
004DEF87  |.  64:FF30       push dword ptr fs:[eax]
004DEF8A  |.  64:8920       mov dword ptr fs:[eax],esp
004DEF8D  |.  8D45 F4       lea eax,dword ptr ss:[ebp-C]
004DEF90  |.  E8 1F60F2FF   call XXXXXXXX.00404FB4
004DEF95  |.  8B45 FC       mov eax,dword ptr ss:[ebp-4]
004DEF98  |.  E8 D762F2FF   call XXXXXXXX.00405274
004DEF9D  |.  8BF8          mov edi,eax
004DEF9F  |.  85FF          test edi,edi
004DEFA1  |.  7E 5F         jle short XXXXXXXX.004DF002
004DEFA3  |.  BB 01000000   mov ebx,1                                  ;  下面似算法开始
004DEFA8  |>  8D43 14       /lea eax,dword ptr ds:[ebx+14]
004DEFAB  |.  50            |push eax
004DEFAC  |.  8BC3          |mov eax,ebx
004DEFAE  |.  5A            |pop edx
004DEFAF  |.  8BCA          |mov ecx,edx
004DEFB1  |.  99            |cdq
004DEFB2  |.  F7F9          |idiv ecx
004DEFB4  |.  8BF2          |mov esi,edx
004DEFB6  |.  8D43 1E       |lea eax,dword ptr ds:[ebx+1E]
004DEFB9  |.  50            |push eax
004DEFBA  |.  8BC3          |mov eax,ebx
004DEFBC  |.  5A            |pop edx
004DEFBD  |.  8BCA          |mov ecx,edx
004DEFBF  |.  99            |cdq
004DEFC0  |.  F7F9          |idiv ecx
004DEFC2  |.  03F2          |add esi,edx
004DEFC4  |.  46            |inc esi
004DEFC5  |.  8B45 FC       |mov eax,dword ptr ss:[ebp-4]              ;  取机器码
004DEFC8  |.  0FB64418 FF   |movzx eax,byte ptr ds:[eax+ebx-1]         ;  逐个取机器码转16进制
004DEFCD  |.  03C6          |add eax,esi                               ;  eax+esi=eax
004DEFCF  |.  40            |inc eax                                   ;  eax+=1
004DEFD0  |.  83C0 CF       |add eax,-31                               ;  eax-=31(49)
004DEFD3  |.  83E8 09       |sub eax,9                                 ;  eax-=9
004DEFD6  |.  72 08         |jb short XXXXXXXX.004DEFE0                ;  小于0则跳
004DEFD8  |.  83C0 F9       |add eax,-7                                ;  eax-=7
004DEFDB  |.  83E8 1A       |sub eax,1A                                ;  eax-=1A(26)
004DEFDE  |.  73 1E         |jnb short XXXXXXXX.004DEFFE               ;  eax小于-1A(-26)则跳
004DEFE0  |>  8D45 F0       |lea eax,dword ptr ss:[ebp-10]
004DEFE3  |.  8B55 FC       |mov edx,dword ptr ss:[ebp-4]              ;  取机器码
004DEFE6  |.  0FB6541A FF   |movzx edx,byte ptr ds:[edx+ebx-1]         ;  一位转成16进制
004DEFEB  |.  03D6          |add edx,esi                               ;  edx+esi=edx
004DEFED  |.  42            |inc edx                                   ;  edx+=1
004DEFEE  |.  E8 A961F2FF   |call XXXXXXXX.0040519C
004DEFF3  |.  8B55 F0       |mov edx,dword ptr ss:[ebp-10]
004DEFF6  |.  8D45 F4       |lea eax,dword ptr ss:[ebp-C]
004DEFF9  |.  E8 7E62F2FF   |call XXXXXXXX.0040527C
004DEFFE  |>  43            |inc ebx                                   ;  ebx+=1(ebx指注册码从左到右的第几位)
004DEFFF  |.  4F            |dec edi                                   ;  edi-=1(edi指机器码总位数13位)
004DF000  |.^ 75 A6         \jnz short XXXXXXXX.004DEFA8               ;  edi=0即机器码取完以后就不跳转了
004DF002  |>  837D F4 00    cmp dword ptr ss:[ebp-C],0
004DF006  |.  74 0D         je short XXXXXXXX.004DF015
004DF008  |.  8B45 F8       mov eax,dword ptr ss:[ebp-8]
004DF00B  |.  8B55 F4       mov edx,dword ptr ss:[ebp-C]
004DF00E  |.  E8 F55FF2FF   call XXXXXXXX.00405008
004DF013  |.  EB 0D         jmp short XXXXXXXX.004DF022
004DF015  |>  8B45 F8       mov eax,dword ptr ss:[ebp-8]
004DF018  |.  BA 5CF04D00   mov edx,XXXXXXXX.004DF05C                  ;  ASCII "None"
004DF01D  |.  E8 E65FF2FF   call XXXXXXXX.00405008
004DF022  |>  33C0          xor eax,eax
004DF024  |.  5A            pop edx
004DF025  |.  59            pop ecx
004DF026  |.  59            pop ecx
004DF027  |.  64:8910       mov dword ptr fs:[eax],edx
004DF02A  |.  68 4CF04D00   push XXXXXXXX.004DF04C
004DF02F  |>  8D45 F0       lea eax,dword ptr ss:[ebp-10]
004DF032  |.  BA 02000000   mov edx,2
004DF037  |.  E8 9C5FF2FF   call XXXXXXXX.00404FD8
004DF03C  |.  8D45 FC       lea eax,dword ptr ss:[ebp-4]
004DF03F  |.  E8 705FF2FF   call XXXXXXXX.00404FB4
004DF044  \.  C3            retn

哈哈,这确实是注册码算法call了。004DEFA8到004DF000就是算法了。
分析就在代码的注释中了,应该是非常简单的算法。另外再附上:
在用机器码从左到右算注册码的过程中,第一位机器码到第13位机器码这段过程中,esi的值分别为3,5,7,9,B(11),D(13),F(15),11(17),13(19),15(21),17(23),19(25),1B(27). [括号内为十进制数,括号外为十六进制数. 调试得出的呵呵,应该就是软件作者自己指定的.]
既然算法分析完了,写注册机应该也不难了。
写注册机的请看3L,因为我写的代码太复杂太长了,所以另开一楼写吧。

====================后记====================
这个软件算法实在是太简单了对吧?难得一见这么弱的软件,但是给我们新手练练还是挺不错的选择。
争取下次我来个稍微复杂一点的吧. ;-)
不过话说这个软件连个自校验也没有,那程序自身被病毒感染了怎么办呢?

程序下载地址:
http://update.upanshadu.com/down/upanshaduzhuanjia_danjiban.exe

[培训]《安卓高级研修班(网课)》月薪三万计划

收藏
点赞1
打赏
分享
最新回复 (6)
雪    币: 6
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Asfy 2014-8-2 21:29
2
0
XXX毒专家````呵呵
雪    币: 77
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dsong 2 2014-8-3 16:40
3
0
(接1L):
<Part 3>第三部分,编写算法注册机
我看别人编写算法注册机都是用C, Delphi, ...... 但是我都不会。我唯独只会一点点AS2,Flash里的,所以我就拿它来写写看。(其实我学AS2也是半桶水.)

**发现代码有问题,我在这里改了一下,不知道是否和我做的最终修复版一样,因为Fla文件我没留下来,现在我暂时凭记忆把东西补全。**

写代码前准备工作:
分别新建以下命名(声明)的动态文本:
h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,h14,h15,h16,h17,h18,h19,h20,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,r14,r15,r16,r17,r18,r19,r20,tmp,tmptmp,tstv.
分别新建以下命名(声明)的影片剪辑:
ObO,Rcnt,LRc.
分别在以下影片剪辑里面创建以下命名(声明)的动态文本:
ObO里面:
ticnt.
Rcnt里面:
rdmv.
LRc里面:
LRcnt.
然后就是代码了:
按“生成”时的代码:
//**************************************************
//**************************************************
//***** Code by dsong @ 看雪论坛[bbs.pediy.com] *****
//**************************************************
//**************************************************

on (release) {	
	//检验机器码是否<1位:
	if(length(_root.HdwCod.text) < 1){
		_root.RegCod.text = "无效的机器码";
	}
	else{
		/* 刚学AS2,只会用这种办法把字符串一个一个分开了.
		 * 有些人可能会问我为什么不用_global,是因为我不太会用,
		 * 而且我觉得这样用.text和.value来表示会清晰一点.
		 * 你可以认为我**.
		 */
		_root.h1.text = _root.HdwCod.text.substr(0,1);
		_root.h2.text = _root.HdwCod.text.substr(1,1);
		_root.h3.text = _root.HdwCod.text.substr(2,1);
		_root.h4.text = _root.HdwCod.text.substr(3,1);
		_root.h5.text = _root.HdwCod.text.substr(4,1);
		_root.h6.text = _root.HdwCod.text.substr(5,1);
		_root.h7.text = _root.HdwCod.text.substr(6,1);
		_root.h8.text = _root.HdwCod.text.substr(7,1);
		_root.h9.text = _root.HdwCod.text.substr(8,1);
		_root.h10.text = _root.HdwCod.text.substr(9,1);
		_root.h11.text = _root.HdwCod.text.substr(10,1);
		_root.h12.text = _root.HdwCod.text.substr(11,1);
		_root.h13.text = _root.HdwCod.text.substr(12,1);
		_root.h14.text = _root.HdwCod.text.substr(13, 1);
		_root.h15.text = _root.HdwCod.text.substr(14, 1);
		_root.h16.text = _root.HdwCod.text.substr(15, 1);
		_root.h17.text = _root.HdwCod.text.substr(16, 1);
		_root.h18.text = _root.HdwCod.text.substr(17, 1);
		_root.h19.text = _root.HdwCod.text.substr(18, 1);
		_root.h20.text = _root.HdwCod.text.substr(19, 1);
		
		//校验数字初始
		_root.tstv.value = 0;
		
		//检验硬件代码有效性(这里代码我不会写了,只能用了最愚笨的办法,如果有高人指点我将感到非常荣幸.)
		if (_root.h1.text == "" || _root.h1.text == "." || _root.h1.text == "0" || _root.h1.text == "1" || _root.h1.text == "2" || _root.h1.text == "3" || _root.h1.text == "4" || _root.h1.text == "5" || _root.h1.text == "6" || _root.h1.text == "7" || _root.h1.text == "8" || _root.h1.text == "9" || _root.h1.text == "A" || _root.h1.text == "B" || _root.h1.text == "C" || _root.h1.text == "D" || _root.h1.text == "E" || _root.h1.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h2.text == "" || _root.h2.text == "." || _root.h2.text == "0" || _root.h2.text == "1" || _root.h2.text == "2" || _root.h2.text == "3" || _root.h2.text == "4" || _root.h2.text == "5" || _root.h2.text == "6" || _root.h2.text == "7" || _root.h2.text == "8" || _root.h2.text == "9" || _root.h2.text == "A" || _root.h2.text == "B" || _root.h2.text == "C" || _root.h2.text == "D" || _root.h2.text == "E" || _root.h2.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h3.text == "" || _root.h3.text == "." || _root.h3.text == "0" || _root.h3.text == "1" || _root.h3.text == "2" || _root.h3.text == "3" || _root.h3.text == "4" || _root.h3.text == "5" || _root.h3.text == "6" || _root.h3.text == "7" || _root.h3.text == "8" || _root.h3.text == "9" || _root.h3.text == "A" || _root.h3.text == "B" || _root.h3.text == "C" || _root.h3.text == "D" || _root.h3.text == "E" || _root.h3.text == "F"){
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h4.text == "" || _root.h4.text == "." || _root.h4.text == "0" || _root.h4.text == "1" || _root.h4.text == "2" || _root.h4.text == "3" || _root.h4.text == "4" || _root.h4.text == "5" || _root.h4.text == "6" || _root.h4.text == "7" || _root.h4.text == "8" || _root.h4.text == "9" || _root.h4.text == "A" || _root.h4.text == "B" || _root.h4.text == "C" || _root.h4.text == "D" || _root.h4.text == "E" || _root.h4.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h5.text == "" || _root.h5.text == "." || _root.h5.text == "0" || _root.h5.text == "1" || _root.h5.text == "2" || _root.h5.text == "3" || _root.h5.text == "4" || _root.h5.text == "5" || _root.h5.text == "6" || _root.h5.text == "7" || _root.h5.text == "8" || _root.h5.text == "9" || _root.h5.text == "A" || _root.h5.text == "B" || _root.h5.text == "C" || _root.h5.text == "D" || _root.h5.text == "E" || _root.h5.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h6.text == "" || _root.h6.text == "." || _root.h6.text == "0" || _root.h6.text == "1" || _root.h6.text == "2" || _root.h6.text == "3" || _root.h6.text == "4" || _root.h6.text == "5" || _root.h6.text == "6" || _root.h6.text == "7" || _root.h6.text == "8" || _root.h6.text == "9" || _root.h6.text == "A" || _root.h6.text == "B" || _root.h6.text == "C" || _root.h6.text == "D" || _root.h6.text == "E" || _root.h6.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h7.text == "" || _root.h7.text == "." || _root.h7.text == "0" || _root.h7.text == "1" || _root.h7.text == "2" || _root.h7.text == "3" || _root.h7.text == "4" || _root.h7.text == "5" || _root.h7.text == "6" || _root.h7.text == "7" || _root.h7.text == "8" || _root.h7.text == "9" || _root.h7.text == "A" || _root.h7.text == "B" || _root.h7.text == "C" || _root.h7.text == "D" || _root.h7.text == "E" || _root.h7.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h8.text == "" || _root.h8.text == "." || _root.h8.text == "0" || _root.h8.text == "1" || _root.h8.text == "2" || _root.h8.text == "3" || _root.h8.text == "4" || _root.h8.text == "5" || _root.h8.text == "6" || _root.h8.text == "7" || _root.h8.text == "8" || _root.h8.text == "9" || _root.h8.text == "A" || _root.h8.text == "B" || _root.h8.text == "C" || _root.h8.text == "D" || _root.h8.text == "E" || _root.h8.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h9.text == "" || _root.h9.text == "." || _root.h9.text == "0" || _root.h9.text == "1" || _root.h9.text == "2" || _root.h9.text == "3" || _root.h9.text == "4" || _root.h9.text == "5" || _root.h9.text == "6" || _root.h9.text == "7" || _root.h9.text == "8" || _root.h9.text == "9" || _root.h9.text == "A" || _root.h9.text == "B" || _root.h9.text == "C" || _root.h9.text == "D" || _root.h9.text == "E" || _root.h9.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h10.text == "" || _root.h10.text == "." || _root.h10.text == "0" || _root.h10.text == "1" || _root.h10.text == "2" || _root.h10.text == "3" || _root.h10.text == "4" || _root.h10.text == "5" || _root.h10.text == "6" || _root.h10.text == "7" || _root.h10.text == "8" || _root.h10.text == "9" || _root.h10.text == "A" || _root.h10.text == "B" || _root.h10.text == "C" || _root.h10.text == "D" || _root.h10.text == "E" || _root.h10.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h11.text == "" || _root.h11.text == "." || _root.h11.text == "0" || _root.h11.text == "1" || _root.h11.text == "2" || _root.h11.text == "3" || _root.h11.text == "4" || _root.h11.text == "5" || _root.h11.text == "6" || _root.h11.text == "7" || _root.h11.text == "8" || _root.h11.text == "9" || _root.h11.text == "A" || _root.h11.text == "B" || _root.h11.text == "C" || _root.h11.text == "D" || _root.h11.text == "E" || _root.h11.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h12.text == "" || _root.h12.text == "." || _root.h12.text == "0" || _root.h12.text == "1" || _root.h12.text == "2" || _root.h12.text == "3" || _root.h12.text == "4" || _root.h12.text == "5" || _root.h12.text == "6" || _root.h12.text == "7" || _root.h12.text == "8" || _root.h12.text == "9" || _root.h12.text == "A" || _root.h12.text == "B" || _root.h12.text == "C" || _root.h12.text == "D" || _root.h12.text == "E" || _root.h12.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h13.text == "" || _root.h13.text == "." || _root.h13.text == "0" || _root.h13.text == "1" || _root.h13.text == "2" || _root.h13.text == "3" || _root.h13.text == "4" || _root.h13.text == "5" || _root.h13.text == "6" || _root.h13.text == "7" || _root.h13.text == "8" || _root.h13.text == "9" || _root.h13.text == "A" || _root.h13.text == "B" || _root.h13.text == "C" || _root.h13.text == "D" || _root.h13.text == "E" || _root.h13.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h14.text == "" || _root.h14.text == "." || _root.h14.text == "0" || _root.h14.text == "1" || _root.h14.text == "2" || _root.h14.text == "3" || _root.h14.text == "4" || _root.h14.text == "5" || _root.h14.text == "6" || _root.h14.text == "7" || _root.h14.text == "8" || _root.h14.text == "9" || _root.h14.text == "A" || _root.h14.text == "B" || _root.h14.text == "C" || _root.h14.text == "D" || _root.h14.text == "E" || _root.h14.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h15.text == "" || _root.h15.text == "." || _root.h15.text == "0" || _root.h15.text == "1" || _root.h15.text == "2" || _root.h15.text == "3" || _root.h15.text == "4" || _root.h15.text == "5" || _root.h15.text == "6" || _root.h15.text == "7" || _root.h15.text == "8" || _root.h15.text == "9" || _root.h15.text == "A" || _root.h15.text == "B" || _root.h15.text == "C" || _root.h15.text == "D" || _root.h15.text == "E" || _root.h15.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h16.text == "" || _root.h16.text == "." || _root.h16.text == "0" || _root.h16.text == "1" || _root.h16.text == "2" || _root.h16.text == "3" || _root.h16.text == "4" || _root.h16.text == "5" || _root.h16.text == "6" || _root.h16.text == "7" || _root.h16.text == "8" || _root.h16.text == "9" || _root.h16.text == "A" || _root.h16.text == "B" || _root.h16.text == "C" || _root.h16.text == "D" || _root.h16.text == "E" || _root.h16.text == "F") 
		{
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h17.text == "" || _root.h17.text == "." || _root.h17.text == "0" || _root.h17.text == "1" || _root.h17.text == "2" || _root.h17.text == "3" || _root.h17.text == "4" || _root.h17.text == "5" || _root.h17.text == "6" || _root.h17.text == "7" || _root.h17.text == "8" || _root.h17.text == "9" || _root.h17.text == "A" || _root.h17.text == "B" || _root.h17.text == "C" || _root.h17.text == "D" || _root.h17.text == "E" || _root.h17.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h18.text == "" || _root.h18.text == "." || _root.h18.text == "0" || _root.h18.text == "1" || _root.h18.text == "2" || _root.h18.text == "3" || _root.h18.text == "4" || _root.h18.text == "5" || _root.h18.text == "6" || _root.h18.text == "7" || _root.h18.text == "8" || _root.h18.text == "9" || _root.h18.text == "A" || _root.h18.text == "B" || _root.h18.text == "C" || _root.h18.text == "D" || _root.h18.text == "E" || _root.h18.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h19.text == "" || _root.h19.text == "." || _root.h19.text == "0" || _root.h19.text == "1" || _root.h19.text == "2" || _root.h19.text == "3" || _root.h19.text == "4" || _root.h19.text == "5" || _root.h19.text == "6" || _root.h19.text == "7" || _root.h19.text == "8" || _root.h19.text == "9" || _root.h19.text == "A" || _root.h19.text == "B" || _root.h19.text == "C" || _root.h19.text == "D" || _root.h19.text == "E" || _root.h19.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if (_root.h20.text == "" || _root.h20.text == "." || _root.h20.text == "0" || _root.h20.text == "1" || _root.h20.text == "2" || _root.h20.text == "3" || _root.h20.text == "4" || _root.h20.text == "5" || _root.h20.text == "6" || _root.h20.text == "7" || _root.h20.text == "8" || _root.h20.text == "9" || _root.h20.text == "A" || _root.h20.text == "B" || _root.h20.text == "C" || _root.h20.text == "D" || _root.h20.text == "E" || _root.h20.text == "F") {
			_root.tstv.value = _root.tstv.value + 1;
		}
		if(_root.tstv.value < 20){
			_root.RegCod.text = "机器码无效,请检查,字母是区分大小写的."
		}
		else{
			//召唤算法程序
			_root.ObO.ticnt.value = 0;
			_root.Rcnt.rdmv.value = 1;
			_root.LRc.LRcnt.value = 0;
			_root.ObO.gotoAndStop(2);
		}
	}
}
//看完代码勿喷,你可以认为我不会编写AS. :-)

影片剪辑里(第二帧)的代码:(第一帧里面都是"stop();",我就不重复写了吧.)
ObO里:
stop();

//**************************************************
//**************************************************
//***** Code by dsong @ 看雪论坛[bbs.pediy.com] *****
//**************************************************
//**************************************************

//开始一个一个分配
if(this.ticnt.value == length(_root.HdwCod.text)){
	_root.RegCod.text = _root.r1.text + _root.r2.text + _root.r3.text + _root.r4.text + _root.r5.text + _root.r6.text + _root.r7.text + _root.r8.text + _root.r9.text + _root.r10.text + _root.r11.text + _root.r12.text + _root.r13.text + _root.r14.text + _root.r15.text + _root.r16.text + _root.r17.text + _root.r18.text + _root.r19.text + _root.r20.text ;
	
	//清除痕迹(否则可能在连续算位数不同时候出错)
	_root.h1.text = "";
	_root.h2.text = "";
	_root.h3.text = "";
	_root.h4.text = "";
	_root.h5.text = "";
	_root.h6.text = "";
	_root.h7.text = "";
	_root.h8.text = "";
	_root.h9.text = "";
	_root.h10.text = "";
	_root.h11.text = "";
	_root.h12.text = "";
	_root.h13.text = "";
	_root.h14.text = "";
	_root.h15.text = "";
	_root.h16.text = "";
	_root.h17.text = "";
	_root.h18.text = "";
	_root.h19.text = "";
	_root.h20.text = "";
	_root.r1.text = "";
	_root.r2.text = "";
	_root.r3.text = "";
	_root.r4.text = "";
	_root.r5.text = "";
	_root.r6.text = "";
	_root.r7.text = "";
	_root.r8.text = "";
	_root.r9.text = "";
	_root.r10.text = "";
	_root.r11.text = "";
	_root.r12.text = "";
	_root.r13.text = "";
	_root.r14.text = "";
	_root.r15.text = "";
	_root.r16.text = "";
	_root.r17.text = "";
	_root.r18.text = "";
	_root.r19.text = "";
	_root.r20.text = "";
	_root.tmp.value = 0;
	_root.tmptmp.text = "";
}
else{
if(this.ticnt.value == 0){
	_root.tmptmp.text = _root.h1.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 1){
	_root.tmptmp.text = _root.h2.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 2){
	_root.tmptmp.text = _root.h3.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 3){
	_root.tmptmp.text = _root.h4.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 4){
	_root.tmptmp.text = _root.h5.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 5){
	_root.tmptmp.text = _root.h6.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 6){
	_root.tmptmp.text = _root.h7.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 7){
	_root.tmptmp.text = _root.h8.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 8){
	_root.tmptmp.text = _root.h9.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 9){
	_root.tmptmp.text = _root.h10.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 10){
	_root.tmptmp.text = _root.h11.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 11){
	_root.tmptmp.text = _root.h12.text;
	_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 12){
		_root.tmptmp.text = _root.h13.text;
		_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 13){
		_root.tmptmp.text = _root.h14.text;
		_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 14){
		_root.tmptmp.text = _root.h15.text;
		_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 15){
		_root.tmptmp.text = _root.h16.text;
		_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 16){
		_root.tmptmp.text = _root.h17.text;
		_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 17){
		_root.tmptmp.text = _root.h18.text;
		_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 18){
		_root.tmptmp.text = _root.h19.text;
		_root.Rcnt.gotoAndStop(2);
}
if(this.ticnt.value == 19){
		_root.tmptmp.text = _root.h20.text;
		_root.Rcnt.gotoAndStop(2);
}
}

//**代码结束**
this.gotoAndStop(1);

Rcnt里:
stop();

//**************************************************
//**************************************************
//***** Code by dsong @ 看雪论坛[bbs.pediy.com] *****
//**************************************************
//**************************************************

/* 由于我不知道AS2里面怎么把字母用Hex表示,所以自己构建了一个转换表.
 * 但是AS2如果让它都转换为16进制算代码就太复杂了,所以事先转成10进制.
 * 还有貌似机器码是0~F,所以F后面的就不构造转换表了吧.
 */
if (_root.tmptmp.text == "1") {
	_root.tmp.value = 49;
}
if (_root.tmptmp.text == "2") {
	_root.tmp.value = 50;
}
if (_root.tmptmp.text == "3") {
	_root.tmp.value = 51;
}
if (_root.tmptmp.text == "4") {
	_root.tmp.value = 52;
}
if (_root.tmptmp.text == "5") {
	_root.tmp.value = 53;
}
if (_root.tmptmp.text == "6") {
	_root.tmp.value = 54;
}
if (_root.tmptmp.text == "7") {
	_root.tmp.value = 55;
}
if (_root.tmptmp.text == "8") {
	_root.tmp.value = 56;
}
if (_root.tmptmp.text == "9") {
	_root.tmp.value = 57;
}
if (_root.tmptmp.text == "0") {
	_root.tmp.value = 48;
}
if (_root.tmptmp.text == "A") {
	_root.tmp.value = 65;
}
if (_root.tmptmp.text == "B") {
	_root.tmp.value = 66;
}
if (_root.tmptmp.text == "C") {
	_root.tmp.value = 67;
}
if (_root.tmptmp.text == "D") {
	_root.tmp.value = 68;
}
if (_root.tmptmp.text == "E") {
	_root.tmp.value = 69;
}
if (_root.tmptmp.text == "F") {
	_root.tmp.value = 70;
}

//作者给予的值   
this.rdmv.value += 2;

//算法
if (_root.tmp.value+this.rdmv.value<58) {
	_root.tmp.value += this.rdmv.value+1;
	
	//再次转换	
	if (_root.tmp.value>57 || _root.tmp.value<65) {
		_root.tmptmp.text = "";
	}
	if (_root.tmp.value<51) {
		_root.tmptmp.text = "";
	}
	if (_root.tmp.value == 51) {
		_root.tmptmp.text = "3";
	}
	if (_root.tmp.value == 52) {
		_root.tmptmp.text = "4";
	}
	if (_root.tmp.value == 53) {
		_root.tmptmp.text = "5";
	}
	if (_root.tmp.value == 54) {
		_root.tmptmp.text = "6";
	}
	if (_root.tmp.value == 55) {
		_root.tmptmp.text = "7";
	}
	if (_root.tmp.value == 56) {
		_root.tmptmp.text = "8";
	}
	if (_root.tmp.value == 57) {
		_root.tmptmp.text = "9";
	}
	if (_root.tmp.value == 65) {
		_root.tmptmp.text = "A";
	}
	if (_root.tmp.value == 66) {
		_root.tmptmp.text = "B";
	}
	if (_root.tmp.value == 67) {
		_root.tmptmp.text = "C";
	}
	if (_root.tmp.value == 68) {
		_root.tmptmp.text = "D";
	}
	if (_root.tmp.value == 69) {
		_root.tmptmp.text = "E";
	}
	if (_root.tmp.value == 70) {
		_root.tmptmp.text = "F";
	}
	if (_root.tmp.value == 71) {
		_root.tmptmp.text = "G";
	}
	if (_root.tmp.value == 72) {
		_root.tmptmp.text = "H";
	}
	if (_root.tmp.value == 73) {
		_root.tmptmp.text = "I";
	}
	if (_root.tmp.value == 74) {
		_root.tmptmp.text = "J";
	}
	if (_root.tmp.value == 75) {
		_root.tmptmp.text = "K";
	}
	if (_root.tmp.value == 76) {
		_root.tmptmp.text = "L";
	}
	if (_root.tmp.value == 77) {
		_root.tmptmp.text = "M";
	}
	if (_root.tmp.value == 78) {
		_root.tmptmp.text = "N";
	}
	if (_root.tmp.value == 79) {
		_root.tmptmp.text = "O";
	}
	if (_root.tmp.value == 80) {
		_root.tmptmp.text = "P";
	}
	if (_root.tmp.value == 81) {
		_root.tmptmp.text = "Q";
	}
	if (_root.tmp.value == 82) {
		_root.tmptmp.text = "R";
	}
	if (_root.tmp.value == 83) {
		_root.tmptmp.text = "S";
	}
	if (_root.tmp.value == 84) {
		_root.tmptmp.text = "T";
	}
	if (_root.tmp.value == 85) {
		_root.tmptmp.text = "U";
	}
	if (_root.tmp.value == 86) {
		_root.tmptmp.text = "V";
	}
	if (_root.tmp.value == 87) {
		_root.tmptmp.text = "W";
	}
	if (_root.tmp.value == 88) {
		_root.tmptmp.text = "X";
	}
	if (_root.tmp.value == 89) {
		_root.tmptmp.text = "Y";
	}
	if (_root.tmp.value == 90) {
		_root.tmptmp.text = "Z";
	}
	if (_root.tmp.value == 97) {
		_root.tmptmp.text = "a";
	}
	if (_root.tmp.value == 98) {
		_root.tmptmp.text = "b";
	}
	if (_root.tmp.value == 99) {
		_root.tmptmp.text = "c";
	}
	if (_root.tmp.value == 100) {
		_root.tmptmp.text = "d";
	}
	if (_root.tmp.value == 101) {
		_root.tmptmp.text = "e";
	}
	if (_root.tmp.value == 102) {
		_root.tmptmp.text = "f";
	}
	if (_root.tmp.value == 103) {
		_root.tmptmp.text = "g";
	}
	if (_root.tmp.value>103) {
		_root.tmptmp.text = "";
	}
	
	//录入程序   
	_root.LRc.LRcnt.value += 1;
	_root.LRc.gotoAndStop(2);
	
	//返回继续
	_root.ObO.ticnt.value += 1;
	_root.ObO.gotoAndStop(2);
}
else {
	if (_root.tmp.value+this.rdmv.value>=90 || _root.tmp.value+this.rdmv.value-90<-26) {
		_root.ObO.ticnt.value += 1;
		_root.ObO.gotoAndStop(2);
	}
	else {
		_root.tmp.value += this.rdmv.value+1;
		
		//再次转换
		if (_root.tmp.value>57 || _root.tmp.value<65) {
			_root.tmptmp.text = "";
		}
		if (_root.tmp.value<51) {
			_root.tmptmp.text = "";
		}
		if (_root.tmp.value == 51) {
			_root.tmptmp.text = "3";
		}
		if (_root.tmp.value == 52) {
			_root.tmptmp.text = "4";
		}
		if (_root.tmp.value == 53) {
			_root.tmptmp.text = "5";
		}
		if (_root.tmp.value == 54) {
			_root.tmptmp.text = "6";
		}
		if (_root.tmp.value == 55) {
			_root.tmptmp.text = "7";
		}
		if (_root.tmp.value == 56) {
			_root.tmptmp.text = "8";
		}
		if (_root.tmp.value == 57) {
			_root.tmptmp.text = "9";
		}
		if (_root.tmp.value == 65) {
			_root.tmptmp.text = "A";
		}
		if (_root.tmp.value == 66) {
			_root.tmptmp.text = "B";
		}
		if (_root.tmp.value == 67) {
			_root.tmptmp.text = "C";
		}
		if (_root.tmp.value == 68) {
			_root.tmptmp.text = "D";
		}
		if (_root.tmp.value == 69) {
			_root.tmptmp.text = "E";
		}
		if (_root.tmp.value == 70) {
			_root.tmptmp.text = "F";
		}
		if (_root.tmp.value == 71) {
			_root.tmptmp.text = "G";
		}
		if (_root.tmp.value == 72) {
			_root.tmptmp.text = "H";
		}
		if (_root.tmp.value == 73) {
			_root.tmptmp.text = "I";
		}
		if (_root.tmp.value == 74) {
			_root.tmptmp.text = "J";
		}
		if (_root.tmp.value == 75) {
			_root.tmptmp.text = "K";
		}
		if (_root.tmp.value == 76) {
			_root.tmptmp.text = "L";
		}
		if (_root.tmp.value == 77) {
			_root.tmptmp.text = "M";
		}
		if (_root.tmp.value == 78) {
			_root.tmptmp.text = "N";
		}
		if (_root.tmp.value == 79) {
			_root.tmptmp.text = "O";
		}
		if (_root.tmp.value == 80) {
			_root.tmptmp.text = "P";
		}
		if (_root.tmp.value == 81) {
			_root.tmptmp.text = "Q";
		}
		if (_root.tmp.value == 82) {
			_root.tmptmp.text = "R";
		}
		if (_root.tmp.value == 83) {
			_root.tmptmp.text = "S";
		}
		if (_root.tmp.value == 84) {
			_root.tmptmp.text = "T";
		}
		if (_root.tmp.value == 85) {
			_root.tmptmp.text = "U";
		}
		if (_root.tmp.value == 86) {
			_root.tmptmp.text = "V";
		}
		if (_root.tmp.value == 87) {
			_root.tmptmp.text = "W";
		}
		if (_root.tmp.value == 88) {
			_root.tmptmp.text = "X";
		}
		if (_root.tmp.value == 89) {
			_root.tmptmp.text = "Y";
		}
		if (_root.tmp.value == 90) {
			_root.tmptmp.text = "Z";
		}
		if (_root.tmp.value == 97) {
			_root.tmptmp.text = "a";
		}
		if (_root.tmp.value == 98) {
			_root.tmptmp.text = "b";
		}
		if (_root.tmp.value == 99) {
			_root.tmptmp.text = "c";
		}
		if (_root.tmp.value == 100) {
			_root.tmptmp.text = "d";
		}
		if (_root.tmp.value == 101) {
			_root.tmptmp.text = "e";
		}
		if (_root.tmp.value == 102) {
			_root.tmptmp.text = "f";
		}
		if (_root.tmp.value == 103) {
			_root.tmptmp.text = "g";
		}
		if (_root.tmp.value>103) {
			_root.tmptmp.text = "";
		}
		
		//录入程序   
		_root.LRc.LRcnt.value += 1;
		_root.LRc.gotoAndStop(2);
		
		//返回继续
		_root.ObO.ticnt.value += 1;
		_root.ObO.gotoAndStop(2);
	}
}

//**代码结束**
this.gotoAndStop(1);

LRc里:
stop();

//**************************************************
//**************************************************
//***** Code by dsong @ 看雪论坛[bbs.pediy.com] *****
//**************************************************
//**************************************************

//录入
if(this.LRcnt.value == 1){
	_root.r1.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 2){
	_root.r2.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 3){
	_root.r3.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 4){
	_root.r4.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 5){
	_root.r5.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 6){
	_root.r6.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 7){
	_root.r7.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 8){
	_root.r8.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 9){
	_root.r9.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 10){
	_root.r10.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 11){
	_root.r11.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 12){
	_root.r12.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 13){
	_root.r13.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 14){
	_root.r14.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 15){
	_root.r15.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 16){
	_root.r16.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 17){
	_root.r17.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 18){
	_root.r18.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 19){
	_root.r19.text = _root.tmptmp.text;
}
if(this.LRcnt.value == 20){
	_root.r20.text = _root.tmptmp.text;
}

//**代码结束**
this.gotoAndStop(1);


以上是代码,写出了运算过程,但是代码效率很低,希望有高人能够指点优化一下!

SWF成品下载地址:
链接:http://pan.baidu.com/s/1mgA3ex6 密码:16l2
雪    币: 811
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
KuNgBiM 66 2014-8-13 14:37
4
0
屌炸天,flash注册机
雪    币: 77
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
dsong 2 2014-8-13 14:46
5
0
玩玩嘛,见笑啦。
第一次用Flash/AS2写注册机,我觉得也是最后一次。
因为幸好这个软件算法简单,否则用AS2写估计要写死人了。
这个软件将就着过去了,最让我心烦的是得让我自己构造转换表,AS2里面没发现怎么把字符转换为Hex表示. 还好它机器码的组成是数字+A,B,C,D,E,F,注册码也是简单的数字+字母。
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
BlueT 2 2014-8-13 18:24
6
0
软件没你的注册机复杂。

雪    币: 137
活跃值: (263)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
透明色 2 2014-8-19 11:51
7
0
是哦
游客
登录 | 注册 方可回帖
返回