好友
阅读权限40
听众
最后登录1970-1-1
|
本帖最后由 dsong 于 2014-8-6 10:42 编辑
====================前言====================
以前一直喜欢搞爆破,前几天还看到一个帖子说的是"UXXX?毒专家"的破解,一看过程真的是简单到爆!除了那个作者说的可以搜索字符串“已注册”的方法以外,打开它的语言ini文件还可以看到一些重要的信息:这个软件用数字代替了字符串,所以只要在语言文件里面搜索想要的内容,然后按照它的对应数字就可以到程序里面搜到代码了!本来想补充方法的,但是后来一想别人都已经发过了,那我就不重复提爆破了吧,来看看内存注册机的制作和算法分析。
因为是第一次搞算法,所以弄的程序是比较简单(是我看到程序注册码简单的样子我才敢去尝试),高手勿喷!
====================破解====================
<Part 1>第一部分,编写内存注册机
由于这个软件的注册码在内存里是会明码出现的(不会吧...但确实是这样的...),所以我们可以做内存注册机.
首先,我们为达到目的,最快方法先查找字符串,找到如下:(代码编辑器我IE浏览器不能用了,敬请谅解. 如果觉得看得不舒服可以复制到Notepad里看.)
代码--------------------
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
004DEFD3 |. 83E8 09 |sub eax,9 ; eax-=9
004DEFD6 |. 72 08 |jb short XXXXXXXX.004DEFE0 ; 小于则跳(此句对于算注册码无影响)
004DEFD8 |. 83C0 F9 |add eax,-7 ; eax-=7
004DEFDB |. 83E8 1A |sub eax,1A ; eax-=1A(26)
004DEFDE |. 73 1E |jnb short XXXXXXXX.004DEFFE ; 大于等于1则跳
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). [括号内为十进制数,括号外为十六进制数. 调试得出的呵呵,应该就是软件作者自己指定的.]
既然算法分析完了,写注册机应该也不难了。
<Part 3>第三部分,编写算法注册机
我看别人编写算法注册机都是用C, Delphi, ...... 但是我都不会。我唯独只会一点点AS2,Flash里的,所以我就拿它来写写看。(其实我学AS2也是半桶水.)
写代码前准备工作:
分别新建以下命名(声明)的动态文本:
h1,h2,h3,h4,h5,h6,h7,h8,h9,h10,h11,h12,h13,r1,r2,r3,r4,r5,r6,r7,r8,r9,r10,r11,r12,r13,tmp,tmptmp,tstv.
分别新建以下命名(声明)的影片剪辑:
ObO,Rcnt,LRc.
分别在以下影片剪辑里面创建以下命名(声明)的动态文本:
ObO里面:
ticnt.
Rcnt里面:
rdmv.
LRc里面:
LRcnt.
然后就是代码了:
按“生成”时的代码:
代码--------------------
//**************************************************
//**************************************************
//**** Code by dsong @ 吾爱破解[WwW.52PoJie.Cn] ****
//**************************************************
//**************************************************
on (release) {
//录入机器码
_root.HdwCod.text = _root.HdwCodee.text;
//检验机器码是否为12~13位:
if(length(_root.HdwCod.text) < 12 || length(_root.HdwCod.text) >13){
_root.RegCod.text = "无效的机器码";
}
else{
/* 刚学AS2,只会用这种办法把字符串一个一个分开了.
* 有些人可能会问我为什么不用_global,是因为我不太会用,
* 而且我觉得这样用.text和.value来表示会清晰一点.
* 你可以认为我脑残.
*/
if(length(_root.HdwCod.text) == 13){
_root.h13.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-1,1);
_root.h12.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-2,1);
_root.h11.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-3,1);
_root.h10.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-4,1);
_root.h9.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-5,1);
_root.h8.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-6,1);
_root.h7.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-7,1);
_root.h6.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-8,1);
_root.h5.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-9,1);
_root.h4.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-10,1);
_root.h3.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-11,1);
_root.h2.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-12,1);
_root.h1.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-13,1);
}
else{
_root.h12.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-2,1);
_root.h11.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-3,1);
_root.h10.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-4,1);
_root.h9.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-5,1);
_root.h8.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-6,1);
_root.h7.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-7,1);
_root.h6.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-8,1);
_root.h5.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-9,1);
_root.h4.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-10,1);
_root.h3.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-11,1);
_root.h2.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-12,1);
_root.h1.text = _root.HdwCod.text.substr(_root.HdwCod.text.length-13,1);
}
//校验数字初始
_root.tstv.value = 0;
//检验硬件代码有效性(这里代码我不会写了,只能用了最愚笨的办法,如果有高人指点我将感到非常荣幸.)
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_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 += 1;
}
if(_root.tstv.value < 13){
_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 @ 吾爱破解[WwW.52PoJie.Cn] ****
//**************************************************
//**************************************************
//开始一个一个分配
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){
if(_root.tmptmp.text != ""){
_root.tmptmp.text = _root.h13.text;
_root.Rcnt.gotoAndStop(2);
}
}
if(this.ticnt.value == 13){
_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.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.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.tmp.value = 0;
_root.tmptmp.text = "";
}
//**代码结束**
this.gotoAndStop(1);
-------------------------
Rcnt里:
代码--------------------
stop();
//**************************************************
//**************************************************
//**** Code by dsong @ 吾爱破解[WwW.52PoJie.Cn] ****
//**************************************************
//**************************************************
/* 由于我不知道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 @ 吾爱破解[WwW.52PoJie.Cn] ****
//**************************************************
//**************************************************
//录入
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;
}
//**代码结束**
this.gotoAndStop(1);
-------------------------
以上是代码,写出了运算过程,但是代码效率很低,希望有高人能够指点优化一下!
====================后记====================
这个软件算法实在是太简单了对吧?难得一见这么弱的软件,但是给我们新手练练还是挺不错的选择。
争取下次我来个稍微复杂一点的吧. ;-)
不过话说这个软件连个自校验也没有,那程序自身被病毒感染了怎么办呢?
程序下载地址:
http://update.upanshadu.com/down/upanshaduzhuanjia_danjiban.exe
|
免费评分
-
查看全部评分
|