xx视频合并软件V2.20及同作者软件的破解、算法分析、算法注册机?
本帖最后由 H夜 于 2019-6-6 18:30 编辑今天在逛52的时候看到了下面这个帖子
[原创破解] 超级视频合并软件V2.20--内存注册机版
看了后觉得,额,找到了一个软柿子了,可以去捏一下,然后就去这个软件的官网下了几个来试一下,
想着顺便看看算法,写个注册机啥的
1、首先试的是超级视频合并软件 V2.20这个,知道没加壳的delphi的,直接拖进OD,通过字符串查找很快来到了这里
0057EAC8/.55 push ebp ;注册按钮事件
0057EAC9|.8BEC mov ebp,esp
0057EACB|.33C9 xor ecx,ecx
0057EACD|.51 push ecx
0057EACE|.51 push ecx
0057EACF|.51 push ecx
0057EAD0|.51 push ecx
0057EAD1|.51 push ecx
0057EAD2|.51 push ecx
0057EAD3|.53 push ebx
0057EAD4|.8BD8 mov ebx,eax
0057EAD6|.33C0 xor eax,eax
0057EAD8|.55 push ebp
0057EAD9|.68 4FEC5700 push VideoJoi.0057EC4F
0057EADE|.64:FF30 push dword ptr fs:
0057EAE1|.64:8920 mov dword ptr fs:,esp
0057EAE4|.8D55 FC lea edx,
0057EAE7|.8B83 04030000 mov eax,dword ptr ds:
0057EAED|.E8 72C6EEFF call VideoJoi.0046B164 ;读取用户名
0057EAF2|.8B45 FC mov eax,
0057EAF5|.E8 A25BE8FF call VideoJoi.0040469C ;取长度
0057EAFA|.85C0 test eax,eax
0057EAFC|.75 2C jnz short VideoJoi.0057EB2A ;非空
0057EAFE|.6A 40 push 0x40
0057EB00|.68 5CEC5700 push VideoJoi.0057EC5C ;提示
0057EB05|.68 64EC5700 push VideoJoi.0057EC64 ;注册名不能为空,请重新输入!
0057EB0A|.8BC3 mov eax,ebx
0057EB0C|.E8 6F2EEFFF call VideoJoi.00471980
0057EB11|.50 push eax ; |hOwner = NULL
0057EB12|.E8 258CE8FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0057EB17|.8B83 04030000 mov eax,dword ptr ds:
0057EB1D|.8B10 mov edx,dword ptr ds:
0057EB1F|.FF92 C4000000 call near dword ptr ds:
0057EB25|.E9 EA000000 jmp VideoJoi.0057EC14
0057EB2A|>8D55 F8 lea edx,
0057EB2D|.8B83 08030000 mov eax,dword ptr ds:
0057EB33|.E8 2CC6EEFF call VideoJoi.0046B164 ;假码
0057EB38|.8B45 F8 mov eax, ;kernel32.7C817080
0057EB3B|.E8 5C5BE8FF call VideoJoi.0040469C ;假码长度
0057EB40|.85C0 test eax,eax
0057EB42|.75 2C jnz short VideoJoi.0057EB70 ;非空
0057EB44|.6A 40 push 0x40
0057EB46|.68 5CEC5700 push VideoJoi.0057EC5C ;提示
0057EB4B|.68 80EC5700 push VideoJoi.0057EC80 ;注册码不能为空,请重新输入!
0057EB50|.8BC3 mov eax,ebx
0057EB52|.E8 292EEFFF call VideoJoi.00471980
0057EB57|.50 push eax ; |hOwner = NULL
0057EB58|.E8 DF8BE8FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0057EB5D|.8B83 08030000 mov eax,dword ptr ds:
0057EB63|.8B10 mov edx,dword ptr ds:
0057EB65|.FF92 C4000000 call near dword ptr ds:
0057EB6B|.E9 A4000000 jmp VideoJoi.0057EC14
0057EB70|>8D55 F0 lea edx,
0057EB73|.8B83 08030000 mov eax,dword ptr ds:
0057EB79|.E8 E6C5EEFF call VideoJoi.0046B164 ;读取假码
0057EB7E|.8B45 F0 mov eax,
0057EB81|.8D55 F4 lea edx,
0057EB84|.E8 BBA4E8FF call VideoJoi.00409044 ;不知干什么的,去掉空字符
0057EB89|.8B45 F4 mov eax, ;kernel32.7C839AD8
0057EB8C|.50 push eax
0057EB8D|.8D55 E8 lea edx,
0057EB90|.8B83 04030000 mov eax,dword ptr ds:
0057EB96|.E8 C9C5EEFF call VideoJoi.0046B164 ;读取用户名
0057EB9B|.8B45 E8 mov eax,
0057EB9E|.8D55 EC lea edx,
0057EBA1|.E8 9EA4E8FF call VideoJoi.00409044 ;同上处理,去掉空字符
0057EBA6|.8B55 EC mov edx,
0057EBA9|.A1 A8C65900 mov eax,dword ptr ds:
0057EBAE|.8B00 mov eax,dword ptr ds:
0057EBB0|.8B80 74040000 mov eax,dword ptr ds:
0057EBB6|.59 pop ecx ;kernel32.7C817077
0057EBB7|.E8 3823F6FF call VideoJoi.004E0EF4 ;/////可疑1,写注册表的
0057EBBC|.A1 A8C65900 mov eax,dword ptr ds:
0057EBC1|.8B00 mov eax,dword ptr ds:
0057EBC3|.8B80 74040000 mov eax,dword ptr ds:
0057EBC9|.E8 C622F6FF call VideoJoi.004E0E94 ;/////可疑2,算法&比较
0057EBCE|.84C0 test al,al
0057EBD0 75 29 jnz short VideoJoi.0057EBFB ;好明显的关键跳
0057EBD2|.6A 40 push 0x40
0057EBD4|.68 5CEC5700 push VideoJoi.0057EC5C ;提示
0057EBD9|.68 9CEC5700 push VideoJoi.0057EC9C ;注册码不正确,请检查注册码是否输错!
0057EBDE|.8BC3 mov eax,ebx
0057EBE0|.E8 9B2DEFFF call VideoJoi.00471980
0057EBE5|.50 push eax ; |hOwner = NULL
0057EBE6|.E8 518BE8FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
0057EBEB|.8B83 08030000 mov eax,dword ptr ds:
0057EBF1|.8B10 mov edx,dword ptr ds:
0057EBF3|.FF92 C4000000 call near dword ptr ds:
0057EBF9|.EB 19 jmp short VideoJoi.0057EC14
0057EBFB|>6A 40 push 0x40
0057EBFD|.68 5CEC5700 push VideoJoi.0057EC5C ;提示
0057EC02|.68 C0EC5700 push VideoJoi.0057ECC0 ;注册成功,您现在可以退出注册窗体了!
0057EC07|.8BC3 mov eax,ebx
0057EC09|.E8 722DEFFF call VideoJoi.00471980
0057EC0E|.50 push eax ; |hOwner = NULL
0057EC0F|.E8 288BE8FF call <jmp.&user32.MessageBoxA> ; \MessageBoxA
很容易可以发现0057EBD0这行是关键的跳转,通过一一排除确定0057EBC9这行是关键call
0057EBC9|.E8 C622F6FF call VideoJoi.004E0E94 ;/////关键call,算法&比较
F7进入这个call,来到这里:
004E0E94/$55 push ebp
004E0E95|.8BEC mov ebp,esp
004E0E97|.6A 00 push 0x0
004E0E99|.53 push ebx
004E0E9A|.8BD8 mov ebx,eax
004E0E9C|.33C0 xor eax,eax
004E0E9E|.55 push ebp
004E0E9F|.68 E60E4E00 push VideoJoi.004E0EE6
004E0EA4|.64:FF30 push dword ptr fs:
004E0EA7|.64:8920 mov dword ptr fs:,esp
004E0EAA|.8BC3 mov eax,ebx
004E0EAC|.E8 73FEFFFF call VideoJoi.004E0D24 ;注册表操作的?
004E0EB1|.DDD8 fstp st
004E0EB3|.8D55 FC lea edx,
004E0EB6|.8BC3 mov eax,ebx
004E0EB8|.E8 8FFCFFFF call VideoJoi.004E0B4C ;call算法
004E0EBD|.8B55 FC mov edx, ;假码
004E0EC0|.8B43 14 mov eax,dword ptr ds: ;真码??
004E0EC3|.E8 2039F2FF call VideoJoi.004047E8 ;比较
004E0EC8 75 04 jnz short VideoJoi.004E0ECE ;这里改就可以注册成功了
004E0ECA|.B3 01 mov bl,0x1
004E0ECC|.EB 02 jmp short VideoJoi.004E0ED0
004E0ECE|>33DB xor ebx,ebx
004E0ED0|>33C0 xor eax,eax
004E0ED2|.5A pop edx ;kernel32.7C817077
004E0ED3|.59 pop ecx ;kernel32.7C817077
004E0ED4|.59 pop ecx ;kernel32.7C817077
004E0ED5|.64:8910 mov dword ptr fs:,edx ;ntdll.KiFastSystemCallRet
004E0ED8|.68 ED0E4E00 push VideoJoi.004E0EED
004E0EDD|>8D45 FC lea eax,
004E0EE0|.E8 DB34F2FF call VideoJoi.004043C0
004E0EE5\.C3 retn
发现在004E0EC3这行的时候出现了类似于真码的字符串,在edx中
我的是用户名expasy,类似真码的字符串是ASCII "vj26-97378v201-1607",先记着待会用
继续在004E0EB8这行F7,进入所谓的算法
004E0B4C/$55 push ebp ;注册码计算
004E0B4D|.8BEC mov ebp,esp
004E0B4F|.B9 05000000 mov ecx,0x5
004E0B54|>6A 00 /push 0x0
004E0B56|.6A 00 |push 0x0
004E0B58|.49 |dec ecx
004E0B59|.^ 75 F9 \jnz short VideoJoi.004E0B54
004E0B5B|.51 push ecx
004E0B5C|.53 push ebx
004E0B5D|.56 push esi
004E0B5E|.57 push edi ;ntdll.7C930228
004E0B5F|.8955 FC mov ,edx ;ntdll.KiFastSystemCallRet
004E0B62|.8BF8 mov edi,eax
004E0B64|.33C0 xor eax,eax
004E0B66|.55 push ebp
004E0B67|.68 0A0D4E00 push VideoJoi.004E0D0A
004E0B6C|.64:FF30 push dword ptr fs:
004E0B6F|.64:8920 mov dword ptr fs:,esp
004E0B72|.8B45 FC mov eax,
004E0B75|.E8 4638F2FF call VideoJoi.004043C0 ;lstrclr,清屏
004E0B7A|.8D55 F0 lea edx,
004E0B7D|.8BC7 mov eax,edi ;ntdll.7C930228
004E0B7F|.E8 60FFFFFF call VideoJoi.004E0AE4 ;注册表操作,用户名
004E0B84|.8B45 F0 mov eax,
004E0B87|.E8 103BF2FF call VideoJoi.0040469C ;用户名长度
004E0B8C|.8BF0 mov esi,eax
004E0B8E|.85F6 test esi,esi ;用作循环变量
004E0B90|.7E 30 jle short VideoJoi.004E0BC2
004E0B92|.BB 01000000 mov ebx,0x1
004E0B97|>8D55 E8 /lea edx, ;------------处理过程1------------
004E0B9A|.8BC7 |mov eax,edi ;ntdll.7C930228
004E0B9C|.E8 43FFFFFF |call VideoJoi.004E0AE4 ;取用户名?
004E0BA1|.8B45 E8 |mov eax,
004E0BA4|.0FB64418 FF |movzx eax,byte ptr ds: ;依次取用户名的各位
004E0BA9|.8D4D EC |lea ecx, ;本来就是16进制的ascii值
004E0BAC|.33D2 |xor edx,edx ;ntdll.KiFastSystemCallRet
004E0BAE|.E8 7589F2FF |call VideoJoi.00409528 ;IntToHex,转16进制
004E0BB3|.8B55 EC |mov edx, ;将本来就是16进制的ascii值每一位当作是字符
004E0BB6|.8D45 F8 |lea eax, ;如'z'=0x7a-->'7a'=0x37,0x41
004E0BB9|.E8 E63AF2FF |call VideoJoi.004046A4 ;然后字符串连接
004E0BBE|.43 |inc ebx
004E0BBF|.4E |dec esi
004E0BC0|.^ 75 D5 \jnz short VideoJoi.004E0B97 ;------------过程1end------------
004E0BC2|>8B45 F8 mov eax, ;【结果1】
004E0BC5|.E8 D23AF2FF call VideoJoi.0040469C ;len()
004E0BCA|.8BF0 mov esi,eax ;循环变量
004E0BCC|.85F6 test esi,esi
004E0BCE|.7E 2C jle short VideoJoi.004E0BFC
004E0BD0|.BB 01000000 mov ebx,0x1
004E0BD5|>8B45 F8 /mov eax, ;------------处理过程2------------
004E0BD8|.E8 BF3AF2FF |call VideoJoi.0040469C ;【结果1】长度
004E0BDD|.2BC3 |sub eax,ebx ;-1,2,3,4...
004E0BDF|.8B55 F8 |mov edx, ;kernel32.7C817080
004E0BE2|.8A1402 |mov dl,byte ptr ds:
004E0BE5|.8D45 E4 |lea eax,
004E0BE8|.E8 BB39F2FF |call VideoJoi.004045A8 ;倒序取【结果1】各位
004E0BED|.8B55 E4 |mov edx,
004E0BF0|.8D45 F4 |lea eax,
004E0BF3|.E8 AC3AF2FF |call VideoJoi.004046A4 ;连接
004E0BF8|.43 |inc ebx
004E0BF9|.4E |dec esi ;【结果2】
004E0BFA|.^ 75 D9 \jnz short VideoJoi.004E0BD5 ;------------过程2end------------
004E0BFC|>8D45 F8 lea eax,
004E0BFF|.50 push eax ;------------处理过程3------------
004E0C00|.B9 04000000 mov ecx,0x4
004E0C05|.BA 01000000 mov edx,0x1
004E0C0A|.8B45 F4 mov eax, ;kernel32.7C839AD8
004E0C0D|.E8 EA3CF2FF call VideoJoi.004048FC ;【结果2】的1-4位,相当于vb Mid(eax,edx,ecx)
004E0C12|.8D45 F4 lea eax, ;【结果3-1】
004E0C15|.50 push eax
004E0C16|.B9 04000000 mov ecx,0x4
004E0C1B|.BA 05000000 mov edx,0x5
004E0C20|.8B45 F4 mov eax, ;kernel32.7C839AD8
004E0C23|.E8 D43CF2FF call VideoJoi.004048FC ;【结果2】的第5-8位,相当于vb Mid(eax,5,4)
004E0C28|.8B45 F8 mov eax, ;【结果3-2】
004E0C2B|.E8 6C3AF2FF call VideoJoi.0040469C
004E0C30|.83F8 04 cmp eax,0x4 ;这里是肯定相等的,取的就是4位呀
004E0C33|.7D 2F jge short VideoJoi.004E0C64
004E0C35|.8B45 F8 mov eax, ;------这里没用?-----
004E0C38|.E8 5F3AF2FF call VideoJoi.0040469C
004E0C3D|.8BD8 mov ebx,eax
004E0C3F|.83FB 03 cmp ebx,0x3
004E0C42|.7F 20 jg short VideoJoi.004E0C64
004E0C44|>8D4D E0 /lea ecx,
004E0C47|.8BC3 |mov eax,ebx
004E0C49|.C1E0 02 |shl eax,0x2
004E0C4C|.33D2 |xor edx,edx ;ntdll.KiFastSystemCallRet
004E0C4E|.E8 D588F2FF |call VideoJoi.00409528
004E0C53|.8B55 E0 |mov edx,
004E0C56|.8D45 F8 |lea eax,
004E0C59|.E8 463AF2FF |call VideoJoi.004046A4
004E0C5E|.43 |inc ebx
004E0C5F|.83FB 04 |cmp ebx,0x4
004E0C62|.^ 75 E0 \jnz short VideoJoi.004E0C44 ;-----到这里都没用?0-----
004E0C64|>8B45 F4 mov eax, ;kernel32.7C839AD8
004E0C67|.E8 303AF2FF call VideoJoi.0040469C
004E0C6C|.83F8 04 cmp eax,0x4
004E0C6F|.7D 2F jge short VideoJoi.004E0CA0
004E0C71|.8B45 F4 mov eax, ;------这里没用?-----
004E0C74|.E8 233AF2FF call VideoJoi.0040469C
004E0C79|.8BD8 mov ebx,eax
004E0C7B|.83FB 03 cmp ebx,0x3
004E0C7E|.7F 20 jg short VideoJoi.004E0CA0
004E0C80|>8D4D DC /lea ecx,
004E0C83|.8BC3 |mov eax,ebx
004E0C85|.C1E0 02 |shl eax,0x2
004E0C88|.33D2 |xor edx,edx ;ntdll.KiFastSystemCallRet
004E0C8A|.E8 9988F2FF |call VideoJoi.00409528
004E0C8F|.8B55 DC |mov edx,
004E0C92|.8D45 F4 |lea eax,
004E0C95|.E8 0A3AF2FF |call VideoJoi.004046A4
004E0C9A|.43 |inc ebx
004E0C9B|.83FB 04 |cmp ebx,0x4
004E0C9E|.^ 75 E0 \jnz short VideoJoi.004E0C80 ;-----到这里都没用?0-----
004E0CA0|>8D45 D8 lea eax,
004E0CA3|.50 push eax
004E0CA4|.8B47 04 mov eax,dword ptr ds: ;ntdll.7C96F7E7
004E0CA7|.B9 04000000 mov ecx,0x4
004E0CAC|.BA 01000000 mov edx,0x1
004E0CB1|.E8 463CF2FF call VideoJoi.004048FC ;取1-4位
004E0CB6|.FF75 D8 push ;ntdll.7C930228
004E0CB9|.68 200D4E00 push VideoJoi.004E0D20 ;-
004E0CBE|.FF75 F8 push ;kernel32.7C817080
004E0CC1|.8D45 D4 lea eax,
004E0CC4|.50 push eax
004E0CC5|.8B47 04 mov eax,dword ptr ds: ;ntdll.7C96F7E7
004E0CC8|.B9 05000000 mov ecx,0x5
004E0CCD|.BA 05000000 mov edx,0x5
004E0CD2|.E8 253CF2FF call VideoJoi.004048FC ;5-8位
004E0CD7|.FF75 D4 push ;kernel32.7C817077
004E0CDA|.68 200D4E00 push VideoJoi.004E0D20 ;-
004E0CDF|.FF75 F4 push ;kernel32.7C839AD8
004E0CE2|.8B45 FC mov eax,
004E0CE5|.BA 06000000 mov edx,0x6
004E0CEA|.E8 6D3AF2FF call VideoJoi.0040475C ;连接,出真码
004E0CEF|.33C0 xor eax,eax
004E0CF1|.5A pop edx ;kernel32.7C817077
004E0CF2|.59 pop ecx ;kernel32.7C817077
004E0CF3|.59 pop ecx ;kernel32.7C817077
004E0CF4|.64:8910 mov dword ptr fs:,edx ;ntdll.KiFastSystemCallRet
004E0CF7|.68 110D4E00 push VideoJoi.004E0D11
004E0CFC|>8D45 D4 lea eax,
004E0CFF|.BA 0A000000 mov edx,0xA
004E0D04|.E8 DB36F2FF call VideoJoi.004043E4
004E0D09\.C3 retn
2、算法分析
算法相当简单:
第一步:
处理用户名,这步每个软件的算法结果都一样
expasy的16进制的ascii码:65 78 70 61 73 79
直接变成字符,就是:“657870617379 ”
然后倒序,就是:“973716078756”
取1-4位:“9737”,5-8位:“1607”
第二步:
一个固定的字符串“vj268v2013”,这个字符每个软件不同,也只有这点不同而已
取1-4位:“vj26”,5-9位:“8v201”
第三步:
拼接起来,中间用“-”隔开
得到最终结果:vj26-97378v201-1607
连注册机都懒得写了,直接用个计算器就行了。注册信息保存在注册表“HKEY_LOCAL_MACHINE\SOFTWARE\VJiner\Joiner”
3、继续研究
本来以为连算法都解决了,这样就已经完美了,没想到没这么简单。
输入刚才的注册码,显示注册成功,是的,仅仅是显示注册成功而已!
重启软件,也没有出现注册窗口了,然后我试了一下转个视频,选择转mp4,其他设置没变,然后直接就不行
点击关于,是demo,就是这只是演示版
http://attach.52pojie.cn/album/201511/24/171059fmmrhs8nonhhxhzn.jpg
转一个wmv格式的,转成功了,但是有水印
http://attach.52pojie.cn/album/201511/24/171057wjj1oson11y4w1z4.jpg
种种迹象表明,要么这个注册码不对,要么就是其他地方还有验证,要么这个程序本身就只是个demo版本
然后我试了下OD中搜索字符串“demo”,居然给我找到了
中文搜索引擎, 条目 4749
地址=0057F19A
反汇编=mov edx,VideoJoi.0057F230
文本字符串=Demo
然后很容易到了这里:
0057F158|.A1 A8C65900 mov eax,dword ptr ds:
0057F15D|.8B00 mov eax,dword ptr ds:
0057F15F|.80B8 70040000 00 cmp byte ptr ds:,0x0
0057F166|.75 22 jnz short VideoJoi.0057F18A ;这个跳不能跳
0057F168|.BA 0000FF00 mov edx,0xFF0000
0057F16D|.8B83 1C030000 mov eax,dword ptr ds:
0057F173|.E8 8CC1EEFF call VideoJoi.0046B304
0057F178|.BA 20F25700 mov edx,VideoJoi.0057F220 ;正式
0057F17D|.8B83 1C030000 mov eax,dword ptr ds:
0057F183|.E8 0CC0EEFF call VideoJoi.0046B194
0057F188|.EB 20 jmp short VideoJoi.0057F1AA
0057F18A|>BA FF000000 mov edx,0xFF
0057F18F|.8B83 1C030000 mov eax,dword ptr ds:
0057F195|.E8 6AC1EEFF call VideoJoi.0046B304
0057F19A|.BA 30F25700 mov edx,VideoJoi.0057F230 ;Demo
0057F19F|.8B83 1C030000 mov eax,dword ptr ds:
把这个0057F166的jnz跳转改了一下,呵呵,变成正式版了
http://attach.52pojie.cn/album/201511/24/171101k54lzpcq769ifg35.jpg
测试一下,转个视频,结果如下:
没有水印了,看来是真的破解
至于能直接注册成功,并且是正式版的序列号,我现在还没有找到,不过爆破已经能够成功了。
我爆破选择的爆破点有两个:004E0EC8和0057FE85
1:004E0EC8jne 004E0ECEh ------->004E0ECAh;////注册成功的爆破
2:0057FE85mov byte ptr , 01h ------>mov byte ptr , 00h /////爆破成正式版
0057FE85这处是对“正式版”的标志初始赋值的地方,单步+内存访问断点找到的
当然也可以改跳转的,对这个的验证有几处,改那几处的跳就行了
基本同样的方法可以爆破这一系列的软件。
2015.11.19
注册机及源码在 楼下、20楼
http://www.52pojie.cn/forum.php? ... 435553&pid=10776249
成品:http://pan.baidu.com/s/1c0kF5uS 密码:68p2
2015.11.24
之前图片不见了,重新上传了图片
算法部分的补充:
当用户名小于4位(中文2位)时,注册码也可以计算,相当于就是在倒序后取用户名的长度*4(中文是*8)的值来算的,同样位数的算出来的码差不太多
把注册机的21行:
b = Right(b, 8) '这样做是为了中文字符
改成
If Len(b) >= 8 Then
b = Right(b, 8) '这样做是为了中文字符
ElseIf Len(b) = 6 Then
b = "C8" & b
ElseIf Len(b) = 4 Then
b = "C840" & b
Else
b = "C840C8" & b
End If
就可以了
另外,"超级iphone视频转换器"的字符串是"iphone848v2013","超级屏幕录像专家"的字符串是"PictureRecording86v2013",很简单就可以得到,把源码中的字符串换成这些就可以变成另外的注册机了。
本帖最后由 expasy 于 2015-11-19 14:36 编辑
算法注册机?:,密码:52pojie
使用的吾爱破解注册机生成器编写的注册机,
源码:
Function GetMC(X)
GetMC=X
MC=GetMC
End Function
Function GetName(X)
GetName=x
Name=GetName
End Function
Function GetSN()
Dim a, b, username(4), sn(19), i, j, expasy '数组不喜欢用第一位
a = Name
if len(a)>3 then
a = Right(a, 4)
For i = 1 To 4 '转16进制
username(i) = Hex(Asc(Mid(a, i, 1)))
username(i) = username(i) & ""
b = b + username(i)
Next
b = Right(b, 8) '这样做是为了中文字符
Dim invertname(8), c '反序
For i = 1 To 8
invertname(i) = Mid(b, (9 - i), 1)
c = c & invertname(i) & ""
Next
Dim str
str = "vj268v2013"
For i = 1 To 4 '开始生成注册码了,其实可以精简下代码
sn(i) = Mid(str, i, 1)
sn(i + 5) = invertname(i)
sn(i + 9) = Mid(str, (i + 4), 1)
sn(i + 15) = invertname(i + 4)
Next
sn(14) = Mid(str, 9, 1)
sn(5) = "-"
sn(15) = "-"
For i = 1 To 19
expasy = expasy & sn(i)
Next
else
expasy = "用户名4位(或汉字2位)及以上。"
end if
GetSN = expasy
End Function
expasy 发表于 2015-11-19 14:22
算法注册机?:,密码:52pojie
使用的吾爱破解注册机生成器编写的注册机,
源码:
兄弟你那个“把这个0057F166的jnz跳转改了一下,呵呵,变成正式版了”怎么改?改成什么了?能给大家说下吗 没了啊?就这样了吗。。 没了啊?就这样了吗。 没了啊?就这样了吗{:1_926:}{:1_926:} 我需要多多学习了!基础查!分析注册过程有待进一步提高 图片要重新弄一个,显示不出来。 楼主能不能顺便把软件官网贴一下,我找不到 需要多多学习了!基础查!分析注册过程有待进一步提高 厉害啊,学习学习{:301_978:}