【文章标题】: 处女作--一个简单明了的注册过程与大家共享
【文章作者】: looyoo
【软件名称】: OpenVideoConverter v3.01
【软件大小】: 1.28mb
【下载地址】: http://www.wuguole.com
【保护方式】: 注册码
【编写语言】: VC++7.0
【使用工具】: PEiD,OllyDbg1.10
【操作平台】: WindowsXP SP2
【软件介绍】: 视屏转换,简单实用。
【作者前言】: 我是学“实用主义哲学”的,无论是工作还是专业,均与软件或破解相去甚远,是看雪的几本书把我带到了这里,做了一名看官。为偿取索之债,在下不揣浅薄,以此聊表回报,实无班门弄斧之意。缪误之处,请能者指教!
--------------------------------------------------------------------------------
    因需要,前几天在网上找到一款视频编辑软件,本来做汉化的朋友已经提供了一组注册码,无奈不合实用主义者的一贯做法,因此还是操起了火枪,企图用暴力彻底解决问题。在 OllyDbg 下,该软件的注册过程简单明了,实在是难得的破解案例,于是有了这篇陋作。
-----------------------------------
    言归正传!
    一、开局例行三板斧:查壳、查编写语言和试注册。好极了!无壳、VC++、有提示,是菜鸟吃的馍馍,窃喜!
    二、了解大致的注册流程:搬出利器 OllyDbg,加载目标程序,在 CPU 窗口击右键,选择:超级字串参考->查找 UNICODE,(没有这个插件的朋友可以在 W32Dasm 或 UE 下定位)搜索注册失败的提示语“注册失败!”,找到以后双击该提示语,来到 CPU 窗口 00424c55 处,不妨让它变红(设为断点)以醒目,向上翻屏,到最近的一个 etrn 为止,紧接其下的 00424980 PUSH EBP  就是注册论证过程的子程序的入口处,设为断点。我们就从这里开始跟踪分析注册过程。
    包围圈划定了,可以先试注册一下,了解注册过程的大致流程,以便在跟踪分析时心中有数。输入注册名与注册码以后,程序大致按下述路径运行:
    1)...004249A1 JGE 004249B6-->004249C4 JGE 004249D9...-->①...00424B9B JE 00424BF5-->注册成功!
                                                         -->②JNE 00424B9D-->2),作新的注册码测试;
    2)...00424B9D...-->①...00424BF9 PUSH 00460374-->注册成功!
                    -->②JNE 00424C51-->注册失败!
注册名与注册码均有长度要求。
    三、调试并获取注册码。设子程序入口点 0042497F 为断点,用 DllyDbg 加载程序,F9 运行,弹出注册窗口后输入注册名 abcdef、注册码 12345678(本例中便于识别),点击“注册”。程序在 0042497F 处断下,F8 步进。由于整个注册过程不长,我们不妨把它全部贴上,在代码旁作标注,更加直观。
--------------------------------------------
0042497F  \.  C3            RETN                           
00424980  /.  55            PUSH EBP                        ;  子程序入口、设为断点
00424981  |.  8BEC          MOV EBP,ESP
00424983  |.  83EC 20       SUB ESP,20
00424986  |.  894D E0       MOV DWORD PTR SS:[EBP-20],ECX
00424989  |.  6A 01         PUSH 1
0042498B  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
0042498E  |.  E8 CA230200   CALL VideoCon.00446D5D
00424993  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
00424996  |.  83C1 70       ADD ECX,70
00424999  |.  E8 B270FEFF   CALL VideoCon.0040BA50          
0042499E  |.  83F8 02       CMP EAX,2                       ;  比较注册名长度(请结合寄存器来看)
004249A1  |.  7D 13         JGE SHORT VideoCon.004249B6     ;  大于或等于则跳(显然不能小于2位)
004249A3  |.  6A 00         PUSH 0
004249A5  |.  6A 00         PUSH 0
004249A7  |.  68 2C034600   PUSH VideoCon.0046032C          ;  ASCII "请输入正确的用户名!"
004249AC  |.  E8 BEC10200   CALL VideoCon.00450B6F
004249B1  |.  E9 A9020000   JMP VideoCon.00424C5F           ;  以上不跳将要运行至重新输入注册名
004249B6  |>  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   ;  注册名合乎要求后跳转至此
004249B9  |.  83C1 74       ADD ECX,74
004249BC  |.  E8 8F70FEFF   CALL VideoCon.0040BA50
004249C1  |.  83F8 08       CMP EAX,8                       ;  比较注册码长度
004249C4  |.  7D 13         JGE SHORT VideoCon.004249D9     ;  大于或等于则跳(显然不能小于8位)
004249C6  |.  6A 00         PUSH 0
004249C8  |.  6A 00         PUSH 0
004249CA  |.  68 4C034600   PUSH VideoCon.0046034C          ;  ASCII "请输入正确的注册码!"
004249CF  |.  E8 9BC10200   CALL VideoCon.00450B6F
004249D4  |.  E9 86020000   JMP VideoCon.00424C5F           ;  以上不跳将要运行至重新输入注册码
-----------------------------------------------------------
将注册名的前两位转换为 ASCII 码,并分别保存

004249D9  |>  6A 00         PUSH 0                          ; 上一节注册码长度合乎要求后跳转至此
004249DB  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   ; [EBP-20]中为常数 DEE30
004249DE  |.  83C1 70       ADD ECX,70                      ; 加70
004249E1  |.  E8 AAF5FFFF   CALL VideoCon.00423F90          ; 0042390 存放着注册名,本节同
004249E6  |.  8845 EF       MOV BYTE PTR SS:[EBP-11],AL     ; AL=61存入[ebp-11],第一个字符a的ASCII码,以下可以类推
004249E9  |.  6A 01         PUSH 1                          
004249EB  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
004249EE  |.  83C1 70       ADD ECX,70                      
004249F1  |.  E8 9AF5FFFF   CALL VideoCon.00423F90          
004249F6  |.  8845 F8       MOV BYTE PTR SS:[EBP-8],AL      ;  AL=62存入[ebp-8],第二个字符b的ASCII码
004249F9  |.  6A 00         PUSH 0                          
004249FB  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
004249FE  |.  83C1 70       ADD ECX,70                      
00424A01  |.  E8 8AF5FFFF   CALL VideoCon.00423F90          
00424A06  |.  8845 FF       MOV BYTE PTR SS:[EBP-1],AL      ;  AL=61存入[ebp-20],第一个字符a的ASCII码
00424A09  |.  6A 01         PUSH 1                          
00424A0B  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424A0E  |.  83C1 70       ADD ECX,70                      
00424A11  |.  E8 7AF5FFFF   CALL VideoCon.00423F90          
00424A16  |.  8845 FA       MOV BYTE PTR SS:[EBP-6],AL      ;  AL=62存入[ebp-6],第二个字符b的ASCII码
------------------------------------------------
00424A19  |.  0FB645 EF     MOVZX EAX,BYTE PTR SS:[EBP-11]  ;  第一个字符a的 ASCII 码传送到 eax
00424A1D  |.  83C8 41       OR EAX,41                       ;  逻辑或运算,下同
00424A20  |.  8845 EF       MOV BYTE PTR SS:[EBP-11],AL     ;  或运算结果的低位数AL=61存入[ebp-11]
00424A23  |.  0FB64D F8     MOVZX ECX,BYTE PTR SS:[EBP-8]
00424A27  |.  83C9 56       OR ECX,56
00424A2A  |.  884D F8       MOV BYTE PTR SS:[EBP-8],CL      ;  CL=76存入[ebp-8]
00424A2D  |.  0FB655 FF     MOVZX EDX,BYTE PTR SS:[EBP-1]
00424A31  |.  83CA 49       OR EDX,49
00424A34  |.  8855 FF       MOV BYTE PTR SS:[EBP-1],DL      ;  DL=69存入[ebp-1]
00424A37  |.  0FB645 FA     MOVZX EAX,BYTE PTR SS:[EBP-6]
00424A3B  |.  83C8 43       OR EAX,43
00424A3E  |.  8845 FA       MOV BYTE PTR SS:[EBP-6],AL      ;  AL=63存入[ebp-6]
---------------------------------------------------------
计算真码的前五位并分别保存在各自的地址

00424A41  |.  0FB645 EF     MOVZX EAX,BYTE PTR SS:[EBP-11]  ;  上一节已经计算[EBP-11]-->61
00424A45  |.  99            CDQ                             ;  字节扩展
00424A46  |.  B9 0A000000   MOV ECX,0A                      ;  除数是 0A,意味着余数不会大于9,注册码前五位只能是阿拉伯数字
00424A4B  |.  F7F9          IDIV ECX                        ;  有符号除法,(edx,eax)/ecx,商存 eax取 edx 中的余数
00424A4D  |.  8855 EF       MOV BYTE PTR SS:[EBP-11],DL     ;  DL=7......1 第一位注册码,以下类推
00424A50  |.  0FB645 F8     MOVZX EAX,BYTE PTR SS:[EBP-8]
00424A54  |.  99            CDQ
00424A55  |.  B9 0A000000   MOV ECX,0A
00424A5A  |.  F7F9          IDIV ECX
00424A5C  |.  8855 F8       MOV BYTE PTR SS:[EBP-8],DL      ;  DL=8......2
00424A5F  |.  0FB645 FF     MOVZX EAX,BYTE PTR SS:[EBP-1]
00424A63  |.  99            CDQ
00424A64  |.  B9 0A000000   MOV ECX,0A
00424A69  |.  F7F9          IDIV ECX
00424A6B  |.  8855 FF       MOV BYTE PTR SS:[EBP-1],DL      ;  DL=5......3
00424A6E  |.  0FB645 FA     MOVZX EAX,BYTE PTR SS:[EBP-6]
00424A72  |.  99            CDQ
00424A73  |.  B9 0A000000   MOV ECX,0A
00424A78  |.  F7F9          IDIV ECX
00424A7A  |.  8855 FA       MOV BYTE PTR SS:[EBP-6],DL      ;  DL=9......4。以下计算第5位注册码
00424A7D  |.  C745 F0 00000>MOV DWORD PTR SS:[EBP-10],0     ;  清 0 初始化
00424A84  |.  C745 E8 00000>MOV DWORD PTR SS:[EBP-18],0     ;  清 0 初始化
00424A8B  |.  EB 09         JMP SHORT VideoCon.00424A96
00424A8D  |>  8B55 E8       /MOV EDX,DWORD PTR SS:[EBP-18]  ;  已处理过的注册名位数
00424A90  |.  83C2 01       |ADD EDX,1                      ;  当前要处理的注册名位次是已处理过的位数+1
00424A93  |.  8955 E8       |MOV DWORD PTR SS:[EBP-18],EDX
00424A96  |>  8B4D E0        MOV ECX,DWORD PTR SS:[EBP-20]
00424A99  |.  83C1 70       |ADD ECX,70                     ;  加70
00424A9C  |.  E8 AF6FFEFF   |CALL VideoCon.0040BA50         ;  注册名全长(6)
00424AA1  |.  3945 E8       |CMP DWORD PTR SS:[EBP-18],EAX  ;  eax 内为注册名全长
00424AA4  |.  7D 1E         |JGE SHORT VideoCon.00424AC4    ;  大于或等于(6)则跳
00424AA6  |.  8B45 E8       |MOV EAX,DWORD PTR SS:[EBP-18]
00424AA9  |.  50            |PUSH EAX                       ; 
00424AAA  |.  8B4D E0       |MOV ECX,DWORD PTR SS:[EBP-20]  ; 
00424AAD  |.  83C1 70       |ADD ECX,70                     ; 
00424AB0  |.  E8 DBF4FFFF   |CALL VideoCon.00423F90         ; 取注册名
00424AB5  |.  8845 E7       |MOV BYTE PTR SS:[EBP-19],AL    ; 注册名当前位次上字符的 ASCII 码
00424AB8  |.  0FB64D E7     |MOVZX ECX,BYTE PTR SS:[EBP-19] 
00424ABC  |.  034D F0       |ADD ECX,DWORD PTR SS:[EBP-10]  ; 已处理过的位次上注册名字符的ASCII值被累加在[EBP-10]
00424ABF  |.  894D F0       |MOV DWORD PTR SS:[EBP-10],ECX  ; 当前累加结果传送至 [EBP-10] 保存
00424AC2  |.^ EB C9         \JMP SHORT VideoCon.00424A8D    ; 进入下一个循环
00424AC4  |>  8B45 F0       MOV EAX,DWORD PTR SS:[EBP-10]   ; 最终的累加值  
00424AC7  |.  99            CDQ                             ; 字节扩展
00424AC8  |.  B9 0A000000   MOV ECX,0A
00424ACD  |.  F7F9          IDIV ECX                        ; 用累加值除以0A,取 edx 中的余数
00424ACF  |.  8855 F4       MOV BYTE PTR SS:[EBP-C],DL      ; DL=7......5 第五位注册码
----------------------------------------------------------
将测试码各位次上的 ASCII 值分别保存

00424AD2  |.  6A 00         PUSH 0                          ; 
00424AD4  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   ; [EBP-20]-->DEE30,一个常数
00424AD7  |.  83C1 74       ADD ECX,74                      ; 加74
00424ADA  |.  E8 B1F4FFFF   CALL VideoCon.00423F90          ; 0042390 存放着测试用注册码,本节同
00424ADF  |.  8845 FC       MOV BYTE PTR SS:[EBP-4],AL      ; 1.AL=31存[EBP-4]备用,以下可以类推
00424AE2  |.  6A 01         PUSH 1                          ; /Arg1 = 00000001
00424AE4  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424AE7  |.  83C1 74       ADD ECX,74                      
00424AEA  |.  E8 A1F4FFFF   CALL VideoCon.00423F90          
00424AEF  |.  8845 FD       MOV BYTE PTR SS:[EBP-3],AL      ; 2.AL=32
00424AF2  |.  6A 02         PUSH 2                          ; /Arg1 = 00000002
00424AF4  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424AF7  |.  83C1 74       ADD ECX,74                      
00424AFA  |.  E8 91F4FFFF   CALL VideoCon.00423F90          
00424AFF  |.  8845 F6       MOV BYTE PTR SS:[EBP-A],AL      ; 3.AL=33
00424B02  |.  6A 03         PUSH 3                          ; /Arg1 = 00000003
00424B04  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424B07  |.  83C1 74       ADD ECX,74                      
00424B0A  |.  E8 81F4FFFF   CALL VideoCon.00423F90          
00424B0F  |.  8845 F5       MOV BYTE PTR SS:[EBP-B],AL      ; 4.AL=34
00424B12  |.  6A 04         PUSH 4                          ; /Arg1 = 00000004
00424B14  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424B17  |.  83C1 74       ADD ECX,74                      
00424B1A  |.  E8 71F4FFFF   CALL VideoCon.00423F90          
00424B1F  |.  8845 F9       MOV BYTE PTR SS:[EBP-7],AL      ; 5.AL=35
00424B22  |.  6A 05         PUSH 5                          ; /Arg1 = 00000005
00424B24  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424B27  |.  83C1 74       ADD ECX,74                      
00424B2A  |.  E8 61F4FFFF   CALL VideoCon.00423F90          
00424B2F  |.  8845 F7       MOV BYTE PTR SS:[EBP-9],AL      ; 6.AL=36
00424B32  |.  6A 06         PUSH 6                          ; /Arg1 = 00000006
00424B34  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424B37  |.  83C1 74       ADD ECX,74                      
00424B3A  |.  E8 51F4FFFF   CALL VideoCon.00423F90          
00424B3F  |.  8845 FE       MOV BYTE PTR SS:[EBP-2],AL      ; 7.AL=37
00424B42  |.  6A 07         PUSH 7                          ; /Arg1 = 00000007
00424B44  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]   
00424B47  |.  83C1 74       ADD ECX,74                      
00424B4A  |.  E8 41F4FFFF   CALL VideoCon.00423F90          
00424B4F  |.  8845 FB       MOV BYTE PTR SS:[EBP-5],AL      ; 8.AL=38
---------------------------------------------------------
真码与测试码前五位相对应的逐位比较(第一环节)

00424B52  |.  0FB655 EF     MOVZX EDX,BYTE PTR SS:[EBP-11]   ;  00424A4D: ...[EBP-11]-->7-十进制
00424B56  |.  0FB645 FC     MOVZX EAX,BYTE PTR SS:[EBP-4]    ;  00424ADF: ...[EBP-4]-->31-十六进制(ASCII码)
00424B5A  |.  83E8 30       SUB EAX,30                       ;  ASCII码减30转换为十进制数
00424B5D  |.  3BD0          CMP EDX,EAX                      ;  edx 为真码,eax为测试码,均十进制,比较
00424B5F      74 3C         JNE SHORT VideoCon.00424B9D      ;  不等则跳至下一节比较,以下类推(这里可爆破)
00424B61  |.  0FB64D F8     MOVZX ECX,BYTE PTR SS:[EBP-8]
00424B65  |.  0FB655 FD     MOVZX EDX,BYTE PTR SS:[EBP-3]
00424B69  |.  83EA 30       SUB EDX,30
00424B6C  |.  3BCA          CMP ECX,EDX                      ;  ecx为真码,edx为测试码
00424B6E      74 2D         JNE SHORT VideoCon.00424B9D      
00424B74  |.  0FB64D F6     MOVZX ECX,BYTE PTR SS:[EBP-A]
00424B78  |.  83E9 30       SUB ECX,30
00424B7B  |.  3BC1          CMP EAX,ECX                      ;  eax为真码,ecx为测试码
00424B7D      74 1E         JNE SHORT VideoCon.00424B9D      
00424B7F  |.  0FB655 FA     MOVZX EDX,BYTE PTR SS:[EBP-6]
00424B83  |.  0FB645 F5     MOVZX EAX,BYTE PTR SS:[EBP-B]
00424B87  |.  83E8 30       SUB EAX,30
00424B8A  |.  3BD0          CMP EDX,EAX                      ;  edx为真码,eax为测试码
00424B8C      74 0F         JNE SHORT VideoCon.00424B9D        
00424B8E  |.  0FB64D F4     MOVZX ECX,BYTE PTR SS:[EBP-C]
00424B92  |.  0FB655 F9     MOVZX EDX,BYTE PTR SS:[EBP-7]
00424B96  |.  83EA 30       SUB EDX,30
00424B99  |.  3BCA          CMP ECX,EDX                     ;  ecx为真码,edx为测试码
00424B9B      74 58         JE SHORT VideoCon.00424BF5      ;  相等则跳至注册成功
--------------------------------------------------------
前面比较不等时跳至这里再次比较,实际上这里是一组不随注册名改变的万能注册码(第二环节)

00424B9D  |>  0FB645 FC     MOVZX EAX,BYTE PTR SS:[EBP-4]   ;  第一环节不等时跳至此另行比较
00424BA1  |.  83F8 35       CMP EAX,35                      ;  35 是十进制数 5 的 ASCII 码
00424BA4      0F85 A7000000 JNZ VideoCon.00424C51           ;  不等则跳至注册失败,以下类推(这里可爆破)
00424BAA  |.  0FB64D FD     MOVZX ECX,BYTE PTR SS:[EBP-3]
00424BAE  |.  83F9 31       CMP ECX,31
00424BB1      0F85 9A000000 JNZ VideoCon.00424C51
00424BB7  |.  0FB655 F6     MOVZX EDX,BYTE PTR SS:[EBP-A]
00424BBB  |.  83FA 38       CMP EDX,38
00424BBE      0F85 8D000000 JNZ VideoCon.00424C51
00424BC4  |.  0FB645 F5     MOVZX EAX,BYTE PTR SS:[EBP-B]
00424BC8  |.  83F8 39       CMP EAX,39
00424BCB      0F85 80000000 JNZ VideoCon.00424C51
00424BD1  |.  0FB64D F9     MOVZX ECX,BYTE PTR SS:[EBP-7]
00424BD5  |.  83F9 37       CMP ECX,37
00424BD8      75 77         JNZ SHORT VideoCon.00424C51
00424BDA  |.  0FB655 F7     MOVZX EDX,BYTE PTR SS:[EBP-9]
00424BDE  |.  83FA 36       CMP EDX,36
00424BE1      75 6E         JNZ SHORT VideoCon.00424C51
00424BE3  |.  0FB645 FE     MOVZX EAX,BYTE PTR SS:[EBP-2]
00424BE7  |.  83F8 32       CMP EAX,32
00424BEA      75 65         JNZ SHORT VideoCon.00424C51
00424BEC  |.  0FB64D FB     MOVZX ECX,BYTE PTR SS:[EBP-5]
00424BF0  |.  83F9 39       CMP ECX,39
00424BF3  |.  75 5C         JNZ SHORT VideoCon.00424C51     ;  不跳则注册成功
----------------------------------------------------
顺着往下运行则注册成功

00424BF5  |>  6A 00         PUSH 0
00424BF7  |.  6A 00         PUSH 0
00424BF9  |.  68 74034600   PUSH VideoCon.00460374          ;  ASCII "注册成功!"
00424BFE  |.  E8 6CBF0200   CALL VideoCon.00450B6F
00424C03  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
00424C06  |.  83C1 70       ADD ECX,70
00424C09  |.  E8 62F4FFFF   CALL VideoCon.00424070
00424C0E  |.  50            PUSH EAX
00424C0F  |.  68 90034600   PUSH VideoCon.00460390          
00424C14  |.  68 9C034600   PUSH VideoCon.0046039C          
00424C19  |.  E8 A295FEFF   CALL VideoCon.0040E1C0
00424C1E  |.  8BC8          MOV ECX,EAX                     
00424C20  |.  E8 AABC0200   CALL VideoCon.004508CF          
00424C25  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
00424C28  |.  83C1 74       ADD ECX,74
00424C2B  |.  E8 40F4FFFF   CALL VideoCon.00424070
00424C30  |.  50            PUSH EAX
00424C31  |.  68 A4034600   PUSH VideoCon.004603A4          
00424C36  |.  68 B8034600   PUSH VideoCon.004603B8          
00424C3B  |.  E8 8095FEFF   CALL VideoCon.0040E1C0
00424C40  |.  8BC8          MOV ECX,EAX                     
00424C42  |.  E8 88BC0200   CALL VideoCon.004508CF          
00424C47  |.  8B4D E0       MOV ECX,DWORD PTR SS:[EBP-20]
00424C4A  |.  E8 87620200   CALL VideoCon.0044AED6
00424C4F  |.  EB 0E         JMP SHORT VideoCon.00424C5F
00424C51  |>  6A 00         PUSH 0                          ;  第二环节注册码比较,不等时跳至此
00424C53  |.  6A 00         PUSH 0
00424C55  |.  68 C0034600   PUSH VideoCon.004603C0          ;  ASCII "注册失败!"
00424C5A  |.  E8 10BF0200   CALL VideoCon.00450B6F
00424C5F  |>  8BE5          MOV ESP,EBP                     ;  注册名、注册码位数不合乎要求时跳至此
00424C61  |.  5D            POP EBP
00424C62  \.  C3            RETN

--------------------------------------------------------------------------------
    分析了上述过程以后,我们可以归纳一下:
    1.要求注册名不小于2位,注册码不小于8位,前五位为阿拉伯数字;
    2.第一环节注册过程中只比较了注册码的前五位,显然余下的几位可以是任意数字;
    3.第二环节注册过程中的 8 个常数实际上是一个不随注册名变化的注册码的 ASCII 值,其十进制值为:51897629,这就是传说中的万能注册码;
    4.注册码的算法过程已经了然,因为在下不会编程,所以算法注册机无法奉上,但软件作者顾及到我等菜鸟,预备了一个万能码,算是一个安慰吧。
        
       注册名:abcdef  注册码:78597xxx...或
       注册名:xxxxxx  注册码:51897629...
              (x 为任意字符,包括汉字)

请弟兄们不吝赐教!
--------------------------------------------------------------------------------

【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!