首页
社区
课程
招聘
KeyGenMe2007_C简单算法分析+VB注册机源码
发表于: 2007-6-13 13:57 8962

KeyGenMe2007_C简单算法分析+VB注册机源码

2007-6-13 13:57
8962

【破文标题】KeyGenMe2007_C简单算法分析+VB注册机源码
【破解作者】hrbx
【作者主页】hrbx.ys168.com
【作者邮箱】hrbx@163.com
【破解平台】WinXP
【使用工具】flyOD1.10、Peid
【破解日期】2007-06-13
【软件名称】KeyGenMe2007_C
【软件大小】67KB
【下载地址】http://bbs.chinapyg.com/viewthread.php?tid=16561
【加壳方式】UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo
【软件简介】KeyGenMe2007_C[WWW.CHINAPYG.COM]
-----------------------------------------------------------------------------------------------
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
-----------------------------------------------------------------------------------------------
【破解过程】
1.脱壳。用Peid扫描程序,显示为:UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo。ESP定律脱之,再次用Peid核心扫描,显示为:Microsoft Visual C++ 6.0。
2.试运行。运行程序,输入注册信息后,点"OK"按钮没有任何提示。
3.追出算法。OD载入脱壳后的程序,F9运行,输入注册信息:

====================================================
RegName:hrbx
RegCode:9876543210
====================================================

转到OD,ALT+M,右键--搜索,输入注册名:hrbx,找到后右键--断点--内存访问,回到程序,点"OK"按钮,立即中断:

77D32169     881F               mov byte ptr ds:[edi],bl                   ; 内存访问后中断在这里
77D3216B     8B4D 08            mov ecx,dword ptr ss:[ebp+8]
77D3216E     E8 6D63FEFF        call USER32.77D184E0
77D32173     8BF0               mov esi,eax

F8往下, 走回程序领空,来到:

00402490     56                 push esi
00402491     8BF1               mov esi,ecx
00402493     6A 01              push 1
00402495     E8 585D0000        call <jmp.&MFC42.#6334_CWnd::UpdateData>
0040249A     74 03              je short Unpacked.0040249F                 ; F8返回这里
0040249C     75 01              jnz short Unpacked.0040249F
0040249E     68 8B862C01        push 12C868B
004024A3     0000               add byte ptr ds:[eax],al
004024A5     8378 F8 2D         cmp dword ptr ds:[eax-8],2D                ; 比较注册码长度是否为0x2D(45)
004024A9     0F85 FF000000      jnz Unpacked.004025AE                      ; 不等则Over,暴破点1,改为Nop
004024AF     74 03              je short Unpacked.004024B4
004024B1     75 01              jnz short Unpacked.004024B4
004024B3     68 EB01858B        push 8B8501EB
004024B8     8E2C01             mov gs,word ptr ds:[ecx+eax]
004024BB     0000               add byte ptr ds:[eax],al                   ; 依次取注册码特定位置的字符运算
004024BD     8A41 06            mov al,byte ptr ds:[ecx+6]                 ; 第7位
004024C0     8A51 05            mov dl,byte ptr ds:[ecx+5]                 ; 第6位
004024C3     33C2               xor eax,edx                                ; 第7位 xor 第6位
004024C5     0FBE51 07          movsx edx,byte ptr ds:[ecx+7]              ; 第8位
004024C9     83E0 7F            and eax,7F                                 ; (第7位 xor 第6位)and 0x7F
004024CC     0FBE49 04          movsx ecx,byte ptr ds:[ecx+4]              ; 第5位
004024D0     0FAFC2             imul eax,edx                               ; ((第7位 xor 第6位)and 0x7F)*第8位
004024D3     03C1               add eax,ecx                                ; ((第7位 xor 第6位)and 0x7F)*第8位+第5位
004024D5     B9 6B000000        mov ecx,6B                                 ; ECX=0x6B,常数1
004024DA     99                 cdq
004024DB     F7F9               idiv ecx                                   ; EAX/ECX
004024DD     85D2               test edx,edx                               ; EDX=余数
004024DF     0F85 C9000000      jnz Unpacked.004025AE                      ; 不能整除则Over,暴破点2,改为Nop
004024E5     74 03              je short Unpacked.004024EA
004024E7     75 01              jnz short Unpacked.004024EA
004024E9     68 74037501        push 1750374
004024EE     68 EB0185EB        push EB8501EB
004024F3     0185 8B8E2C01      add dword ptr ss:[ebp+12C8E8B],eax
004024F9     0000               add byte ptr ds:[eax],al
004024FB     0FBE41 0A          movsx eax,byte ptr ds:[ecx+A]              ; 第11位
004024FF     0FBE51 09          movsx edx,byte ptr ds:[ecx+9]              ; 第10位
00402503     23C2               and eax,edx                                ; 第11位 and 第10位
00402505     0FBE51 0B          movsx edx,byte ptr ds:[ecx+B]              ; 第12位
00402509     0FBE49 08          movsx ecx,byte ptr ds:[ecx+8]              ; 第9位
0040250D     0FAFC2             imul eax,edx                               ; (第11位 and 第10位)*第12位
00402510     03C1               add eax,ecx                                ; (第11位 and 第10位)*第12位+第9位
00402512     B9 65000000        mov ecx,65                                 ; ECX=0x65,常数2
00402517     99                 cdq
00402518     F7F9               idiv ecx                                   ; EAX/ECX
0040251A     83FA 08            cmp edx,8                                  ; EDX=余数,余数与8比较
0040251D     0F85 8B000000      jnz Unpacked.004025AE                      ; 不等则Over,暴破点3,改为Nop
00402523     EB 01              jmp short Unpacked.00402526
00402525     85EB               test ebx,ebp
00402527     0185 8B8E2C01      add dword ptr ss:[ebp+12C8E8B],eax
0040252D     0000               add byte ptr ds:[eax],al
0040252F     0FBE41 0E          movsx eax,byte ptr ds:[ecx+E]              ; 第15位
00402533     0FBE51 0D          movsx edx,byte ptr ds:[ecx+D]              ; 第14位
00402537     0FAFC2             imul eax,edx                               ; 第15位 * 第14位
0040253A     0FBE51 0F          movsx edx,byte ptr ds:[ecx+F]              ; 第16位
0040253E     0FBE49 0C          movsx ecx,byte ptr ds:[ecx+C]              ; 第13位
00402542     03C2               add eax,edx                                ; (第15位 * 第14位)+第16位
00402544     03C1               add eax,ecx                                ; (第15位 * 第14位)+第16位+第13位
00402546     B9 69000000        mov ecx,69                                 ; ECX=0x69,常数3
0040254B     99                 cdq
0040254C     F7F9               idiv ecx                                   ; EAX/ECX
0040254E     85D2               test edx,edx                               ; EDX=余数
00402550     75 5C              jnz short Unpacked.004025AE                ; 不能整除则Over,暴破点4,改为Nop
00402552     74 03              je short Unpacked.00402557
00402554     75 01              jnz short Unpacked.00402557
00402556     68 EB01858B        push 8B8501EB
0040255B     8E2C01             mov gs,word ptr ds:[ecx+eax]
0040255E     0000               add byte ptr ds:[eax],al
00402560     0FBE41 12          movsx eax,byte ptr ds:[ecx+12]             ; 第19位
00402564     0FBE51 11          movsx edx,byte ptr ds:[ecx+11]             ; 第18位
00402568     0BC2               or eax,edx                                 ; 第19位 or 第18位
0040256A     0FBE51 13          movsx edx,byte ptr ds:[ecx+13]             ; 第20位
0040256E     0FBE49 10          movsx ecx,byte ptr ds:[ecx+10]             ; 第17位
00402572     0FAFC2             imul eax,edx                               ; (第19位 or 第18位)*第20位
00402575     03C1               add eax,ecx                                ; (第19位 or 第18位)*第20位+第17位
00402577     B9 69000000        mov ecx,69                                 ; ECX=0x69,常数3
0040257C     99                 cdq
0040257D     F7F9               idiv ecx                                   ; EAX/ECX
0040257F     85D2               test edx,edx                               ; EDX=余数
00402581     75 2B              jnz short Unpacked.004025AE                ; 不能整除则Over,暴破点5,改为Nop
00402583     EB 01              jmp short Unpacked.00402586                ; 在此处按Enter
00402585     8581 7E60CB4B      test dword ptr ds:[ecx+4BCB607E],eax
0040258B     A4                 movs byte ptr es:[edi],byte ptr ds:[esi]
0040258C     0D 74187403        or eax,3741874
00402591     75 01              jnz short Unpacked.00402594
00402593     68 8BCEE855        push 55E8CE8B
00402598     0300               add eax,dword ptr ds:[eax]
0040259A     00EB               add bl,ch
0040259C     0185 8BCEE80B      add dword ptr ss:[ebp+BE8CE8B],eax
004025A2     04 00              add al,0
004025A4     00EB               add bl,ch
004025A6     07                 pop es
004025A7     8BCE               mov ecx,esi
004025A9     E8 42020000        call Unpacked.004027F0
004025AE     8B56 20            mov edx,dword ptr ds:[esi+20]
004025B1     6A 01              push 1
004025B3     52                 push edx
004025B4     FF15 2C934000      call dword ptr ds:[<&USER32.KillTimer>]    ; USER32.KillTimer
004025BA     6A 00              push 0
004025BC     8BCE               mov ecx,esi
004025BE     E8 2F5C0000        call <jmp.&MFC42.#6334_CWnd::UpdateData>
004025C3     5E                 pop esi
004025C4     C3                 retn

由于程序有花指令干扰,调试时应注意。
调试到00402583处,直接按Enter,来到00402586处:

00402586     817E 60 CB4BA40D   cmp dword ptr ds:[esi+60],0DA44BCB         ; 比较ds:[esi+60]处的值与0DA44BCB是否相等
0040258D     74 18              je short Unpacked.004025A7                 ; 不等则Over,暴破点6,改为jmp
0040258F     74 03              je short Unpacked.00402594
00402591     75 01              jnz short Unpacked.00402594
00402593     68 8BCEE855        push 55E8CE8B

看一下程序是在什么地方给ds:[esi+60]处赋值的。
修改上面几处暴破点的跳转,来到00402586处,观察窗口提示:

==================================
堆栈 ds:[0012FE20]=0001E240
==================================

命令栏输入:d 0012fe20,对0012fe20处下断:右键--断点--设置硬件访问断点-Byte(不能下"内存访问"断点,否则会异常)
F9运行程序,弹出2个伪注册成功提示窗体,确定后随便更改一下用户名,立即中断:

004027B0     56                 push esi
004027B1     8BF1               mov esi,ecx
004027B3     6A 01              push 1
004027B5     E8 385A0000        call <jmp.&MFC42.#6334_CWnd::UpdateData>
004027BA     8B86 30010000      mov eax,dword ptr ds:[esi+130]             ; 用户名
004027C0     8378 F8 05         cmp dword ptr ds:[eax-8],5                 ; 用户名长度与5比较
004027C4     7C 1E              jl short Unpacked.004027E4                 ; 小于则跳至004027E4
004027C6     8B8E 2C010000      mov ecx,dword ptr ds:[esi+12C]             ; 注册码
004027CC     8379 F8 2D         cmp dword ptr ds:[ecx-8],2D                ; 注册码长度与0x2D(45)比较
004027D0     75 12              jnz short Unpacked.004027E4                ; 不相等则跳至004027E4
004027D2     8B56 20            mov edx,dword ptr ds:[esi+20]
004027D5     6A 00              push 0
004027D7     6A 0A              push 0A
004027D9     6A 01              push 1
004027DB     52                 push edx
004027DC     FF15 30934000      call dword ptr ds:[<&USER32.SetTimer>]     ; USER32.SetTimer
004027E2     5E                 pop esi
004027E3     C3                 retn
004027E4     C746 60 40E20100   mov dword ptr ds:[esi+60],1E240            ; 对ds:[esi+60]处赋值0x1E240
004027EB     5E                 pop esi                                    ; 下硬件访问断点后在此中断
004027EC     C3                 retn

由以上代码可知,用户名必须不小于5位,注册码必须为0x2D(45)位,否则对对ds:[esi+60]处赋值0x1E240。

确定0012fe20处的"硬件访问断点"没有删除,继续F9运行程序,来到:

00402637     55                 push ebp                                   ; 继续F9运行程序后在此中断
00402638     56                 push esi
00402639     8DB3 30010000      lea esi,dword ptr ds:[ebx+130]
0040263F     6A 01              push 1

向上查找,来到004025D0处F2下断,继续F9运行,中断:

004025D0     64:A1 00000000     mov eax,dword ptr fs:[0]                   ; F2在此下断
004025D6     6A FF              push -1
004025D8     68 00874000        push Unpacked.00408700
004025DD     50                 push eax
004025DE     64:8925 00000000   mov dword ptr fs:[0],esp
004025E5     83EC 20            sub esp,20
004025E8     53                 push ebx
004025E9     57                 push edi
004025EA     8BD9               mov ebx,ecx
004025EC     6A 01              push 1
004025EE     E8 FF5B0000        call <jmp.&MFC42.#6334_CWnd::UpdateData>
004025F3     8B83 2C010000      mov eax,dword ptr ds:[ebx+12C]             ; 注册码
004025F9     8DBB 2C010000      lea edi,dword ptr ds:[ebx+12C]
004025FF     8A08               mov cl,byte ptr ds:[eax]                   ; 注册码第1位
00402601     80F9 50            cmp cl,50                                  ; 注册码第1位与0x50('P')比较
00402604     75 2A              jnz short Unpacked.00402630
00402606     8078 01 59         cmp byte ptr ds:[eax+1],59                 ; 注册码第2位与0x59('Y')比较
0040260A     75 24              jnz short Unpacked.00402630
0040260C     8078 02 47         cmp byte ptr ds:[eax+2],47                 ; 注册码第3位与0x47('G')比较
00402610     75 1E              jnz short Unpacked.00402630
00402612     8078 03 2D         cmp byte ptr ds:[eax+3],2D                 ; 注册码第4位与0x2D('-')比较
00402616     75 18              jnz short Unpacked.00402630
00402618     C743 60 B30D2F01   mov dword ptr ds:[ebx+60],12F0DB3
0040261F     8A48 2C            mov cl,byte ptr ds:[eax+2C]                ; 注册码第0x2D(45)位
00402622     80F9 20            cmp cl,20                                  ; 注册码第45位与0x20(' ')比较
00402625     75 10              jnz short Unpacked.00402637
00402627     C743 60 DA7D720C   mov dword ptr ds:[ebx+60],0C727DDA         ; 相等则对ds:[esi+60]处赋值0x0C727DDA
0040262E     EB 07              jmp short Unpacked.00402637
00402630     C743 60 F1CD3101   mov dword ptr ds:[ebx+60],131CDF1
00402637     55                 push ebp                                   ; 在此中断
00402638     56                 push esi
00402639     8DB3 30010000      lea esi,dword ptr ds:[ebx+130]
0040263F     6A 01              push 1                                    
00402641     8D4424 30          lea eax,dword ptr ss:[esp+30]
00402645     6A 00              push 0                                     ; 常数-0
00402647     50                 push eax
00402648     8BCE               mov ecx,esi
0040264A     E8 A95B0000        call <jmp.&MFC42.#4278_CString::Mid>       ; 取用户名第1位
0040264F     8BE8               mov ebp,eax
00402651     6A 01              push 1
00402653     8D4C24 2C          lea ecx,dword ptr ss:[esp+2C]
00402657     6A 14              push 14                                    ; 常数-0x14
00402659     51                 push ecx
0040265A     8BCF               mov ecx,edi
0040265C     C74424 44 00000000 mov dword ptr ss:[esp+44],0
00402664     E8 8F5B0000        call <jmp.&MFC42.#4278_CString::Mid>       ; 取注册码第21位
00402669     8B6D 00            mov ebp,dword ptr ss:[ebp]
0040266C     8B00               mov eax,dword ptr ds:[eax]
0040266E     55                 push ebp
0040266F     8B2D D8924000      mov ebp,dword ptr ds:[<&msvcrt._mbscmp>]   ; 比较是否相等
00402675     50                 push eax
00402676     C64424 40 01       mov byte ptr ss:[esp+40],1
0040267B     FFD5               call ebp
0040267D     83C4 08            add esp,8
00402680     85C0               test eax,eax
00402682     0F85 BB000000      jnz Unpacked.00402743                      ; 不等则Over
00402688     6A 01              push 1
0040268A     8D5424 20          lea edx,dword ptr ss:[esp+20]
0040268E     6A 02              push 2                                     ; 常数-2
00402690     52                 push edx
00402691     8BCE               mov ecx,esi
00402693     E8 605B0000        call <jmp.&MFC42.#4278_CString::Mid>       ; 取用户名第3位
00402698     894424 14          mov dword ptr ss:[esp+14],eax
0040269C     6A 01              push 1
0040269E     8D4424 1C          lea eax,dword ptr ss:[esp+1C]
004026A2     6A 19              push 19                                    ; 常数-0x19
004026A4     50                 push eax
004026A5     8BCF               mov ecx,edi
004026A7     C64424 44 02       mov byte ptr ss:[esp+44],2
004026AC     E8 475B0000        call <jmp.&MFC42.#4278_CString::Mid>       ; 取注册码第26位
004026B1     8B4C24 14          mov ecx,dword ptr ss:[esp+14]
004026B5     8B00               mov eax,dword ptr ds:[eax]
004026B7     8B09               mov ecx,dword ptr ds:[ecx]
004026B9     51                 push ecx
004026BA     50                 push eax
004026BB     FFD5               call ebp                                   ; 比较是否相等
004026BD     83C4 08            add esp,8
004026C0     8D4C24 18          lea ecx,dword ptr ss:[esp+18]
004026C4     85C0               test eax,eax
004026C6     0F944424 13        sete byte ptr ss:[esp+13]
004026CB     E8 48590000        call <jmp.&MFC42.#800_CString::~CString>
004026D0     8D4C24 1C          lea ecx,dword ptr ss:[esp+1C]
004026D4     C64424 38 01       mov byte ptr ss:[esp+38],1
004026D9     E8 3A590000        call <jmp.&MFC42.#800_CString::~CString>
004026DE     8A4424 13          mov al,byte ptr ss:[esp+13]
004026E2     84C0               test al,al
004026E4     74 5D              je short Unpacked.00402743                 ; 不等则Over
004026E6     6A 01              push 1
004026E8     8D5424 28          lea edx,dword ptr ss:[esp+28]
004026EC     6A 04              push 4                                     ; 常数-4
004026EE     52                 push edx
004026EF     8BCE               mov ecx,esi
004026F1     E8 025B0000        call <jmp.&MFC42.#4278_CString::Mid>       ; 取用户名第5位
004026F6     8BF0               mov esi,eax
004026F8     6A 01              push 1
004026FA     8D4424 24          lea eax,dword ptr ss:[esp+24]
004026FE     6A 24              push 24                                    ; 常数-0x24
00402700     50                 push eax
00402701     8BCF               mov ecx,edi
00402703     C64424 44 03       mov byte ptr ss:[esp+44],3
00402708     E8 EB5A0000        call <jmp.&MFC42.#4278_CString::Mid>       ; 取注册码第37位
0040270D     8B36               mov esi,dword ptr ds:[esi]
0040270F     8B00               mov eax,dword ptr ds:[eax]
00402711     56                 push esi
00402712     50                 push eax
00402713     FFD5               call ebp                                   ; 比较是否相等
00402715     83C4 08            add esp,8
00402718     8D4C24 20          lea ecx,dword ptr ss:[esp+20]
0040271C     85C0               test eax,eax
0040271E     0F944424 13        sete byte ptr ss:[esp+13]
00402723     E8 F0580000        call <jmp.&MFC42.#800_CString::~CString>
00402728     8D4C24 24          lea ecx,dword ptr ss:[esp+24]
0040272C     C64424 38 01       mov byte ptr ss:[esp+38],1
00402731     E8 E2580000        call <jmp.&MFC42.#800_CString::~CString>
00402736     8A4424 13          mov al,byte ptr ss:[esp+13]
0040273A     C64424 13 01       mov byte ptr ss:[esp+13],1
0040273F     84C0               test al,al
00402741     75 05              jnz short Unpacked.00402748
00402743     C64424 13 00       mov byte ptr ss:[esp+13],0
00402748     8D4C24 28          lea ecx,dword ptr ss:[esp+28]
0040274C     C64424 38 00       mov byte ptr ss:[esp+38],0
00402751     E8 C2580000        call <jmp.&MFC42.#800_CString::~CString>
00402756     8D4C24 2C          lea ecx,dword ptr ss:[esp+2C]
0040275A     C74424 38 FFFFFFFF mov dword ptr ss:[esp+38],-1
00402762     E8 B1580000        call <jmp.&MFC42.#800_CString::~CString>
00402767     8A4424 13          mov al,byte ptr ss:[esp+13]
0040276B     5E                 pop esi
0040276C     84C0               test al,al
0040276E     8B43 60            mov eax,dword ptr ds:[ebx+60]
00402771     5D                 pop ebp
00402772     74 07              je short Unpacked.0040277B                 ; 不等则Over
00402774     05 F1CD3101        add eax,131CDF1                            ; 若相等,则EAX=EAX+0x131CDF1
00402779     EB 05              jmp short Unpacked.00402780
0040277B     05 A25D4F00        add eax,4F5DA2
00402780     8BCB               mov ecx,ebx
00402782     8943 60            mov dword ptr ds:[ebx+60],eax              ; 将EAX的值存入ds:[esi+60]处
00402785     E8 D6580000        call <jmp.&MFC42.#2379_CWnd::Default>
0040278A     6A 00              push 0
0040278C     8BCB               mov ecx,ebx
0040278E     E8 5F5A0000        call <jmp.&MFC42.#6334_CWnd::UpdateData>
00402793     8B4C24 28          mov ecx,dword ptr ss:[esp+28]
00402797     5F                 pop edi
00402798     5B                 pop ebx
00402799     64:890D 00000000   mov dword ptr fs:[0],ecx
004027A0     83C4 2C            add esp,2C
004027A3     C2 0400            retn 4

通过以上代码可知:若用户名和注册码之间的关系符合以上要求,则EAX=0x0C727DDA+0x131CDF1=0x0DA44BCB,
然后将EAX的值存入ds:[esi+60]处,那么在00402586处对ds:[esi+60]的值和0x0DA44BCB比较则相等。

-----------------------------------------------------------------------------------------------
【破解总结】
1.程序不太好下断点。通过调试知道,载入程序后,Ctrl+N,

=================================================================
004091F4     UPX0        导入       MFC42.#6334_CWnd::UpdateData
=================================================================

找到后下断,输入注册信息,中断后程序会异常,堆栈提示:

=================================================================
返回到 Unpacked.004027BA 来自 <jmp.&MFC42.#6334_CWnd::UpdateData>
=================================================================

根据堆栈提示也可以找到关键点。

2.用户名必须不小于5位,注册码必须为0x2D(45)位。
3.注册码前4位必须为:"PYG-",最后一位必须为" "(空格)
  注册码第21位必须=用户名第1位
  注册码第26位必须=用户名第3位
  注册码第37位必须=用户名第5位
4.注册码(((第7位 xor 第6位)and 0x7F)*第8位+第5位)除以0x6B,余数必须为0
  注册码((第11位 and 第10位)*第12位+第9位)除以0x65,余数必须为8
  注册码((第15位 * 第14位)+第16位+第13位)除以0x69,余数必须为0
  注册码((第19位 or 第18位)*第20位+第17位)除以0x69,余数必须为0
一组可用注册信息:

====================================================
RegName:hrbxhui
RegCode:PYG-aAj2&m93MRcdKhPHhPzFEbXbfVyH8pTWhuTYo2Qg
====================================================

暴破更改以下位置:

004024A9          jnz Unpacked.004025AE                      ; jnz====>NOP
004024DF          jnz Unpacked.004025AE                      ; jnz====>NOP
0040251D          jnz Unpacked.004025AE                      ; jnz====>NOP
00402550          jnz short Unpacked.004025AE                ; jnz====>NOP
00402581          jnz short Unpacked.004025AE                ; jnz====>NOP
0040258D          je short Unpacked.004025A7                 ; je=====>jmp

【VB注册机源码】

'// 取得随机字符串
Public Function GetRndString(ByVal lngNum As Long) As String
If lngNum <= 0 Then Exit Function

Dim i As Long
Dim intLength As Integer
Const STRINGSOURCE = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
intLength = Len(STRINGSOURCE) - 1

For i = 1 To lngNum
    Randomize
    GetRndString = GetRndString & Mid(STRINGSOURCE, Int(Rnd * intLength + 1), 1)
Next
End Function

Private Sub btnGenerate_Click(ByVal ClickReason As b2kClickReason)

Dim RegName As String
Dim RegCode As String
Dim TmpStr As String
Dim Str1 As String
Dim Str2 As String
Dim Str3 As String
Dim Str4 As String
Dim Num1 As Integer
Dim Num2 As Integer
Dim Num3 As Integer
Dim Num4 As Integer

On Error Resume Next
If Len(Text1.Text) < 5 Then
     Text2.Text = "用户名长度太短!"
Else
    Str1 = " "
    Str2 = " "
    Str3 = " "
    Str4 = " "
    RegName = Text1.Text

    Do While (Asc(Str1) < &H21 Or Asc(Str2) < &H21 Or Asc(Str3) < &H21 Or Asc(Str4) < &H21)
        TmpStr = "PYG-" & GetRndString(16) & Mid(RegName, 1, 1) & _
                          GetRndString(4) & Mid(RegName, 3, 1) & _
                          GetRndString(10) & Mid(RegName, 5, 1) & _
                          GetRndString(7)

        Num1 = Asc(Mid(TmpStr, 6, 1))
        Num2 = Asc(Mid(TmpStr, 7, 1))
        Num3 = Asc(Mid(TmpStr, 8, 1))
        Num4 = &H6B - ((((Num1 Xor Num2) And &H7F) * Num3) Mod &H6B)
        Str1 = Chr(Num4)

        Num1 = Asc(Mid(TmpStr, 10, 1))
        Num2 = Asc(Mid(TmpStr, 11, 1))
        Num3 = Asc(Mid(TmpStr, 12, 1))
        Num4 = &H65 - (((Num1 And Num2) * Num3) Mod &H65) + 8
        Str2 = Chr(Num4)

        Num1 = Asc(Mid(TmpStr, 14, 1))
        Num2 = Asc(Mid(TmpStr, 15, 1))
        Num3 = Asc(Mid(TmpStr, 16, 1))
        Num4 = &H69 - ((Num1 * Num2 + Num3) Mod &H69)
        Str3 = Chr(Num4)

        Num1 = Asc(Mid(TmpStr, 18, 1))
        Num2 = Asc(Mid(TmpStr, 19, 1))
        Num3 = Asc(Mid(TmpStr, 20, 1))
        Num4 = &H69 - (((Num1 Or Num2) * Num3) Mod &H69)
        Str4 = Chr(Num4)
    Loop

    RegCode = Mid(TmpStr, 1, 4) & Str1 & _
          Mid(TmpStr, 6, 3) & Str2 & _
          Mid(TmpStr, 10, 3) & Str3 & _
          Mid(TmpStr, 14, 3) & Str4 & Mid(TmpStr, 18, 27) & " "
    Text2 = RegCode
End If
End Sub

-----------------------------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!


[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

上传的附件:
收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
好,学习一下
2007-6-13 14:00
0
雪    币: 2319
活跃值: (565)
能力值: (RANK:300 )
在线值:
发帖
回帖
粉丝
3
把文贴在这边

我删除那个帖
2007-6-13 14:04
0
雪    币: 267
活跃值: (44)
能力值: ( LV9,RANK:330 )
在线值:
发帖
回帖
粉丝
4
麻烦riijj版主了,谢谢!:)
2007-6-13 14:10
0
雪    币: 231
活跃值: (40)
能力值: ( LV9,RANK:140 )
在线值:
发帖
回帖
粉丝
5
学习,太难了
2007-9-3 10:24
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
6
機機代碼很規范,學習ing...
2007-9-3 11:57
0
雪    币: 498
活跃值: (1557)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wxq
7
就是强,下来学习学习
2007-9-4 19:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
很强撒。学习ING
2007-9-14 13:42
0
雪    币: 200
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wgq
9
有没有写好的注册机啊
2007-11-14 21:58
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码