ResizeIt v1.1 算法分析
本帖最后由 GeekCat 于 2016-1-29 11:26 编辑【文章标题】: ResizeIt v1.1 算法分析【作者邮箱】: [email protected]
【作者主页】:
【软件名称】: ResizeIt v1.1【软件大小】: 830 KB (850,717 字节)
【加壳方式】: 无壳【保护方式】: 注册码
【编写语言】: Borland Delphi 6.0 - 7.0【使用工具】: OD、PEID
【操作平台】: XP SP3【下载地址】: http://www.crsky.com/soft/8955.html【破解声明】: 破解在于交流思路和过程,结果并不重要,请不要用于非法用途;
【软件介绍】:透过PDTSoftware开发的ResizeIt,可以同时对多张图片进行编辑、转换格式,改变大小等。它可协助初学者为网页或传送电邮需求时,快速地对相关图片进行处理,它可以读取不同格式的图片,并进行转换储为jpg、gif、bmp等图片格式。--------------------------------------------------------------------------------------------------------------------------------
1、F12、字符串、API、D语言的专门工具找注册按钮快速到关键点,代码如下:
00546DEB|.8B86 C4030000 |mov eax,dword ptr ds:
00546DF1|.E8 FE5FFEFF |call resizeit.0052CDF4 ;关键CALL -1
00546DF6|.84C0 |test al,al
00546DF8|.74 0E |je short resizeit.00546E08 ;关键跳
00546DFA|.B8 986E5400 |mov eax,resizeit.00546E98 ;Thank you for registering!
00546DFF|.E8 5822F0FF |call resizeit.0044905C
00546E04|.33DB |xor ebx,ebx
00546E06|.EB 2D |jmp short resizeit.00546E35
00546E08|>6A 00 |push 0x0
00546E0A|.66:8B0D B46E5>|mov cx,word ptr ds: ;$
00546E11|.B2 01 |mov dl,0x1
00546E13|.B8 C06E5400 |mov eax,resizeit.00546EC0 ;Invalid key entered.Make sure your license key and user name are correct
2、F7跟进关键CALL -1 00546DF1 代码如下:
0052CE32|.8B55 FC mov edx,dword ptr ss: ;(ASCII "GeekCat")
0052CE35|.8BC3 mov eax,ebx
0052CE37|.E8 38000000 call resizeit.0052CE74 ;关键CALL -2要求eax=1
0052CE3C|.8BD8 mov ebx,eax
3、F7跟进关键CALL -2 0052CE37 代码如下:
0052CEEE|.8B45 FC mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052CEF1|.E8 E27AEDFF call resizeit.004049D8 ;计算注册名的长度
0052CEF6|.3B47 58 cmp eax,dword ptr ds: ;注册名不大于32位
0052CEF9|.7F 19 jg short resizeit.0052CF14
0052CEFB|.8B45 FC mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052CEFE|.E8 D57AEDFF call resizeit.004049D8 ;计算注册名的长度
0052CF03|.3B47 5C cmp eax,dword ptr ds:
0052CF06|.7C 0C jl short resizeit.0052CF14
0052CF08|.8B45 0C mov eax,dword ptr ss: ;(ASCII "1234567890ABCdef9876")
0052CF0B|.E8 C87AEDFF call resizeit.004049D8
0052CF10|.85C0 test eax,eax ;注册码不能为空
0052CF12|.75 07 jnz short resizeit.0052CF1B
0052CF14|>33DB xor ebx,ebx
0052CF16|.E9 8A000000 jmp resizeit.0052CFA5
0052CF1B|>8D55 F4 lea edx,dword ptr ss:
0052CF1E|.8B45 0C mov eax,dword ptr ss: ;(ASCII "1234567890ABCdef9876")
0052CF21|.E8 DEBEEDFF call resizeit.00408E04 ;小写转大写
0052CF26|.8B55 F4 mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052CF29|.8D45 0C lea eax,dword ptr ss:
0052CF2C|.E8 8778EDFF call resizeit.004047B8
0052CF31|.33DB xor ebx,ebx
0052CF33|.B1 01 mov cl,0x1
0052CF35|.8B55 0C mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052CF38|.8BC7 mov eax,edi
0052CF3A|.E8 99FAFFFF call resizeit.0052C9D8 ;细看一下 对注册有什么限制
0052CF3F|.84C0 test al,al
0052CF41|.75 62 jnz short resizeit.0052CFA5
0052CF43|.8D45 F0 lea eax,dword ptr ss:
0052CF46|.50 push eax
0052CF47|.8B4D 0C mov ecx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052CF4A|.8B55 FC mov edx,dword ptr ss: ;(ASCII "GeekCat")
0052CF4D|.8BC7 mov eax,edi
0052CF4F|.E8 28F2FFFF call resizeit.0052C17C ;算法CALL
0052CF54|.8B45 F0 mov eax,dword ptr ss:
0052CF57|.BA E8CF5200 mov edx,resizeit.0052CFE8 ;645364631365423154824
0052CF5C|.E8 1BBFEDFF call resizeit.00408E7C ;对比CALL要求eax=0
0052CF61|.85C0 test eax,eax
0052CF63|.75 04 jnz short resizeit.0052CF69 ;不能跳
0052CF65|.B3 01 mov bl,0x1
0052CF67|.EB 02 jmp short resizeit.0052CF6B
0052CF69|>33DB xor ebx,ebx
0052CF6B|>80FB 01 cmp bl,0x1
0052CF6E|.75 35 jnz short resizeit.0052CFA5 ;不能跳
0052CF70|.8D47 50 lea eax,dword ptr ds:
4、F7跟进算法CALL0052CE37 代码如下:
0052C1C0|.8B45 08 mov eax,dword ptr ss:
0052C1C3|.BA 3CC55200 mov edx,resizeit.0052C53C ;542264156124568746123
0052C1C8|.E8 A785EDFF call resizeit.00404774
0052C1CD|.8B45 F8 mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052C1D0|.E8 0388EDFF call resizeit.004049D8 ;计算注册名的长度
0052C1D5|.8B55 FC mov edx,dword ptr ss:
0052C1D8|.3B42 58 cmp eax,dword ptr ds: ;注册名不能大于32位
0052C1DB|.0F8F 18030000 jg resizeit.0052C4F9
0052C1E1|.8B45 F8 mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052C1E4|.E8 EF87EDFF call resizeit.004049D8 ;计算注册名的长度
0052C1E9|.8B55 FC mov edx,dword ptr ss:
0052C1EC|.3B42 5C cmp eax,dword ptr ds: ;注册名要大于等于5位
0052C1EF|.0F8C 04030000 jl resizeit.0052C4F9
0052C1F5|.8D45 E0 lea eax,dword ptr ss:
0052C1F8|.8B55 F4 mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C1FB|.8A12 mov dl,byte ptr ds: ;取注册码第1位
0052C1FD|.8850 01 mov byte ptr ds:,dl
0052C200|.C600 01 mov byte ptr ds:,0x1
0052C203|.8D55 E0 lea edx,dword ptr ss:
0052C206|.8D45 DC lea eax,dword ptr ss:
0052C209|.E8 7A6EEDFF call resizeit.00403088
0052C20E|.8D45 D8 lea eax,dword ptr ss:
0052C211|.8B55 F4 mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C214|.8A52 02 mov dl,byte ptr ds: ;取注册码第3位
0052C217|.8850 01 mov byte ptr ds:,dl
0052C21A|.C600 01 mov byte ptr ds:,0x1
0052C21D|.8D55 D8 lea edx,dword ptr ss:
0052C220|.8D45 DC lea eax,dword ptr ss:
0052C223|.B1 02 mov cl,0x2
0052C225|.E8 2E6EEDFF call resizeit.00403058
0052C22A|.8D55 DC lea edx,dword ptr ss:
0052C22D|.8D45 F0 lea eax,dword ptr ss: ;ebp-0x10 值
0052C230|.E8 4787EDFF call resizeit.0040497C
0052C235|.8D45 EC lea eax,dword ptr ss:
0052C238|.8B55 F4 mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C23B|.8A52 04 mov dl,byte ptr ds: ;取注册码第5位
0052C23E|.E8 BD86EDFF call resizeit.00404900
0052C243|.8B45 F8 mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052C246|.E8 8D87EDFF call resizeit.004049D8 ;计算注册名的长度
0052C24B|.8BF0 mov esi,eax
0052C24D|.8975 D4 mov dword ptr ss:,esi
0052C250|.DB45 D4 fild dword ptr ss:
0052C253|.D835 54C55200 fdiv dword ptr ds:
0052C259|.E8 466AEDFF call resizeit.00402CA4
0052C25E|.8B55 F8 mov edx,dword ptr ss: ;(ASCII "GeekCat")
0052C261|.0FB64402 FF movzx eax,byte ptr ds:[edx+eax-0x1>;取注册名长度除2的整数部分数值位
0052C266|.8B55 F8 mov edx,dword ptr ss: ;(ASCII "GeekCat")
0052C269|.0FB612 movzx edx,byte ptr ds: ;取注册名的第1位
0052C26C|.8B4D F8 mov ecx,dword ptr ss:
0052C26F|.0FB649 01 movzx ecx,byte ptr ds: ;取注册名的第2位
0052C273|.03D1 add edx,ecx ;注册名第1、2位AS相加
0052C275|.03C2 add eax,edx ;注册名第1、2、3位AS相加
0052C277|.8B55 F8 mov edx,dword ptr ss: ;(ASCII "GeekCat")
0052C27A|.0FB65432 FF movzx edx,byte ptr ds:[edx+esi-0x1>;注册名最后1位
0052C27F|.03C2 add eax,edx ;注册名第1、2、3位AS加上最后1位
0052C281|.8B55 F8 mov edx,dword ptr ss:
0052C284|.0FB65432 FE movzx edx,byte ptr ds:[edx+esi-0x2>;注册名倒数第2位
0052C289|.03C2 add eax,edx ;注册名第1、2、3位AS加上倒数第1、2位
0052C28B|.8945 E8 mov dword ptr ss:,eax ;1E6
0052C28E|.8D45 D0 lea eax,dword ptr ss:
0052C291|.8B4D F0 mov ecx,dword ptr ss: ;(ASCII "13") 注册码的1、3位吗
0052C294|.BA 60C55200 mov edx,resizeit.0052C560 ;$
0052C299|.E8 8687EDFF call resizeit.00404A24
0052C29E|.8B45 D0 mov eax,dword ptr ss:
0052C2A1|.BA FFFF0000 mov edx,0xFFFF
0052C2A6|.E8 09D2EDFF call resizeit.004094B4 ;字符串转数值(表达不一定准确,理解什么意思就OK) 注意eax+0x70值
0052C2AB|.8BF0 mov esi,eax
0052C2AD|.81FE FFFF0000 cmp esi,0xFFFF
0052C2B3|.0F84 40020000 je resizeit.0052C4F9
0052C2B9|.8B45 FC mov eax,dword ptr ss:
0052C2BC|.8B40 70 mov eax,dword ptr ds: ;这个值怎来的没找到换用不同的注册名和注册码都不变看着常量C225
0052C2BF|.99 cdq
0052C2C0|.F77D E8 idiv dword ptr ss: ;总共5位注册名累加和1E6
0052C2C3|.81E2 FF000000 and edx,0xFF
0052C2C9|.3BF2 cmp esi,edx
0052C2CB|.0F85 28020000 jnz resizeit.0052C4F9 ;0 不能跳
0052C2D1|.8D45 CC lea eax,dword ptr ss:
0052C2D4|.8B4D EC mov ecx,dword ptr ss: ;(UNICODE "5") 注册码的第5位
0052C2D7|.BA 60C55200 mov edx,resizeit.0052C560 ;$
0052C2DC|.E8 4387EDFF call resizeit.00404A24
0052C2E1|.8B45 CC mov eax,dword ptr ss:
0052C2E4|.BA FFFF0000 mov edx,0xFFFF
0052C2E9|.E8 C6D1EDFF call resizeit.004094B4 ;字符串转数值
0052C2EE|.8BF0 mov esi,eax
0052C2F0|.81FE FFFF0000 cmp esi,0xFFFF
0052C2F6|.0F84 FD010000 je resizeit.0052C4F9
0052C2FC|.8B45 F8 mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052C2FF|.E8 D486EDFF call resizeit.004049D8
0052C304|.3BF0 cmp esi,eax ;注册名长度跟计算出来的数值比较
0052C306|.74 15 je short resizeit.0052C31D
0052C308|.8B45 F8 mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052C30B|.E8 C886EDFF call resizeit.004049D8
0052C310|.83F8 10 cmp eax,0x10 ;当计算值不等注册名长时,注册名最大0x10-->16位
0052C313|.7E 08 jle short resizeit.0052C31D
0052C315|.85F6 test esi,esi
0052C317|.0F85 DC010000 jnz resizeit.0052C4F9
0052C31D|>8D45 E0 lea eax,dword ptr ss:
0052C320|.8B55 F4 mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C323|.8A52 06 mov dl,byte ptr ds: ;取注册码第7位7
0052C326|.8850 01 mov byte ptr ds:,dl
0052C329|.C600 01 mov byte ptr ds:,0x1
0052C32C|.8D55 E0 lea edx,dword ptr ss:
0052C32F|.8D45 DC lea eax,dword ptr ss:
0052C332|.E8 516DEDFF call resizeit.00403088
0052C337|.8D45 D8 lea eax,dword ptr ss:
0052C33A|.8B55 F4 mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C33D|.8A52 08 mov dl,byte ptr ds: ;取注册码第9位9
0052C340|.8850 01 mov byte ptr ds:,dl
0052C343|.C600 01 mov byte ptr ds:,0x1
0052C346|.8D55 D8 lea edx,dword ptr ss:
0052C349|.8D45 DC lea eax,dword ptr ss:
0052C34C|.B1 02 mov cl,0x2
0052C34E|.E8 056DEDFF call resizeit.00403058
0052C353|.8D55 DC lea edx,dword ptr ss:
0052C356|.8D45 D4 lea eax,dword ptr ss:
0052C359|.E8 2A6DEDFF call resizeit.00403088
0052C35E|.8D45 D8 lea eax,dword ptr ss:
0052C361|.8B55 F4 mov edx,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C364|.8A52 0A mov dl,byte ptr ds: ;取注册码第11位A
0052C367|.8850 01 mov byte ptr ds:,dl
0052C36A|.C600 01 mov byte ptr ds:,0x1
0052C36D|.8D55 D8 lea edx,dword ptr ss:
0052C370|.8D45 D4 lea eax,dword ptr ss:
0052C373|.B1 03 mov cl,0x3
0052C375|.E8 DE6CEDFF call resizeit.00403058
0052C37A|.8D55 D4 lea edx,dword ptr ss:
0052C37D|.8D45 F0 lea eax,dword ptr ss:
0052C380|.E8 F785EDFF call resizeit.0040497C
0052C385|.8D45 C8 lea eax,dword ptr ss:
0052C388|.8B4D F0 mov ecx,dword ptr ss: ;(ASCII "79A")
0052C38B|.BA 60C55200 mov edx,resizeit.0052C560 ;$
0052C390|.E8 8F86EDFF call resizeit.00404A24
0052C395|.8B45 C8 mov eax,dword ptr ss:
0052C398|.BA FFFF0000 mov edx,0xFFFF
0052C39D|.E8 12D1EDFF call resizeit.004094B4 ;字符串转数值
0052C3A2|.8945 E8 mov dword ptr ss:,eax
0052C3A5|.817D E8 FFFF0>cmp dword ptr ss:,0xFFFF
0052C3AC|.0F84 47010000 je resizeit.0052C4F9
0052C3B2|.33F6 xor esi,esi
0052C3B4|.8B45 F8 mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052C3B7|.E8 1C86EDFF call resizeit.004049D8 ;计算注册码长度
0052C3BC|.85C0 test eax,eax
0052C3BE|.7E 13 jle short resizeit.0052C3D3
0052C3C0|.BB 01000000 mov ebx,0x1
0052C3C5|>8B55 F8 /mov edx,dword ptr ss: ;(ASCII "GeekCat")
0052C3C8|.0FB6541A FF |movzx edx,byte ptr ds:[edx+ebx-0x>
0052C3CD|.03F2 |add esi,edx ;注册名各字符AS值累加 294
0052C3CF|.43 |inc ebx
0052C3D0|.48 |dec eax
0052C3D1|.^ 75 F2 \jnz short resizeit.0052C3C5
0052C3D3|>C1E6 04 shl esi,0x4 ;累加和左移4位2940
0052C3D6|.8B45 FC mov eax,dword ptr ss:
0052C3D9|.3370 74 xor esi,dword ptr ds: ;2940 xor E8D7这个值怎来的没找到换用不同的注册名和注册码都不变看着常量
0052C3DC|.81E6 FF0F0000 and esi,0xFFF
0052C3E2|.8975 E4 mov dword ptr ss:,esi
0052C3E5|.8B45 E4 mov eax,dword ptr ss:
0052C3E8|.3B45 E8 cmp eax,dword ptr ss: ;xor值跟注册码的 7、9、11位组成的数字相等
0052C3EB|.0F85 08010000 jnz resizeit.0052C4F9
0052C3F1|.8B45 F4 mov eax,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C3F4|.E8 DF85EDFF call resizeit.004049D8 ;计算注册名长度
0052C3F9|.83F8 0C cmp eax,0xC ;注册码长度大于12位,如果注册小于等于12位时有什么情况~~
0052C3FC|.0F8E EA000000 jle resizeit.0052C4EC
0052C402|.8D45 EC lea eax,dword ptr ss:
0052C405|.E8 1683EDFF call resizeit.00404720
0052C40A|.33C0 xor eax,eax
0052C40C|.8945 E4 mov dword ptr ss:,eax
0052C40F|.8B45 F8 mov eax,dword ptr ss: ;(ASCII "GeekCat")
0052C412|.E8 C185EDFF call resizeit.004049D8 ;计算注册码长度
0052C417|.85C0 test eax,eax
0052C419|.7E 14 jle short resizeit.0052C42F
0052C41B|.BB 01000000 mov ebx,0x1
0052C420|>8B55 F8 /mov edx,dword ptr ss: ;(ASCII "GeekCat")
0052C423|.0FB6541A FF |movzx edx,byte ptr ds:[edx+ebx-0x>;取注册名的每1位
0052C428|.0155 E4 |add dword ptr ss:,edx ;注册名各字符AS值累加 294
0052C42B|.43 |inc ebx
0052C42C|.48 |dec eax
0052C42D|.^ 75 F1 \jnz short resizeit.0052C420
0052C42F|>B8 FFFFFF07 mov eax,0x7FFFFFF
0052C434|.33D2 xor edx,edx
0052C436|.F775 E4 div dword ptr ss: ;294
0052C439|.F76D E4 imul dword ptr ss:
0052C43C|.8945 E4 mov dword ptr ss:,eax ;07FFFF80
0052C43F|.8B45 F4 mov eax,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C442|.E8 9185EDFF call resizeit.004049D8 ;计算注册码长度
0052C447|.83E8 0C sub eax,0xC
0052C44A|.8945 E8 mov dword ptr ss:,eax
0052C44D|.8D45 F0 lea eax,dword ptr ss:
0052C450|.50 push eax
0052C451|.8B4D E8 mov ecx,dword ptr ss:
0052C454|.BA 0D000000 mov edx,0xD ;从第0xD-->12位开始取
0052C459|.8B45 F4 mov eax,dword ptr ss: ;(ASCII "1234567890ABCDEF9876")
0052C45C|.E8 CF87EDFF call resizeit.00404C30 ;截取字符串(ASCII "CDEF9876")
0052C461|.BF 1F000000 mov edi,0x1F
0052C466|.BB 01000000 mov ebx,0x1
0052C46B|>8BCB /mov ecx,ebx ;这个循环生在一个96位的字符串,
0052C46D|.8B45 FC |mov eax,dword ptr ss: ;这个循环的计算步骤太多但不复杂很容易看到,不好写总结(总结能力有限请多包含)
0052C470|.8B40 78 |mov eax,dword ptr ds: ;79BE这个值怎来的没找到换用不同的注册名和注册码都不变看着常量
0052C473|.8BF0 |mov esi,eax
0052C475|.D3E6 |shl esi,cl
0052C477|.8BCF |mov ecx,edi
0052C479|.D3E8 |shr eax,cl
0052C47B|.0BF0 |or esi,eax
0052C47D|.8BC6 |mov eax,esi
0052C47F|.99 |cdq
0052C480|.33C2 |xor eax,edx
0052C482|.2BC2 |sub eax,edx
0052C484|.8BF0 |mov esi,eax
0052C486|.3B75 E4 |cmp esi,dword ptr ss:
0052C489|.7E 0A |jle short resizeit.0052C495
0052C48B|.8BC6 |mov eax,esi
0052C48D|.99 |cdq
0052C48E|.F77D E4 |idiv dword ptr ss:
0052C491|.8BF2 |mov esi,edx
0052C493|.EB 08 |jmp short resizeit.0052C49D
0052C495|>8B45 E4 |mov eax,dword ptr ss:
0052C498|.99 |cdq
0052C499|.F7FE |idiv esi
0052C49B|.8BF2 |mov esi,edx
0052C49D|>8D4D C4 |lea ecx,dword ptr ss:
0052C4A0|.8BC6 |mov eax,esi
0052C4A2|.25 FF0F0000 |and eax,0xFFF
0052C4A7|.BA 03000000 |mov edx,0x3
0052C4AC|.E8 8BCFEDFF |call resizeit.0040943C ;数值转字符串
0052C4B1|.8B55 C4 |mov edx,dword ptr ss: ;进CALL时eax的值变成字符串
0052C4B4|.8D45 EC |lea eax,dword ptr ss:
0052C4B7|.E8 2485EDFF |call resizeit.004049E0
0052C4BC|.4F |dec edi
0052C4BD|.43 |inc ebx
0052C4BE|.83FB 21 |cmp ebx,0x21
0052C4C1|.^ 75 A8 \jnz short resizeit.0052C46B
0052C4C3|.8D45 EC lea eax,dword ptr ss:
0052C4C6|.50 push eax
0052C4C7|.8B45 FC mov eax,dword ptr ss:
0052C4CA|.8B48 6C mov ecx,dword ptr ds:
0052C4CD|.83E9 0C sub ecx,0xC ;取的位数 E-C=2这个ecx的值不变 当常量来用E
0052C4D0|.BA 01000000 mov edx,0x1 ;第1位开始取
0052C4D5|.8B45 EC mov eax,dword ptr ss: ;计算出来的96位字符串
0052C4D8|.E8 5387EDFF call resizeit.00404C30
0052C4DD|.8B55 EC mov edx,dword ptr ss: ;(ASCII "1A") 前2位
0052C4E0|.8B45 F0 mov eax,dword ptr ss: ;(ASCII "CDEF9876") 注册码的后8位
0052C4E3|.E8 E4C9EDFF call resizeit.00408ECC ;比较CALL ,上一个CALL取得的字符串要跟注册码12位之后的字符串一样
0052C4E8|.85C0 test eax,eax
0052C4EA|.75 0D jnz short resizeit.0052C4F9 ;不能跳
0052C4EC|>8B45 08 mov eax,dword ptr ss: ;CALL前面的字符常量字符串 542264156124568746123
0052C4EF|.BA 6CC55200 mov edx,resizeit.0052C56C ;645364631365423154824
0052C4F4|.E8 7B82EDFF call resizeit.00404774
---------------------------------------------------------------------------------------------------------------------------不完整总结的总结:分析、总结能力太渣请大家多包涵。1、注册名长度:5~16位;2、注册码的1、3、5、7、9、11、13、14位必须是由0~f组成,其它的可以任意数字或字母;3、代码0052C46D 处的循环步骤比较多,总结起来要写很大一堆(分析总结能力太渣);4、上面贴出的代码(除0052C46D 处循环)注释的很明白
可用注册信息:注册名:GeekCat/P.Y.G
注册码:2P5Y8G8P2Y7GF3 (偶数位:PYG)
---------------------------------------------------------------------------------------------------------------------------【版权声明】:本文原创于GeekCat/P.Y.G,转载请注明作者及论坛并保存文章的完整!
我们都爱月姐姐 谢谢楼主分享 算法分析很NB
学习了,感谢分享了 楼主的算法分析注释很详细,谢谢分享!
赞,GC算法分析很棒~ 真牛,已经是高手了。佩服中 我们都爱 月姐姐
感谢楼主分享! 谢谢 版主分享算法分析。
页:
[1]
2