易用会员管理软件 V1.60 注册算法分析(入门级)
日期:2005年8月22日 破解人:Baby2008[BCG]
-------------------------------------------------------------------------------------------------------------------------
『软件名称』:易用会员管理软件 V1.60
『软件大小』:3501 KB
『下载地址』:http://www.skycn.com/soft/15619.html
『软件介绍』:
易用会员管理系统是一套功能强大的会员管理软件,软件将会员消费,会员基本信息,以及各种查询统计等紧密结合起来,操作简单方便,界面美观大方,能满足如销售,餐饮,美容,服务等行业进行会员制管理,会员卡管理,会员积分管理,会员消费管理的需求,科学的管理方法会给您带来无限的效益,易用会员管理软件(会员卡管理软件)是您明智的选择。
『保护方式』:注册码保护+试用期限30天
『破解声明』:初学Crack,只是感兴趣,,失误之处敬请诸位大侠赐教!
『破解工具』:OllyDbg.V1.10 聆风听雨汉化第二版、PeID 0.93,Dede 3.50
『破解过程』:
PeID 0.93查壳,Borland Delphi 6.0 - 7.0,作者好人,省了很多事情,OD载入运,插件查找“注册成功,本程序所有功能限制下次启动时将被自动解除,欢迎您成为我们正式版本用户!”字样,向上来到:
005F256C $ 55 push ebp
005F256D . 8BEC mov ebp,esp
005F256F . 33C9 xor ecx,ecx
005F2571 . 51 push ecx
005F2572 . 51 push ecx
005F2573 . 51 push ecx
005F2574 . 51 push ecx
005F2575 . 51 push ecx
005F2576 . 53 push ebx
005F2577 . 56 push esi
005F2578 . 57 push edi
005F2579 . 8945 FC mov dword ptr ss:[ebp-4],eax
005F257C . 33C0 xor eax,eax
005F257E . 55 push ebp
005F257F . 68 BD265F00 push Member.005F26BD
005F2584 . 64:FF30 push dword ptr fs:[eax]
005F2587 . 64:8920 mov dword ptr fs:[eax],esp
005F258A . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F258D . E8 AE020000 call Member.005F2840 ; 注册验证关键,跟进
005F2592 . 84C0 test al,al
005F2594 . 0F84 DB000000 je Member.005F2675 ; 爆破点
005F259A . 33C0 xor eax,eax
005F259C . 55 push ebp
005F259D . 68 59265F00 push Member.005F2659
005F25A2 . 64:FF30 push dword ptr fs:[eax]
005F25A5 . 64:8920 mov dword ptr fs:[eax],esp
005F25A8 . B2 01 mov dl,1
005F25AA . A1 14874400 mov eax,dword ptr ds:[448714]
005F25AF . E8 CC62E5FF call Member.00448880
005F25B4 . 8BD8 mov ebx,eax
005F25B6 . BA 02000080 mov edx,80000002
005F25BB . 8BC3 mov eax,ebx
005F25BD . E8 9A63E5FF call Member.0044895C
005F25C2 . B1 01 mov cl,1
005F25C4 . BA D4265F00 mov edx,Member.005F26D4 ; ASCII "Software\zy\Member"
005F25C9 . 8BC3 mov eax,ebx
005F25CB . E8 D064E5FF call Member.00448AA0
005F25D0 . 8D55 F4 lea edx,dword ptr ss:[ebp-C]
005F25D3 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F25D6 . 8B80 00030000 mov eax,dword ptr ds:[eax+300]
005F25DC . E8 2744E9FF call Member.00486A08
005F25E1 . 8B45 F4 mov eax,dword ptr ss:[ebp-C]
005F25E4 . 8D55 F8 lea edx,dword ptr ss:[ebp-8]
005F25E7 . E8 C475E1FF call Member.00409BB0
005F25EC . 8B4D F8 mov ecx,dword ptr ss:[ebp-8]
005F25EF . BA F0265F00 mov edx,Member.005F26F0 ; ASCII "Name"
005F25F4 . 8BC3 mov eax,ebx
005F25F6 . E8 4166E5FF call Member.00448C3C
005F25FB . 8D55 EC lea edx,dword ptr ss:[ebp-14]
005F25FE . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F2601 . 8B80 04030000 mov eax,dword ptr ds:[eax+304]
005F2607 . E8 FC43E9FF call Member.00486A08
005F260C . 8B45 EC mov eax,dword ptr ss:[ebp-14]
005F260F . 8D55 F0 lea edx,dword ptr ss:[ebp-10]
005F2612 . E8 9975E1FF call Member.00409BB0
005F2617 . 8B4D F0 mov ecx,dword ptr ss:[ebp-10]
005F261A . BA 00275F00 mov edx,Member.005F2700 ; ASCII "Pass"
005F261F . 8BC3 mov eax,ebx
005F2621 . E8 1666E5FF call Member.00448C3C
005F2626 . 8BC3 mov eax,ebx
005F2628 . E8 BB16E1FF call Member.00403CE8
005F262D . 6A 40 push 40
005F262F . 68 08275F00 push Member.005F2708
005F2634 . 68 14275F00 push Member.005F2714 ; 注册成功,本程序所有功能……
005F2639 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F263C . E8 3FAEE9FF call Member.0048D480
005F2641 . 50 push eax ; |hOwner
005F2642 . E8 D55BE1FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
005F2647 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F264A . E8 1121EBFF call Member.004A4760
005F264F . 33C0 xor eax,eax
005F2651 . 5A pop edx
005F2652 . 59 pop ecx
005F2653 . 59 pop ecx
005F2654 . 64:8910 mov dword ptr fs:[eax],edx
005F2657 . EB 36 jmp short Member.005F268F
005F2659 .^ E9 6A1BE1FF jmp Member.004041C8
005F265E . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F2661 . E8 FA20EBFF call Member.004A4760
005F2666 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F2669 . E8 1A010000 call Member.005F2788
005F266E . E8 811FE1FF call Member.004045F4
005F2673 . EB 1A jmp short Member.005F268F
005F2675 > 6A 40 push 40
005F2677 . 68 08275F00 push Member.005F2708
005F267C . 68 64275F00 push Member.005F2764
005F2681 . 8B45 FC mov eax,dword ptr ss:[ebp-4]
005F2684 . E8 F7ADE9FF call Member.0048D480
005F2689 . 50 push eax ; |hOwner
005F268A . E8 8D5BE1FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
005F268F > 33C0 xor eax,eax
005F2691 . 5A pop edx
005F2692 . 59 pop ecx
005F2693 . 59 pop ecx
005F2694 . 64:8910 mov dword ptr fs:[eax],edx
005F2697 . 68 C4265F00 push Member.005F26C4
005F269C > 8D45 EC lea eax,dword ptr ss:[ebp-14]
005F269F . E8 3825E1FF call Member.00404BDC
005F26A4 . 8D45 F0 lea eax,dword ptr ss:[ebp-10]
005F26A7 . E8 3025E1FF call Member.00404BDC
005F26AC . 8D45 F4 lea eax,dword ptr ss:[ebp-C]
005F26AF . E8 2825E1FF call Member.00404BDC
005F26B4 . 8D45 F8 lea eax,dword ptr ss:[ebp-8]
005F26B7 . E8 2025E1FF call Member.00404BDC
005F26BC . C3 retn
005F26BD .^ E9 BA1DE1FF jmp Member.0040447C
005F26C2 .^ EB D8 jmp short Member.005F269C
005F26C4 . 5F pop edi
005F26C5 . 5E pop esi
005F26C6 . 5B pop ebx
005F26C7 . 8BE5 mov esp,ebp
005F26C9 . 5D pop ebp
005F26CA . C3 retn
-------------------------------------------------------------------------------------------------------------------------
很明显,程序经过一个比较,然后跳转,根据比较结果给出不同提示,跟进关键005F258D call Member.005F2840:
-------------------------------------------------------------------------------------------------------------------------
005F2840 /$ 55 push ebp
005F2841 |. 8BEC mov ebp,esp
005F2843 |. 33C9 xor ecx,ecx
005F2845 |. 51 push ecx
005F2846 |. 51 push ecx
005F2847 |. 51 push ecx
005F2848 |. 51 push ecx
005F2849 |. 51 push ecx
005F284A |. 53 push ebx
005F284B |. 56 push esi
005F284C |. 8BF0 mov esi,eax
005F284E |. 33C0 xor eax,eax
005F2850 |. 55 push ebp
005F2851 |. 68 FB285F00 push Member.005F28FB
005F2856 |. 64:FF30 push dword ptr fs:[eax]
005F2859 |. 64:8920 mov dword ptr fs:[eax],esp
005F285C |. 8D55 FC lea edx,dword ptr ss:[ebp-4]
005F285F |. 8B86 04030000 mov eax,dword ptr ds:[esi+304]
005F2865 |. E8 9E41E9FF call Member.00486A08
005F286A |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 试炼码
005F286D |. 50 push eax
005F286E |. 8D55 F4 lea edx,dword ptr ss:[ebp-C]
005F2871 |. 8B86 00030000 mov eax,dword ptr ds:[esi+300]
005F2877 |. E8 8C41E9FF call Member.00486A08
005F287C |. 8B55 F4 mov edx,dword ptr ss:[ebp-C] ; 注册名
005F287F |. 8D4D F8 lea ecx,dword ptr ss:[ebp-8]
005F2882 |. 8BC6 mov eax,esi
005F2884 |. E8 F3FAFFFF call Member.005F237C ; 关键
005F2889 |. 8B55 F8 mov edx,dword ptr ss:[ebp-8] ; 注册码
005F288C |. 58 pop eax ; 试炼码
005F288D |. E8 5627E1FF call Member.00404FE8 ; 比较
005F2892 |. 75 3A jnz short Member.005F28CE ; 爆破点
005F2894 |. B3 01 mov bl,1 ; 成功标志
005F2896 |. 8D55 F0 lea edx,dword ptr ss:[ebp-10]
005F2899 |. 8B86 00030000 mov eax,dword ptr ds:[esi+300]
005F289F |. E8 6441E9FF call Member.00486A08
005F28A4 |. 8B55 F0 mov edx,dword ptr ss:[ebp-10]
005F28A7 |. B8 5CBA6300 mov eax,Member.0063BA5C
005F28AC |. E8 7F23E1FF call Member.00404C30
005F28B1 |. 8D55 EC lea edx,dword ptr ss:[ebp-14]
005F28B4 |. 8B86 04030000 mov eax,dword ptr ds:[esi+304]
005F28BA |. E8 4941E9FF call Member.00486A08
005F28BF |. 8B55 EC mov edx,dword ptr ss:[ebp-14]
005F28C2 |. B8 60BA6300 mov eax,Member.0063BA60
005F28C7 |. E8 6423E1FF call Member.00404C30
005F28CC |. EB 02 jmp short Member.005F28D0
005F28CE |> 33DB xor ebx,ebx
005F28D0 |> 33C0 xor eax,eax
005F28D2 |. 5A pop edx
005F28D3 |. 59 pop ecx
005F28D4 |. 59 pop ecx
005F28D5 |. 64:8910 mov dword ptr fs:[eax],edx
005F28D8 |. 68 02295F00 push Member.005F2902
005F28DD |> 8D45 EC lea eax,dword ptr ss:[ebp-14]
005F28E0 |. BA 03000000 mov edx,3
005F28E5 |. E8 1623E1FF call Member.00404C00
005F28EA |. 8D45 F8 lea eax,dword ptr ss:[ebp-8]
005F28ED |. E8 EA22E1FF call Member.00404BDC
005F28F2 |. 8D45 FC lea eax,dword ptr ss:[ebp-4]
005F28F5 |. E8 E222E1FF call Member.00404BDC
005F28FA \. C3 retn
-------------------------------------------------------------------------------------------------------------------------
明码比较,哈哈,爆破、做内存注册机两相宜,还是跟进005F2884 call Member.005F237C关键看看注册算法吧:
-------------------------------------------------------------------------------------------------------------------------
005F237C /$ 55 push ebp
005F237D |. 8BEC mov ebp,esp
005F237F |. 51 push ecx
005F2380 |. B9 04000000 mov ecx,4
005F2385 |> 6A 00 /push 0
005F2387 |. 6A 00 |push 0
005F2389 |. 49 |dec ecx
005F238A |.^ 75 F9 \jnz short Member.005F2385
005F238C |. 51 push ecx
005F238D |. 874D FC xchg dword ptr ss:[ebp-4],ecx
005F2390 |. 53 push ebx
005F2391 |. 56 push esi
005F2392 |. 57 push edi
005F2393 |. 8BF9 mov edi,ecx
005F2395 |. 8955 FC mov dword ptr ss:[ebp-4],edx
005F2398 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 注册名
005F239B |. E8 EC2CE1FF call Member.0040508C
005F23A0 |. 33C0 xor eax,eax
005F23A2 |. 55 push ebp
005F23A3 |. 68 3D255F00 push Member.005F253D
005F23A8 |. 64:FF30 push dword ptr fs:[eax]
005F23AB |. 64:8920 mov dword ptr fs:[eax],esp
005F23AE |. 8BC7 mov eax,edi
005F23B0 |. E8 2728E1FF call Member.00404BDC
005F23B5 |. 8B45 FC mov eax,dword ptr ss:[ebp-4] ; 注册名
005F23B8 |. E8 DF2AE1FF call Member.00404E9C ; System.@LStrLen(String):Integer;
005F23BD |. 8BF0 mov esi,eax ; 长度
005F23BF |. 85F6 test esi,esi
005F23C1 |. 7E 26 jle short Member.005F23E9
005F23C3 |. BB 01000000 mov ebx,1
005F23C8 |> 8D4D EC /lea ecx,dword ptr ss:[ebp-14]
005F23CB |. 8B45 FC |mov eax,dword ptr ss:[ebp-4] ; 注册名
005F23CE |. 0FB64418 FF |movzx eax,byte ptr ds:[eax+ebx-1] ; Name(i)
005F23D3 |. 33D2 |xor edx,edx
005F23D5 |. E8 EE7EE1FF |call Member.0040A2C8 ; SysUtils.IntToHex(Integer;Integer):AnsiString;
005F23DA |. 8B55 EC |mov edx,dword ptr ss:[ebp-14] ; ASCII
005F23DD |. 8D45 F8 |lea eax,dword ptr ss:[ebp-8]
005F23E0 |. E8 BF2AE1FF |call Member.00404EA4 ; System.@LStrCat;
005F23E5 |. 43 |inc ebx
005F23E6 |. 4E |dec esi
005F23E7 |.^ 75 DF \jnz short Member.005F23C8
005F23E9 |> 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; 注册码转为ASCII字符串,记为NameASCII,Baby2008=4261627932303038
005F23EC |. E8 AB2AE1FF call Member.00404E9C ; System.@LStrLen(String):Integer;
005F23F1 |. 8BF0 mov esi,eax ; 长度
005F23F3 |. 85F6 test esi,esi
005F23F5 |. 7E 2C jle short Member.005F2423
005F23F7 |. BB 01000000 mov ebx,1
005F23FC |> 8B45 F8 /mov eax,dword ptr ss:[ebp-8] ; NameASCII
005F23FF |. E8 982AE1FF |call Member.00404E9C ; System.@LStrLen(String):Integer;
005F2404 |. 2BC3 |sub eax,ebx
005F2406 |. 8B55 F8 |mov edx,dword ptr ss:[ebp-8]
005F2409 |. 8A1402 |mov dl,byte ptr ds:[edx+eax]
005F240C |. 8D45 E8 |lea eax,dword ptr ss:[ebp-18]
005F240F |. E8 B029E1FF |call Member.00404DC4 ; System.@LStrFromChar(String;String;Char);
005F2414 |. 8B55 E8 |mov edx,dword ptr ss:[ebp-18]
005F2417 |. 8D45 F4 |lea eax,dword ptr ss:[ebp-C]
005F241A |. E8 852AE1FF |call Member.00404EA4 ; System.@LStrCat;
005F241F |. 43 |inc ebx
005F2420 |. 4E |dec esi
005F2421 |.^ 75 D9 \jnz short Member.005F23FC ; 循环将字符串倒序,记为Rev_NameASCII
005F2423 |> 8D45 F8 lea eax,dword ptr ss:[ebp-8] ; 保存Rev_NameASCII(1-4)
005F2426 |. 50 push eax
005F2427 |. B9 04000000 mov ecx,4 ; 4
005F242C |. BA 01000000 mov edx,1 ; 1
005F2431 |. 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; Rev_NameASCII
005F2434 |. E8 C32CE1FF call Member.004050FC ; System.@LStrCopy;
005F2439 |. 8D45 F4 lea eax,dword ptr ss:[ebp-C] ; 保存Rev_NameASCII(5-8)
005F243C |. 50 push eax
005F243D |. B9 04000000 mov ecx,4 ; 4
005F2442 |. BA 05000000 mov edx,5 ; 5
005F2447 |. 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; Rev_NameASCII
005F244A |. E8 AD2CE1FF call Member.004050FC ; System.@LStrCopy;
005F244F |. 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; Rev_NameASCII(1-4)
005F2452 |. E8 452AE1FF call Member.00404E9C ; System.@LStrLen(String):Integer;
005F2457 |. 83F8 04 cmp eax,4
005F245A |. 7D 2F jge short Member.005F248B ; Length(Rev_NameASCII(1-4))>=4跳
005F245C |. 8B45 F8 mov eax,dword ptr ss:[ebp-8] ; 否则
005F245F |. E8 382AE1FF call Member.00404E9C ; System.@LStrLen(String):Integer;
005F2464 |. 8BD8 mov ebx,eax ; EBX=Length(Rev_NameASCII(1-4))
005F2466 |. 83FB 03 cmp ebx,3 ; >3
005F2469 |. 7F 20 jg short Member.005F248B ; 废话,这句永远不会成立!
005F246B |> 8D4D E4 /lea ecx,dword ptr ss:[ebp-1C]
005F246E |. 8BC3 |mov eax,ebx ; ebx=Length(Rev_NameASCII(1-4))
005F2470 |. C1E0 02 |shl eax,2 ; 长度×4
005F2473 |. 33D2 |xor edx,edx
005F2475 |. E8 4E7EE1FF |call Member.0040A2C8 ; SysUtils.IntToHex(Integer;Integer)
005F247A |. 8B55 E4 |mov edx,dword ptr ss:[ebp-1C] ; IntToHex(长度×4)
005F247D |. 8D45 F8 |lea eax,dword ptr ss:[ebp-8]
005F2480 |. E8 1F2AE1FF |call Member.00404EA4 ; System.@LStrCat;
005F2485 |. 43 |inc ebx ; 长度+1
005F2486 |. 83FB 04 |cmp ebx,4
005F2489 |.^ 75 E0 \jnz short Member.005F246B ; 长度+1<>4继续循环
005F248B |> 8B45 F4 mov eax,dword ptr ss:[ebp-C] ; Rev_NameASCII(5-8)
005F248E |. E8 092AE1FF call Member.00404E9C ; System.@LStrLen(String):Integer;
005F2493 |. 83F8 04 cmp eax,4
005F2496 |. 7D 2F jge short Member.005F24C7 ; 同上废话
005F2498 |. 8B45 F4 mov eax,dword ptr ss:[ebp-C]
005F249B |. E8 FC29E1FF call Member.00404E9C ; System.@LStrLen(String):Integer;
005F24A0 |. 8BD8 mov ebx,eax
005F24A2 |. 83FB 03 cmp ebx,3
005F24A5 |. 7F 20 jg short Member.005F24C7
005F24A7 |> 8D4D E0 /lea ecx,dword ptr ss:[ebp-20]
005F24AA |. 8BC3 |mov eax,ebx
005F24AC |. C1E0 02 |shl eax,2
005F24AF |. 33D2 |xor edx,edx
005F24B1 |. E8 127EE1FF |call Member.0040A2C8 ; SysUtils.IntToHex(Integer;Integer):AnsiString;
005F24B6 |. 8B55 E0 |mov edx,dword ptr ss:[ebp-20]
005F24B9 |. 8D45 F4 |lea eax,dword ptr ss:[ebp-C]
005F24BC |. E8 E329E1FF |call Member.00404EA4 ; System.@LStrCat;
005F24C1 |. 43 |inc ebx
005F24C2 |. 83FB 04 |cmp ebx,4
005F24C5 |.^ 75 E0 \jnz short Member.005F24A7
005F24C7 |> 8D45 F0 lea eax,dword ptr ss:[ebp-10]
005F24CA |. BA 54255F00 mov edx,Member.005F2554 ; 固定字符串"mem45erpe",记为Mark
005F24CF |. E8 A027E1FF call Member.00404C74
005F24D4 |. 8D45 DC lea eax,dword ptr ss:[ebp-24] ; 保存Mark(1-4)='mem4'
005F24D7 |. 50 push eax
005F24D8 |. B9 04000000 mov ecx,4 ; 4
005F24DD |. BA 01000000 mov edx,1 ; 1
005F24E2 |. 8B45 F0 mov eax,dword ptr ss:[ebp-10] ; Mark
005F24E5 |. E8 122CE1FF call Member.004050FC ; System.@LStrCopy;
005F24EA |. FF75 DC push dword ptr ss:[ebp-24] ; Mark(1-4)
005F24ED |. 68 68255F00 push Member.005F2568 ; 分割字符'-'
005F24F2 |. FF75 F8 push dword ptr ss:[ebp-8] ; Rev_NameASCII(1-4)
005F24F5 |. 8D45 D8 lea eax,dword ptr ss:[ebp-28] ; 保存Mark(5-9)
005F24F8 |. 50 push eax
005F24F9 |. B9 05000000 mov ecx,5 ; 5
005F24FE |. BA 05000000 mov edx,5 ; 5
005F2503 |. 8B45 F0 mov eax,dword ptr ss:[ebp-10] ; Mark
005F2506 |. E8 F12BE1FF call Member.004050FC ; System.@LStrCopy;
005F250B |. FF75 D8 push dword ptr ss:[ebp-28] ; Mark(5-9)='45erpe'
005F250E |. 68 68255F00 push Member.005F2568 ; 分割字符'-'
005F2513 |. FF75 F4 push dword ptr ss:[ebp-C] ; Rev_NameASCII(5-8)
005F2516 |. 8BC7 mov eax,edi
005F2518 |. BA 06000000 mov edx,6 ; 6
005F251D |. E8 3A2AE1FF call Member.00404F5C ; System.@LStrCatN,连接上面6项入栈参数即为注册码
005F2522 |. 33C0 xor eax,eax
005F2524 |. 5A pop edx
005F2525 |. 59 pop ecx
005F2526 |. 59 pop ecx
005F2527 |. 64:8910 mov dword ptr fs:[eax],edx
005F252A |. 68 44255F00 push Member.005F2544
005F252F |> 8D45 D8 lea eax,dword ptr ss:[ebp-28]
005F2532 |. BA 0A000000 mov edx,0A
005F2537 |. E8 C426E1FF call Member.00404C00
005F253C \. C3 retn
005F253D .^ E9 3A1FE1FF jmp Member.0040447C
005F2542 .^ EB EB jmp short Member.005F252F
005F2544 . 5F pop edi
005F2545 . 5E pop esi
005F2546 . 5B pop ebx
005F2547 . 8BE5 mov esp,ebp
005F2549 . 5D pop ebp
005F254A . C3 retn
-------------------------------------------------------------------------------------------------------------------------
到注册算法关键了,是根据用户名计算结果连接一固定字符串作为注册码,具体分析请看注释。
『算法总结』:
1、将注册名转换为ASCII字符串,如Baby2008=4261627932303038,记为NameASCII
2、将NameASCII到序,记为Rev_NameASCII;如4261627932303038->8303032397261624
3、取Rev_NameASCII(1-4)记为R1,Rev_NameASCII(5-8)记为R2,假如R1,R2长度不为4,用 Rigth('048C',4-Length(Ri))补齐4位;
4、取固定字符串Mark='mem45erpe'的前4位记为M1,后5位记为M2
5、M1-R1-M2-R2 (用分割字符'-'连接即为注册码)
『注册机源代码』:
拿张ASCII码表翻翻、纸上写写就行了,立马省去注册费200RMB, ^_^
我的注册信息:
注册名:Baby2008
注册码:mem4-83035erpe-0323
--完--
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!