首页
社区
课程
招聘
推荐一个KeyGenMe,不是很容易,大家可以试试
2006-4-7 10:52 11369

推荐一个KeyGenMe,不是很容易,大家可以试试

2006-4-7 10:52
11369
要求
1  不要爆破
2  写出注册机(伪码也可以)
3  写出教程

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞7
打赏
分享
最新回复 (26)
雪    币: 1325
活跃值: (492)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
dreaman 11 2006-4-7 13:47
2
0
首先声明,我不是要分析算法,我是来试验插件的,所以,请不要怪我插嘴,呵呵.
简单看了一下keygen#3.exe,peid说是DELPHI的程序,但DeDe与PEExplore均找不到相关VCL表单与事件处理,所以我试了一下OllyHTML插件(参见工具下载).

倒,我可不是砸你的场啊,现在把脚本删除,简化一下。使用刚更新的插件,操作相对简单一些了:

1、首先用Ollydbg运行keygen#3.exe,分析代码后设Hit Trace => Add all recognized procedures,然后F9运行程序.在name处输入12345678,几个输入框乱点点,不要点Check与Close按钮。
2、点插件菜单OllyHTML => Load => Default ;
3、然后在窗口的脚本列表中点“利用两次Hit列表比较来获取特定过程列表”;
4、点插件“取第一次HIT列表”;
5、回到keygen#3.exe程序,点Check按钮;
6、再点插件窗口“取第二次HIT列表”,再点“比较”;
7、这时插件IE窗口显示下列过程:
000121E8
00012FE0
00013024
000130AC
00013104
000131C4
000131E0
0001324C
000132C8
0001403C
00014224
00014EBC
00014FF4
00015030
00015224
00015368
00015608
00015660
00015718
8、在Ollydbg CPU窗口反汇编代码处 Hit Trace => remove from module , 清除Hit Trace设置;
9、将7中结果的地址部分保存为一个文本文件procs.txt(一行一个地址,如上面所示);
10、点插件菜单OllyHTML => Load => Default ;
11、在插件窗口脚本列表里点“对给定地址列表下断动态跟踪绘制过程动态流图” ;
12、点窗口里的Start按钮,指定前面的procs.txt文本文件 ;
13、回到keygen#3.exe,再点一次Check按钮,此时Ollydbg与keygen#3.exe间来回切换执行,可以在Ollydbg的信息区看到不断变换的12,135等等的字符串,最后停下来,keygen#3.exe继续在运行;
14、点插件窗口Stop按钮 ;
15、稍等会看到插件IE窗口显示了由前面那些过程绘制的执行流图,

16、从图中可以看到入口过程为00015718,设个断点跟进随便看了看,不多久EAX寄存器后显示12345678,后面就需要分析了,偶不在行了,就此打住。
雪    币: 603
活跃值: (617)
能力值: ( LV12,RANK:660 )
在线值:
发帖
回帖
粉丝
prince 16 2006-4-7 14:12
3
0
这个插件很有意思啊
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
萝卜 1 2006-4-7 14:37
4
0
感觉有意思的就是绘制流程图,不过好像不容易上手
雪    币: 3000
活跃值: (3542)
能力值: (RANK:215 )
在线值:
发帖
回帖
粉丝
china 5 2006-4-7 14:48
5
0
太难了,这个插件太难了,不会用。

建议修改为自动化
雪    币: 1325
活跃值: (492)
能力值: ( LV12,RANK:450 )
在线值:
发帖
回帖
粉丝
dreaman 11 2006-4-7 15:28
6
0
我想主要是现在脚本太少的原因吧,如果脚本积累多了,有现成的可用,应该就不会难了,不过我对破解与脱壳没有什么经验,不知道能不能写出些什么好用的脚本来,希望各位高手多提建议啊 (我打算在网站上弄个页面专门链接通用的脚本,那样估计用起来会容易得多)

我今天还要再改一下OllyHTML,因为刚发现并不需要总是用插件菜单来调脚本中的函数,直接在HTML上放按钮写的处理与点插件菜单调用是一样的,所以OnCall,OnStart,OnStop这三个菜单项目可以去掉了,操作上将会简单许多。
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
水豆腐 2006-4-7 15:58
7
0
有意思,过程多了点
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
kyc 19 2006-4-7 16:23
8
0
学习一下,就是复杂点了.
雪    币: 260
活跃值: (214)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
andy00 4 2006-4-7 16:52
9
0
我晕,dreaman砸我场子来了....
雪    币: 179
活跃值: (131)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
WAKU 7 2006-4-7 19:02
10
0
最初由 andy00 发布
我晕,dreaman砸我场子来了....


哈哈,dreaman的插件确实挺有意思........干什么用的啊?
雪    币: 196
活跃值: (135)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
thinkSJ 4 2006-4-7 19:19
11
0
呵呵,dreaman应该普及下OH插件的知识了
雪    币: 260
活跃值: (81)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
萝卜 1 2006-4-7 22:09
12
0
最初由 china 发布
太难了,这个插件太难了,不会用。

建议修改为自动化

支持这个好建议!
雪    币: 257
活跃值: (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ViperDodge 1 2006-4-7 22:16
13
0
  都在讨论插件的事情了
我也对这插件很感兴趣
雪    币: 250
活跃值: (103)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
ah007 2 2006-4-7 22:28
14
0
最初由 thinkSJ 发布
呵呵,dreaman应该普及下OH插件的知识了

支持!
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
冷血书生 28 2006-4-7 23:29
15
0
单从追码的角度来看,好像没什么难度,30秒爆码!

name: lengxue
code: 1852141852143822924925423515820537224212235127131366040334269105

雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lingyu 1 2006-4-8 00:28
16
0
高手!
雪    币: 289
活跃值: (236)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
jhlqb 10 2006-4-8 08:29
17
0
见识了!!!!!
雪    币: 260
活跃值: (214)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
andy00 4 2006-4-8 11:16
18
0
最初由 冷血书生 发布
单从追码的角度来看,好像没什么难度,30秒爆码!


name: lengxue
code: 1852141852143822924925423515820537224212235127131366040334269105
........


厉害啊,写个注册机+教程吧
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xuanqing 2006-4-8 14:40
19
0
有空看看先
不过总觉得玩KeyGenMe没什么动力啊
雪    币: 196
活跃值: (1048)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
poppig 2 2006-6-5 23:35
20
0


怎么我的和楼主的不一样呢???
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
bfqyygy 1 2006-6-6 13:10
21
0
呵呵
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
haoxinnila 2006-6-6 13:43
22
0
最初由 poppig 发布


怎么我的和楼主的不一样呢???
支持啊,皮耳盖吱的发财路,图形注册机!!!!再简化点,更好,顶
雪    币: 67
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
goodcode 2 2006-6-6 13:48
23
0
Log data
地址       消息
           OllyDbg v1.10
             点阵字体 'MS Sans Serif' 已被替换为 '宋体'
           命令行: "K:\Downloads\keygenme#3\keygenme#3.exe"
             已解析出 6384 个序号
             已解析出 6442 个序号
             已解析出 635 个序号
             已解析出 48 个序号
             已解析出 74 个序号

           文件 'K:\Downloads\keygenme#3\keygenme#3.exe'
           Asm2Clipboard PlugIn v0.1
             由 FaTmiKE 编写于 2oo4
             我使用了 Regon 的 ExtraCopy 插件 v1.0 的代码片断
             ...非常感谢 Regon 所做的工作!
           Bookmarks v2
             Copyright (C) 2005 Bobby
           CleanupEx v1.12.108  by Gigapede
           CommandBar v3.10.109c
             Original Written by Oleh Yuschuk  Modified by Gigapede  Contributors:TBD Wayne psyCK0 mfn
           Code Ripper plugin v1.1
             Copyright (C) 2oo6 Ziggy
           Data Ripper plugin v1.2
             Copyright (C) 2oo6 Ziggy
           Extras Copyright (C) 2005 Bobby

           GODUP 版本 1.2 by godfather+ - Delphi 版本

           HideOD, www.pediy.com
           Hit trace helper v1.00
             Copyright (C) 2001-2004 China YunHai.
           MapConv V1.4 - 作者 godfather+、TBD 和 SHaG
           ODbgScript v1.41
             by Epsylon3@gmail.com from OllyScript 0.92 by SHaG
           OllyDump v3.00.110  by Gigapede
           OllyFlow 插件 v0.71
             版权所有 (C) 2005 henryouly@pediy
           OllyHelper v1.3 by cygwin@smth
           OllyMachine v0.20
             由罗聪编写
             编译于2004年12月7日 14:32:15
           超级字串参考+ v0.11
             罗聪创作/n曹聪汉化
             编译于 Sep 20 2005 15:33:30
           ID 000003BC 的新进程已创建
000158EC   ID 000009E0 的主线程已创建
00010000   模块 K:\Downloads\keygenme#3\keygenme#3.exe
77D10000   模块 C:\WINDOWS\system32\user32.dll
77DA0000   模块 C:\WINDOWS\system32\advapi32.dll
77E50000   模块 C:\WINDOWS\system32\RPCRT4.dll
77EF0000   模块 C:\WINDOWS\system32\GDI32.dll
7C800000   模块 C:\WINDOWS\system32\kernel32.dll
7C920000   模块 C:\WINDOWS\system32\ntdll.dll
5CC30000   模块 C:\WINDOWS\system32\ShimEng.dll
58FB0000   模块 C:\WINDOWS\AppPatch\AcGenral.DLL
76B10000   模块 C:\WINDOWS\system32\WINMM.dll
76990000   模块 C:\WINDOWS\system32\ole32.dll
77BE0000   模块 C:\WINDOWS\system32\msvcrt.dll
770F0000   模块 C:\WINDOWS\system32\OLEAUT32.dll
77BB0000   模块 C:\WINDOWS\system32\MSACM32.dll
77BD0000   模块 C:\WINDOWS\system32\VERSION.dll
7D590000   模块 C:\WINDOWS\system32\SHELL32.dll
77F40000   模块 C:\WINDOWS\system32\SHLWAPI.dll
759D0000   模块 C:\WINDOWS\system32\USERENV.dll
5ADC0000   模块 C:\WINDOWS\system32\UxTheme.dll
76300000   模块 C:\WINDOWS\system32\IMM32.DLL
62C20000   模块 C:\WINDOWS\system32\LPK.DLL
73FA0000   模块 C:\WINDOWS\system32\USP10.dll
77180000   模块 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
000158EC   程序入口点
           正在分析 keygenme
             121 个启发式 函数
             85 个调用关联已知 函数
             39 循环 , 2 switches
           共发现 1 处函数:
              158EC
           共发现 120 处函数:
              110D8
              1113C
              1118C
              11194
              111C4
              111DC
              1124C
              112E0
              11344
              113BC
              11474
              11508
              11588
              11618
              1173C
              1196C
              119D0
              11A00
              11A30
              11A54
              11A7C
              11AEC
              11B24
              11BD4
              11C5C
              11CA8
              11D34
              11D60
              11D94
              11DC0
              121E8
              12488
              124A8
              12518
              12524
              1257C
              1258C
              125CC
              12624
              12700
              127F4
              12800
              1280C
              12828
              1284C
              12878
              12898
              128C0
              128DC
              12A60
              12AE4
              12AFC
              12C3C
              12C5C
              12D44
              12D84
              12DE0
              12E10
              12E9C
              12F74
              13050
              1307C
              130AC
              13104
              131D4
              131E0
              1324C
              132C8
              13344
              1338C
              133B4
              133C8
              1384C
              138CC
              13924
              13AE0
              13AEC
              13AF4
              13B38
              13B78
              13B84
              13E90
              13F1C
              13FB0
              1403C
              140D4
              1417C
              14224
              142C8
              14354
              143E0
              14488
              14514
              145AC
              14654
              146E0
              14778
              14840
              148CC
              14964
              149F0
              14AA0
              14B2C
              14BFC
              14CB8
              14D5C
              14DF4
              14EBC
              14FF4
              15030
              15224
              15368
              154FC
              1553C
              15608
              15648
              15660
              15718
              157F8
              158EC
5D170000   模块 C:\WINDOWS\system32\comctl32.dll
74680000   模块 C:\WINDOWS\system32\MSCTF.dll
10000000   模块 C:\KAV2005\KASocket.dll
71A20000   模块 C:\WINDOWS\system32\WS2_32.dll
7C810856   ID 00000E20 的新线程已创建
71A10000   模块 C:\WINDOWS\system32\WS2HELP.dll
           线程 00000E20 已终止, 退出代码 0
76D70000   模块 C:\WINDOWS\system32\apphelp.dll
73640000   模块 C:\WINDOWS\system32\msctfime.ime
           进程已终止, 退出代码 10000 (65536.)
           提取 54 处未执行
00010000   卸载 K:\Downloads\keygenme#3\keygenme#3.exe
10000000   卸载 C:\KAV2005\KASocket.dll
58FB0000   卸载 C:\WINDOWS\AppPatch\AcGenral.DLL
5ADC0000   卸载 C:\WINDOWS\system32\UxTheme.dll
5CC30000   卸载 C:\WINDOWS\system32\ShimEng.dll
5D170000   卸载 C:\WINDOWS\system32\comctl32.dll
62C20000   卸载 C:\WINDOWS\system32\LPK.DLL
71A10000   卸载 C:\WINDOWS\system32\WS2HELP.dll
71A20000   卸载 C:\WINDOWS\system32\WS2_32.dll
73640000   卸载 C:\WINDOWS\system32\msctfime.ime
73FA0000   卸载 C:\WINDOWS\system32\USP10.dll
74680000   卸载 C:\WINDOWS\system32\MSCTF.dll
759D0000   卸载 C:\WINDOWS\system32\USERENV.dll
76300000   卸载 C:\WINDOWS\system32\IMM32.DLL
76990000   卸载 C:\WINDOWS\system32\ole32.dll
76B10000   卸载 C:\WINDOWS\system32\WINMM.dll
76D70000   卸载 C:\WINDOWS\system32\apphelp.dll
770F0000   卸载 C:\WINDOWS\system32\OLEAUT32.dll
77180000   卸载 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
77BB0000   卸载 C:\WINDOWS\system32\MSACM32.dll
77BD0000   卸载 C:\WINDOWS\system32\VERSION.dll
77BE0000   卸载 C:\WINDOWS\system32\msvcrt.dll
77D10000   卸载 C:\WINDOWS\system32\user32.dll
77DA0000   卸载 C:\WINDOWS\system32\advapi32.dll
77E50000   卸载 C:\WINDOWS\system32\RPCRT4.dll
77EF0000   卸载 C:\WINDOWS\system32\GDI32.dll
77F40000   卸载 C:\WINDOWS\system32\SHLWAPI.dll
7C800000   卸载 C:\WINDOWS\system32\kernel32.dll
7C920000   卸载 C:\WINDOWS\system32\ntdll.dll
7D590000   卸载 C:\WINDOWS\system32\SHELL32.dll
             已解析出 6384 个序号
             已解析出 6442 个序号
             已解析出 635 个序号
             已解析出 48 个序号
             已解析出 74 个序号

           文件 'K:\Downloads\keygenme#3\keygenme#3.exe'
           ID 00000F1C 的新进程已创建
000158EC   ID 00000C8C 的主线程已创建
00010000   模块 K:\Downloads\keygenme#3\keygenme#3.exe
77D10000   模块 C:\WINDOWS\system32\user32.dll
77DA0000   模块 C:\WINDOWS\system32\advapi32.dll
77E50000   模块 C:\WINDOWS\system32\RPCRT4.dll
77EF0000   模块 C:\WINDOWS\system32\GDI32.dll
7C800000   模块 C:\WINDOWS\system32\kernel32.dll
7C920000   模块 C:\WINDOWS\system32\ntdll.dll
5CC30000   模块 C:\WINDOWS\system32\ShimEng.dll
58FB0000   模块 C:\WINDOWS\AppPatch\AcGenral.DLL
76B10000   模块 C:\WINDOWS\system32\WINMM.dll
76990000   模块 C:\WINDOWS\system32\ole32.dll
77BE0000   模块 C:\WINDOWS\system32\msvcrt.dll
770F0000   模块 C:\WINDOWS\system32\OLEAUT32.dll
77BB0000   模块 C:\WINDOWS\system32\MSACM32.dll
77BD0000   模块 C:\WINDOWS\system32\VERSION.dll
7D590000   模块 C:\WINDOWS\system32\SHELL32.dll
77F40000   模块 C:\WINDOWS\system32\SHLWAPI.dll
759D0000   模块 C:\WINDOWS\system32\USERENV.dll
5ADC0000   模块 C:\WINDOWS\system32\UxTheme.dll
76300000   模块 C:\WINDOWS\system32\IMM32.DLL
62C20000   模块 C:\WINDOWS\system32\LPK.DLL
73FA0000   模块 C:\WINDOWS\system32\USP10.dll
77180000   模块 C:\WINDOWS\WinSxS\x86_Microsoft.Windows.Common-Controls_6595b64144ccf1df_6.0.2600.2180_x-ww_a84f1ff9\comctl32.dll
000158EC   程序入口点
           共 54 处函数:
              111C4
              1124C
              11344
              113BC
              11508
              11618
              11A54
              11A7C
              11AEC
              11D60
              121E8
              12518
              12524
              1257C
              125CC
              12624
              12800
              1280C
              12828
              1284C
              12878
              12898
              128C0
              128DC
              12A60
              12AFC
              12C5C
              12D84
              12DE0
              12E10
              12E9C
              12F74
              130AC
              13104
              131E0
              1324C
              132C8
              133B4
              13924
              13AE0
              13AEC
              13AF4
              13B38
              1403C
              1417C
              14224
              14EBC
              14FF4
              15030
              15224
              15368
              15608
              15660
              15718
5D170000   模块 C:\WINDOWS\system32\comctl32.dll
74680000   模块 C:\WINDOWS\system32\MSCTF.dll
10000000   模块 C:\KAV2005\KASocket.dll
71A20000   模块 C:\WINDOWS\system32\WS2_32.dll
71A10000   模块 C:\WINDOWS\system32\WS2HELP.dll
7C810856   ID 000008B4 的新线程已创建
           线程 000008B4 已终止, 退出代码 0
76D70000   模块 C:\WINDOWS\system32\apphelp.dll
73640000   模块 C:\WINDOWS\system32\msctfime.ime
           进程已终止, 退出代码 0
           提取 11 处以执行
           共 11 处函数:
           ADDR:[   121E8] 0
           ADDR:[   1257C] 0
           ADDR:[   125CC] 0
           ADDR:[   12C5C] 0
           ADDR:[   12E9C] 0
           ADDR:[   130AC] 0
           ADDR:[   131E0] 0
           ADDR:[   13B38] 0
           ADDR:[   1403C] 0
           ADDR:[   15224] 0
           ADDR:[   15718] 0

雪    币: 191
活跃值: (1912)
能力值: ( LV10,RANK:170 )
在线值:
发帖
回帖
粉丝
4st0ne 4 2006-6-6 17:28
24
0
Name:sLtYJ
Code:1271612716224248228227246131236382172153810513970435584812391
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
wenglingok 26 2006-6-10 19:06
25
0
这个应该不难吧!今天没有球赛,所以看了下这个程序。

【注册过程】

载入程序,输入用户名:rdsnow、注册码:987654321abcd,然后 bp GetWindowTextA,断下返回到程序程序领空:

00015724  |.  55          push ebp
00015725  |.  68 EA570100 push keygenme.000157EA
0001572A  |.  64:FF30     push dword ptr fs:[eax]
0001572D  |.  64:8920     mov dword ptr fs:[eax],esp
00015730  |.  E8 EFFAFFFF call keygenme.00015224                ;  SEH
00015735  |.  8D55 FC     lea edx,dword ptr ss:[ebp-4]
00015738  |.  A1 C8760100 mov eax,dword ptr ds:[176C8]
0001573D  |.  E8 C6FEFFFF call keygenme.00015608                ;  取出用户名 szUserName
00015742  |.  8D55 F8     lea edx,dword ptr ss:[ebp-8]
00015745  |.  A1 CC760100 mov eax,dword ptr ds:[176CC]
0001574A  |.  E8 B9FEFFFF call keygenme.00015608                ;  取出注册码 szUserCode
0001574F  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
00015752  |.  E8 ADD9FFFF call keygenme.00013104                ;  用户名的长度 strlen( szUserName )
00015757  |.  83F8 05     cmp eax,5
0001575A  |.  7C 4D       jl short keygenme.000157A9            ;  用户名的长度不小于 5
0001575C  |.  8B55 F8     mov edx,dword ptr ss:[ebp-8]
0001575F  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
00015762  |.  E8 F9FEFFFF call keygenme.00015660                ;  需要跟进的关键处
00015767  |.  833D A06001>cmp dword ptr ds:[160A0],1
0001576E  |.  75 5A       jnz short keygenme.000157CA           ;  [160A0] 是注册标志
跟进“00015762 |. E8 F9FEFFFF call keygenme.00015660 ; 需要跟进的关键处”这一行:

…………………………
00015683  |.  55          push ebp
00015684  |.  68 0C570100 push keygenme.0001570C
00015689  |.  64:FF30     push dword ptr fs:[eax]
0001568C  |.  64:8920     mov dword ptr fs:[eax],esp
0001568F  |.  E8 90FBFFFF call keygenme.00015224                ;  SEH
00015694  |.  8D55 F4     lea edx,dword ptr ss:[ebp-C]
00015697  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
0001569A  |.  E8 91F9FFFF call keygenme.00015030                ;  这个 Call 用来生成注册码
0001569F  |.  837D F8 00  cmp dword ptr ss:[ebp-8],0
000156A3  |.  74 47       je short keygenme.000156EC
000156A5  |.  8B45 F4     mov eax,dword ptr ss:[ebp-C]
000156A8  |.  E8 57DAFFFF call keygenme.00013104                ;  取生成注册码的长度
000156AD  |.  85C0        test eax,eax
000156AF  |.  7E 3B       jle short keygenme.000156EC
000156B1  |.  8945 EC     mov dword ptr ss:[ebp-14],eax
000156B4  |.  C745 F0 010>mov dword ptr ss:[ebp-10],1
000156BB  |>  8B45 F4     /mov eax,dword ptr ss:[ebp-C]         ;  下面这个循环只是将加码跟生成的真码比较
000156BE  |.  8B55 F0     |mov edx,dword ptr ss:[ebp-10]
000156C1  |.  8A4410 FF   |mov al,byte ptr ds:[eax+edx-1]
000156C5  |.  8B55 F8     |mov edx,dword ptr ss:[ebp-8]
000156C8  |.  8B4D F0     |mov ecx,dword ptr ss:[ebp-10]
000156CB  |.  3A440A FF   |cmp al,byte ptr ds:[edx+ecx-1]
000156CF  |.  75 0C       |jnz short keygenme.000156DD
000156D1  |.  C705 A06001>|mov dword ptr ds:[160A0],1           ;  注册标志赋值 1
000156DB  |.  EB 07       |jmp short keygenme.000156E4
000156DD  |>  33C0        |xor eax,eax
000156DF  |.  A3 A0600100 |mov dword ptr ds:[160A0],eax         ;  注册标志赋值 0
000156E4  |>  FF45 F0     |inc dword ptr ss:[ebp-10]
000156E7  |.  FF4D EC     |dec dword ptr ss:[ebp-14]
000156EA  |.^ 75 CF       \jnz short keygenme.000156BB
000156EC  |>  E8 77FCFFFF call keygenme.00015368
000156F1  |.  33C0        xor eax,eax
000156F3  |.  5A          pop edx
000156F4  |.  59          pop ecx
000156F5  |.  59          pop ecx
000156F6  |.  64:8910     mov dword ptr fs:[eax],edx
000156F9  |.  68 13570100 push keygenme.00015713
000156FE  |>  8D45 F4     lea eax,dword ptr ss:[ebp-C]
00015701  |.  BA 03000000 mov edx,3
00015706  |.  E8 A5D8FFFF call keygenme.00012FB0
0001570B  \.  C3          retn
跟进“0001569A |. E8 91F9FFFF call keygenme.00015030 ; 这个 Call 用来生成注册码”这一行:
跟进可以看到注册过程分三步完成:
1、根据用户名计算byte型变量 sum0,sum1,sum2,sum3 的值
2、定义 byte 型数组 bResult[26],利用 sum0,sum1,sum2,sum3 参与运算,结果写入 bResult[26]
3、依次将 bResult[26] 转为十进制文本,并连接得到注册码
好,我们跟进看看具体代码:

…………………………
0001505F  |.  33F6        xor esi,esi
00015061  |.  33FF        xor edi,edi
00015063  |.  33C0        xor eax,eax
00015065  |.  8945 F0     mov dword ptr ss:[ebp-10],eax
00015068  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
0001506B  |.  E8 94E0FFFF call keygenme.00013104                ;  取出注册码的长度
00015070  |.  85C0        test eax,eax
00015072  |.  7E 71       jle short keygenme.000150E5
00015074  |.  8945 EC     mov dword ptr ss:[ebp-14],eax
00015077  |.  BB 01000000 mov ebx,1
0001507C  |>  8B45 FC     /mov eax,dword ptr ss:[ebp-4]
0001507F  |.  E8 80E0FFFF |call keygenme.00013104               ;  取出注册码的长度
00015084  |.  8B55 FC     |mov edx,dword ptr ss:[ebp-4]
00015087  |.  0FB6541A FF |movzx edx,byte ptr ds:[edx+ebx-1]    ;  szUserName[i]
0001508C  |.  0355 F4     |add edx,dword ptr ss:[ebp-C]
0001508F  |.  03C2        |add eax,edx                          ;  sum0 += szUserName[i] + strlen(szUserName)
00015091  |.  8945 F4     |mov dword ptr ss:[ebp-C],eax
00015094  |.  8B45 FC     |mov eax,dword ptr ss:[ebp-4]
00015097  |.  E8 68E0FFFF |call keygenme.00013104               ;  取出注册码的长度
0001509C  |.  48          |dec eax
0001509D  |.  8B55 FC     |mov edx,dword ptr ss:[ebp-4]
000150A0  |.  0FB6541A FE |movzx edx,byte ptr ds:[edx+ebx-2]    ;  szUserName[i-1]
000150A5  |.  03F2        |add esi,edx
000150A7  |.  03C6        |add eax,esi                          ;  sum1 += szUserName[i-1] + strlen(szUserName) - 1
000150A9  |.  8BF0        |mov esi,eax
000150AB  |.  8B45 FC     |mov eax,dword ptr ss:[ebp-4]
000150AE  |.  E8 51E0FFFF |call keygenme.00013104               ;  取出注册码的长度
000150B3  |.  83E8 02     |sub eax,2
000150B6  |.  8B55 FC     |mov edx,dword ptr ss:[ebp-4]
000150B9  |.  0FB6541A FD |movzx edx,byte ptr ds:[edx+ebx-3]    ;  szUserName[i-2]
000150BE  |.  03FA        |add edi,edx
000150C0  |.  03C7        |add eax,edi                          ;  sum2 += szUserName[i-2] + strlen(szUserName) - 2
000150C2  |.  8BF8        |mov edi,eax
000150C4  |.  8B45 FC     |mov eax,dword ptr ss:[ebp-4]
000150C7  |.  E8 38E0FFFF |call keygenme.00013104               ;  取出注册码的长度
000150CC  |.  83E8 03     |sub eax,3
000150CF  |.  8B55 FC     |mov edx,dword ptr ss:[ebp-4]
000150D2  |.  0FB6541A FC |movzx edx,byte ptr ds:[edx+ebx-4]    ;  szUserName[i-3]
000150D7  |.  0355 F0     |add edx,dword ptr ss:[ebp-10]
000150DA  |.  03C2        |add eax,edx                          ;  sum3 += szUserName[i-3] + strlen(szUserName) - 3
000150DC  |.  8945 F0     |mov dword ptr ss:[ebp-10],eax
000150DF  |.  43          |inc ebx
000150E0  |.  FF4D EC     |dec dword ptr ss:[ebp-14]
000150E3  |.^ 75 97       \jnz short keygenme.0001507C
000150E5  |>  8A45 F4     mov al,byte ptr ss:[ebp-C]            ;  取 sum0 的低 8 位
000150E8  |.  34 90       xor al,90
000150EA  |.  8845 D2     mov byte ptr ss:[ebp-2E],al           ;  bResult[0] = sum0 ^ 0x90
000150ED  |.  8A55 F4     mov dl,byte ptr ss:[ebp-C]
000150F0  |.  80F2 FF     xor dl,0FF
000150F3  |.  8855 D3     mov byte ptr ss:[ebp-2D],dl           ;  bResult[1] = sum0 ^ 0xFF
000150F6  |.  8845 D4     mov byte ptr ss:[ebp-2C],al           ;  bResult[2] = bResult[0]
000150F9  |.  8855 D5     mov byte ptr ss:[ebp-2B],dl           ;  bResult[3] = bResult[1]
000150FC  |.  8A45 F4     mov al,byte ptr ss:[ebp-C]
000150FF  |.  34 0F       xor al,0F                             ;  bResult[4] = sum0 ^ 0xF
00015101  |.  8845 D6     mov byte ptr ss:[ebp-2A],al
00015104  |.  8BC6        mov eax,esi                           ;  取 sum1 的低 8 位
00015106  |.  8BD0        mov edx,eax
00015108  |.  80F2 58     xor dl,58
0001510B  |.  8855 D7     mov byte ptr ss:[ebp-29],dl           ;  bResult[5] = sum1 ^ 0x58
0001510E  |.  8BD0        mov edx,eax
00015110  |.  80F2 44     xor dl,44
00015113  |.  8855 D8     mov byte ptr ss:[ebp-28],dl           ;  bResult[6] = sum1 ^ 0x44
00015116  |.  8BD0        mov edx,eax
00015118  |.  80F2 43     xor dl,43
0001511B  |.  8855 D9     mov byte ptr ss:[ebp-27],dl           ;  bResult[7] = sum1 ^ 0x43
0001511E  |.  8BD0        mov edx,eax
00015120  |.  80F2 56     xor dl,56
00015123  |.  8855 DA     mov byte ptr ss:[ebp-26],dl           ;  bResult[8] = sum1 ^ 0x56
00015126  |.  8BD0        mov edx,eax
00015128  |.  80F2 23     xor dl,23
0001512B  |.  8855 DB     mov byte ptr ss:[ebp-25],dl           ;  bResult[9] = sum1 ^ 0x23
0001512E  |.  8BD7        mov edx,edi                           ;  取 sum2 的低 8 位
00015130  |.  8BCA        mov ecx,edx
00015132  |.  80F1 55     xor cl,55
00015135  |.  884D DC     mov byte ptr ss:[ebp-24],cl           ;  bResult[10] = sum2 ^ 0x55
00015138  |.  8BCA        mov ecx,edx
0001513A  |.  80F1 44     xor cl,44
0001513D  |.  884D DD     mov byte ptr ss:[ebp-23],cl           ;  bResult[11] = sum2 ^ 0x44
00015140  |.  8BCA        mov ecx,edx
00015142  |.  80F1 64     xor cl,64
00015145  |.  884D DE     mov byte ptr ss:[ebp-22],cl           ;  bResult[12] = sum2 ^ 0x64
00015148  |.  8BCA        mov ecx,edx
0001514A  |.  80F1 57     xor cl,57
0001514D  |.  884D DF     mov byte ptr ss:[ebp-21],cl           ;  bResult[13] = sum2 ^ 0x57
00015150  |.  8BCA        mov ecx,edx
00015152  |.  80F1 45     xor cl,45
00015155  |.  884D E0     mov byte ptr ss:[ebp-20],cl           ;  bResult[14] = sum2 ^ 0x45
00015158  |.  8BCA        mov ecx,edx
0001515A  |.  80F1 95     xor cl,95
0001515D  |.  884D E1     mov byte ptr ss:[ebp-1F],cl           ;  bResult[15] = sum2 ^ 0x95
00015160  |.  8A4D F0     mov cl,byte ptr ss:[ebp-10]           ;  取出 sum3 的低 8 位
00015163  |.  324D F4     xor cl,byte ptr ss:[ebp-C]
00015166  |.  884D E2     mov byte ptr ss:[ebp-1E],cl           ;  bResult[16] = sum3 ^ sum0
00015169  |.  8A4D F0     mov cl,byte ptr ss:[ebp-10]
0001516C  |.  8BDE        mov ebx,esi
0001516E  |.  32CB        xor cl,bl
00015170  |.  884D E3     mov byte ptr ss:[ebp-1D],cl           ;  bResult[17] = sum3 ^ sum1
00015173  |.  8A4D F0     mov cl,byte ptr ss:[ebp-10]
00015176  |.  8BDF        mov ebx,edi
00015178  |.  32CB        xor cl,bl
0001517A  |.  884D E4     mov byte ptr ss:[ebp-1C],cl           ;  bResult[18] = sum3 ^ sum2
0001517D  |.  8A4D F4     mov cl,byte ptr ss:[ebp-C]
00015180  |.  02C8        add cl,al
00015182  |.  324D F0     xor cl,byte ptr ss:[ebp-10]
00015185  |.  884D E5     mov byte ptr ss:[ebp-1B],cl           ;  bResult[19] = ( sum0 + sum1 ) ^ sum3
00015188  |.  02C2        add al,dl
0001518A  |.  3245 F0     xor al,byte ptr ss:[ebp-10]
0001518D  |.  8845 E6     mov byte ptr ss:[ebp-1A],al           ;  bResult[20] = ( sum2 + sum1 ) ^ sum3
00015190  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
00015193  |.  8A00        mov al,byte ptr ds:[eax]
00015195  |.  34 44       xor al,44
00015197  |.  8845 E7     mov byte ptr ss:[ebp-19],al           ;  bResult[21] = szUserName[0] ^ 0x44
0001519A  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
0001519D  |.  8A40 01     mov al,byte ptr ds:[eax+1]
000151A0  |.  34 44       xor al,44
000151A2  |.  8845 E8     mov byte ptr ss:[ebp-18],al           ;  bResult[22] = szUserName[1] ^ 0x44
000151A5  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
000151A8  |.  8A40 02     mov al,byte ptr ds:[eax+2]
000151AB  |.  34 44       xor al,44
000151AD  |.  8845 E9     mov byte ptr ss:[ebp-17],al           ;  bResult[23] = szUserName[2] ^ 0x44
000151B0  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
000151B3  |.  8A40 03     mov al,byte ptr ds:[eax+3]
000151B6  |.  34 22       xor al,22
000151B8  |.  8845 EA     mov byte ptr ss:[ebp-16],al           ;  bResult[24] = szUserName[3] ^ 0x22
000151BB  |.  8B45 FC     mov eax,dword ptr ss:[ebp-4]
000151BE  |.  8A40 04     mov al,byte ptr ds:[eax+4]
000151C1  |.  34 11       xor al,11
000151C3  |.  8845 EB     mov byte ptr ss:[ebp-15],al           ;  bResult[25] = szUserName[4] ^ 0x11
000151C6  |.  8B45 F8     mov eax,dword ptr ss:[ebp-8]
000151C9  |.  E8 BEDDFFFF call keygenme.00012F8C
000151CE  |.  BE 1A000000 mov esi,1A
000151D3  |.  8D5D D2     lea ebx,dword ptr ss:[ebp-2E]         ;  取出 bResult[26] 的地址
000151D6  |>  33C0        /xor eax,eax
000151D8  |.  8A03        |mov al,byte ptr ds:[ebx]
000151DA  |.  33D2        |xor edx,edx
000151DC  |.  52          |push edx
000151DD  |.  50          |push eax
000151DE  |.  8D45 CC     |lea eax,dword ptr ss:[ebp-34]
000151E1  |.  E8 D6FCFFFF |call keygenme.00014EBC               ;  将 bResult[i] 转成十进制文本
000151E6  |.  8B55 CC     |mov edx,dword ptr ss:[ebp-34]
000151E9  |.  8B45 F8     |mov eax,dword ptr ss:[ebp-8]
000151EC  |.  E8 1BDFFFFF |call keygenme.0001310C               ;  连接得到的 26 个十进制文本
000151F1  |.  8B45 F8     |mov eax,dword ptr ss:[ebp-8]
000151F4  |.  43          |inc ebx
000151F5  |.  4E          |dec esi
000151F6  |.^ 75 DE       \jnz short keygenme.000151D6
000151F8  |.  33C0        xor eax,eax
000151FA  |.  5A          pop edx
000151FB  |.  59          pop ecx
000151FC  |.  59          pop ecx
000151FD  |.  64:8910     mov dword ptr fs:[eax],edx
00015200  |.  68 1D520100 push keygenme.0001521D
00015205  |>  8D45 CC     lea eax,dword ptr ss:[ebp-34]
00015208  |.  E8 7FDDFFFF call keygenme.00012F8C
0001520D  |.  8D45 FC     lea eax,dword ptr ss:[ebp-4]
00015210  |.  E8 77DDFFFF call keygenme.00012F8C
00015215  \.  C3          retn
00015216   .^ E9 0DD8FFFF jmp keygenme.00012A28
0001521B   .^ EB E8       jmp short keygenme.00015205
0001521D   .  5F          pop edi
0001521E   .  5E          pop esi
0001521F   .  5B          pop ebx
00015220   .  8BE5        mov esp,ebp
00015222   .  5D          pop ebp
00015223   .  C3          retn

--------------------------------------------------------------------------------
【注册机源码】

将上面的过程略微整理,便可写出 keygen 了。

void CKeygenDlg::OnOK()
{
        // TODO: Add extra validation here
        UpdateData(true);
        unsigned char bResult[26],sum0=0,sum1=0,sum2=0,sum3=0,i,n;
        char szUserName[256],szResult[4];
        n = m_Edit1.GetLength ();
        if ( n < 5 ){
                m_Edit2 = "用户名不少于5个字符";
                UpdateData(false);
                return;
        }
        strcpy(szUserName,m_Edit1);
        for(i=0;i<n;i++){
                sum0 += n;
                sum0 += szUserName[i];
                sum1 += ( n - 1 );
                if( i>0 ) sum1 += szUserName[i-1];
                sum2 += ( n - 2 );
                if( i>1 ) sum2 += szUserName[i-2];
                sum3 += ( n - 3 );
                if( i>2 ) sum3 += szUserName[i-3];
        }

        bResult[0] = sum0 ^ 0x90;
        bResult[1] = sum0 ^ 0xFF;
        bResult[2] = bResult[0];
        bResult[3] = bResult[1];
        bResult[4] = sum0 ^ 0xF;
        bResult[5] = sum1 ^ 0x58;
        bResult[6] = sum1 ^ 0x44;
        bResult[7] = sum1 ^ 0x43;
        bResult[8] = sum1 ^ 0x56;
        bResult[9] = sum1 ^ 0x23;
        bResult[10] = sum2 ^ 0x55;
        bResult[11] = sum2 ^ 0x44;
        bResult[12] = sum2 ^ 0x64;
        bResult[13] = sum2 ^ 0x57;
        bResult[14] = sum2 ^ 0x45;
        bResult[15] = sum2 ^ 0x95;
        bResult[16] = sum3 ^ sum0;
        bResult[17] = sum3 ^ sum1;
        bResult[18] = sum3 ^ sum2;
        bResult[19] = ( sum0 + sum1 ) ^ sum3;
        bResult[20] = ( sum2 + sum1 ) ^ sum3;
        bResult[21] = szUserName[0] ^ 0x44;
        bResult[22] = szUserName[1] ^ 0x44;
        bResult[23] = szUserName[2] ^ 0x44;
        bResult[24] = szUserName[3] ^ 0x22;
        bResult[25] = szUserName[4] ^ 0x11;
        m_Edit2.Empty ();
        for(i=0;i<26;i++){
                sprintf(szResult,"%d",bResult[i]);
                m_Edit2 += szResult;
        }
        UpdateData(false);
}
上传的附件:
游客
登录 | 注册 方可回帖
返回