【文章标题】: HappyTown第8个CrackMe算法分析及注册机
【文章作者】: dewar
【作者邮箱】: huazi0745@sina.com
【软件名称】: HappyTown第8个CrackMe
【下载地址】: 自己搜索下载
【加壳方式】: 简单壳
【保护方式】: 注册码
【编写语言】: Borland Delphi
【使用工具】: OD
【操作平台】: WINXP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
今天吃完晚饭没什么事做,顺便就把happytown的第8个CrackMe分析了一下,于是便有了下面的一些字.算是自己的学习笔记吧.没什么技术含量,高手勿笑,如果你不小心看完了本文还请指出其中的错误,也好让我多学一点东东.
感觉每做一个happytown的CrackMe都能学到一些东东,这里表示感谢~!
1.PEID查壳,"什么也没发现",看来有问题.于是手动脱之,壳很简单,这里就不?嗦了.脱完之后不用修复,可直接运行,再用PEID查壳,深度扫描,发现是Borland Delphi 6.0 - 7.0写的程序.
2.OD载入脱壳后的文件.查找字符串参考,没什么有价值的发现;bp GetDlgItemTextA 和 bp GetWindowTextA下断,输入用户名和注册码后点Check均无反应;试了N种断点,还是没找到突破口;我狂晕,没办法看来只有请出"万能断点了",先取消原来所有的断点,点"插件"==>"ApiBreak"==>"Api断点"==>选"万能断点"==>勾上"万能断点"==>确定.然后输好相关信息后点Check,立马断在了下面的地方.
......
77D3353D F3:A5 REP MOVS DWORD PTR ES:[EDI], DWORD P> ;<==断在这里
77D3353F 8BC8 MOV ECX, EAX
77D33541 83E1 03 AND ECX, 3
77D33544 F3:A4 REP MOVS BYTE PTR ES:[EDI], BYTE PTR>
77D33546 E8 E3FBFFFF CALL 77D3312E
77D3354B 5F POP EDI
77D3354C 5E POP ESI
77D3354D 8BC3 MOV EAX, EBX
77D3354F 5B POP EBX
77D33550 5D POP EBP
77D33551 C2 1000 RETN 10
......
这里是系统领空,我的研究还没有深入到这一步,没有能力动它^_^,那就Alt+F9返回用户代码吧.
......
00437DD8 |. 8943 0C MOV DWORD PTR DS:[EBX+C], EAX ; <==返回在这里
00437DDB |> 8B03 MOV EAX, DWORD PTR DS:[EBX]
00437DDD |. 83F8 0C CMP EAX, 0C
00437DE0 |. 75 1B JNZ SHORT 00437DFD
00437DE2 |. 8B53 08 MOV EDX, DWORD PTR DS:[EBX+8]
00437DE5 |. 52 PUSH EDX ; /Arg1
00437DE6 |. 8B4B 04 MOV ECX, DWORD PTR DS:[EBX+4] ; |
00437DE9 |. 8BD0 MOV EDX, EAX ; |
00437DEB |. 8BC6 MOV EAX, ESI ; |
00437DED |. E8 56B7FFFF CALL 00433548 ; \CrackMe_.00433548
00437DF2 |. EB 09 JMP SHORT 00437DFD
00437DF4 |> 8BD3 MOV EDX, EBX
00437DF6 |. 8BC6 MOV EAX, ESI
00437DF8 |. E8 B3CFFFFF CALL 00434DB0
00437DFD |> 5D POP EBP
00437DFE |. 5F POP EDI
00437DFF |. 5E POP ESI
00437E00 |. 5B POP EBX
00437E01 \. C3 RETN
......
返回后先禁用刚才的断点.跟了一下,不是关键的地方,继续跟下去,让它一路返回.
......
0045538B |. 8D55 FC LEA EDX, DWORD PTR SS:[EBP-4]
0045538E |. 8B87 04030000 MOV EAX, DWORD PTR DS:[EDI+304]
00455394 |. E8 0FE6FDFF CALL 004339A8 ; 获得用户名
00455399 |. BA 04000000 MOV EDX, 4 ; <==最后返回到这里
最后返回到00455399处,这时我们在堆栈中可发现自己输入的用户名,看来上一个函数应该是获得用户名的了.有眉目了^_^,继续跟吧.
0045539E |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4] ; 取得用户名长度
004553A1 |. E8 CEFAFFFF CALL 00454E74 ; 跟进去,发现是根据用户名长度设置标志,长度≤4就置0,否则置1
004553A6 |. 803B 00 CMP BYTE PTR DS:[EBX], 0 ; 比较标志是否为0
004553A9 |. 0F84 AD050000 JE 0045595C ; 是就跳向失败
004553AF |. BA 10000000 MOV EDX, 10 ; 否则,继续
004553B4 |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4] ; 同样是取用户名长度
004553B7 |. E8 18FBFFFF CALL 00454ED4 ; 跟进去,发现是根据用户名长度设置标志,长度≥16就置0,否则置1
004553BC |. 803B 00 CMP BYTE PTR DS:[EBX], 0 ; 比较标志位是否为0
004553BF |. 0F84 97050000 JE 0045595C ; 是就跳向失败
看来用户名长度只能在5~15之间才行.
004553C5 |. 8D55 F4 LEA EDX, DWORD PTR SS:[EBP-C] ; 否则,继续
004553C8 |. 8B87 0C030000 MOV EAX, DWORD PTR DS:[EDI+30C]
004553CE |. E8 D5E5FDFF CALL 004339A8 ; 获得注册码
004553D3 |. BA 0C000000 MOV EDX, 0C
004553D8 |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
004553DB |. E8 54FBFFFF CALL 00454F34 ; 根据输入的注册码的长度置标志,长度不是12就置0,否则置1
004553E0 |. 803B 00 CMP BYTE PTR DS:[EBX], 0 ; 比较标志是否为0
004553E3 |. 0F84 73050000 JE 0045595C ; 是就跳向失败
看来注册码长度只能是12位的.
004553E9 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8] ; 不是就继续
004553EC |. 50 PUSH EAX
004553ED |. B9 06000000 MOV ECX, 6
004553F2 |. BA 01000000 MOV EDX, 1
004553F7 |. 8B06 MOV EAX, DWORD PTR DS:[ESI] ; 固定字符串
固定字符串为'ORACLE-BenQ-HP-IBM-SIEMENS-CISCO SYSTEMS-intel-Sun-DELL-SYBASE-Maxtor-lenovo',看来注册码的计算和它有关系^_^
004553F9 |. E8 76EFFAFF CALL 00404374 ; 从第1位起,共取6位,得'ORACLE'
004553FE |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455401 E8 AEF8FFFF CALL 00454CB4 ; 取得字串的ASCII码之和,得A
00455406 |. 50 PUSH EAX
00455407 |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
0045540A |. E8 A5F8FFFF CALL 00454CB4 ; 用户名的ASCII码之和,得B
0045540F |. 5A POP EDX
00455410 |. E8 47FAFFFF CALL 00454E5C ; B异或A,得C
00455415 |. BA 0A000000 MOV EDX, 0A
0045541A |. E8 45FAFFFF CALL 00454E64 ; C除以10,取余数,得D
0045541F |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
00455422 |. E8 F928FBFF CALL 00407D20 ; 取D的ASCII码
00455427 |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
0045542A |. 50 PUSH EAX
0045542B |. B9 01000000 MOV ECX, 1
00455430 |. BA 01000000 MOV EDX, 1
00455435 |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C] ; 注册码
00455438 |. E8 37EFFAFF CALL 00404374 ; 取注册码第1位的ASCII码
0045543D |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10] ; D的ASCII码
00455440 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14] ; 注册码第1位的ASCII码
00455443 |. E8 4CFBFFFF CALL 00454F94 ; 比较两个ASCII码,相等标志置1,否则置0
00455448 |. 803B 00 CMP BYTE PTR DS:[EBX], 0 ; 标志与0比较
0045544B 0F84 0B050000 JE 0045595C ; 是0就跳向失败
第1位注册码就应该是余数D了,加油,马上就会知道真相了~~!!
00455451 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8] ; 否则继续
00455454 |. 50 PUSH EAX
00455455 |. B9 04000000 MOV ECX, 4
0045545A |. BA 08000000 MOV EDX, 8
0045545F |. 8B06 MOV EAX, DWORD PTR DS:[ESI] ; 固定字符串
00455461 |. E8 0EEFFAFF CALL 00404374 ; 从第8位起,共取4位,得'BenQ'
00455466 |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455469 |. E8 46F8FFFF CALL 00454CB4 ; 'BenQ'ASCII码之和
0045546E |. 50 PUSH EAX
0045546F |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
00455472 |. E8 3DF8FFFF CALL 00454CB4 ; 用户名ASCII码之和
00455477 |. 5A POP EDX
00455478 |. E8 E3F9FFFF CALL 00454E60 ; 相与
0045547D |. BA 0A000000 MOV EDX, 0A
00455482 |. E8 DDF9FFFF CALL 00454E64 ; 相与结果除以10,取余数
00455487 |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
0045548A |. E8 9128FBFF CALL 00407D20 ; 余数的ASCII码
第2位注册码,嘿嘿~~~~
0045548F |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
00455492 |. 50 PUSH EAX
00455493 |. B9 01000000 MOV ECX, 1
00455498 |. BA 02000000 MOV EDX, 2
0045549D |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
004554A0 |. E8 CFEEFAFF CALL 00404374 ; 注册码第2位
004554A5 |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
004554A8 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
004554AB |. E8 E4FAFFFF CALL 00454F94 ; 两数必须相等
004554B0 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
004554B3 0F84 A3040000 JE 0045595C
004554B9 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
004554BC |. 50 PUSH EAX
004554BD |. B9 02000000 MOV ECX, 2
004554C2 |. BA 0D000000 MOV EDX, 0D
004554C7 |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
004554C9 |. E8 A6EEFAFF CALL 00404374 ; 取得字串'HP'
004554CE |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
004554D1 |. E8 DEF7FFFF CALL 00454CB4 ; 'HP'ASCII之和
004554D6 |. 50 PUSH EAX
004554D7 |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
004554DA |. E8 D5F7FFFF CALL 00454CB4 ; 用户名ASCII码之和
004554DF |. 5A POP EDX
004554E0 |. E8 7BF9FFFF CALL 00454E60 ; 相与
004554E5 |. BA 0A000000 MOV EDX, 0A
004554EA |. E8 75F9FFFF CALL 00454E64 ; 相与结果除以10,取余数
第3位了........看来注册码的计算都是如上所述,依葫芦画瓢,便可全部得出.只是除数有变化(10/7/9三种情况),逻辑运算有两种情况(异或、与)看下面的代码便知......
004554EF |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
004554F2 |. E8 2928FBFF CALL 00407D20
004554F7 |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
004554FA |. 50 PUSH EAX
004554FB |. B9 01000000 MOV ECX, 1
00455500 |. BA 03000000 MOV EDX, 3
00455505 |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
00455508 |. E8 67EEFAFF CALL 00404374 ; 注册码第3位
0045550D |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
00455510 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
00455513 |. E8 7CFAFFFF CALL 00454F94 ; 两数必须相等
00455518 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
0045551B 0F84 3B040000 JE 0045595C
00455521 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
00455524 |. 50 PUSH EAX
00455525 |. B9 03000000 MOV ECX, 3
0045552A |. BA 10000000 MOV EDX, 10
0045552F |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
00455531 |. E8 3EEEFAFF CALL 00404374 ; 'IBM'
00455536 |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455539 |. E8 76F7FFFF CALL 00454CB4
0045553E |. 50 PUSH EAX
0045553F |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
00455542 |. E8 6DF7FFFF CALL 00454CB4
00455547 |. 5A POP EDX
00455548 |. E8 0FF9FFFF CALL 00454E5C ; 异或
0045554D |. BA 0A000000 MOV EDX, 0A ; /10
00455552 |. E8 0DF9FFFF CALL 00454E64
00455557 |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
0045555A |. E8 C127FBFF CALL 00407D20
0045555F |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
00455562 |. 50 PUSH EAX
00455563 |. B9 01000000 MOV ECX, 1
00455568 |. BA 04000000 MOV EDX, 4
0045556D |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
00455570 |. E8 FFEDFAFF CALL 00404374 ; 注册码第4位
00455575 |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
00455578 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
0045557B |. E8 14FAFFFF CALL 00454F94
00455580 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
00455583 0F84 D3030000 JE 0045595C
00455589 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
0045558C |. 50 PUSH EAX
0045558D |. B9 07000000 MOV ECX, 7
00455592 |. BA 14000000 MOV EDX, 14
00455597 |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
00455599 |. E8 D6EDFAFF CALL 00404374 ; 'SIEMENS'
0045559E |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
004555A1 |. E8 0EF7FFFF CALL 00454CB4
004555A6 |. 50 PUSH EAX
004555A7 |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
004555AA |. E8 05F7FFFF CALL 00454CB4
004555AF |. 5A POP EDX
004555B0 |. E8 A7F8FFFF CALL 00454E5C ; 异或
004555B5 |. BA 07000000 MOV EDX, 7
004555BA |. E8 A5F8FFFF CALL 00454E64 ; /7
004555BF |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
004555C2 |. E8 5927FBFF CALL 00407D20
004555C7 |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
004555CA |. 50 PUSH EAX
004555CB |. B9 01000000 MOV ECX, 1
004555D0 |. BA 05000000 MOV EDX, 5
004555D5 |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
004555D8 |. E8 97EDFAFF CALL 00404374 ; 注册码第5位
004555DD |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
004555E0 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
004555E3 |. E8 ACF9FFFF CALL 00454F94
004555E8 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
004555EB 0F84 6B030000 JE 0045595C
004555F1 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
004555F4 |. 50 PUSH EAX
004555F5 |. B9 0D000000 MOV ECX, 0D
004555FA |. BA 1C000000 MOV EDX, 1C
004555FF |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
00455601 |. E8 6EEDFAFF CALL 00404374 ; 'CISCO SYSTEMS'
00455606 |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455609 |. E8 A6F6FFFF CALL 00454CB4
0045560E |. 50 PUSH EAX
0045560F |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
00455612 |. E8 9DF6FFFF CALL 00454CB4
00455617 |. 5A POP EDX
00455618 |. E8 43F8FFFF CALL 00454E60 ; 相与
0045561D |. BA 09000000 MOV EDX, 9
00455622 |. E8 3DF8FFFF CALL 00454E64 ; /9
00455627 |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
0045562A |. E8 F126FBFF CALL 00407D20
0045562F |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
00455632 |. 50 PUSH EAX
00455633 |. B9 01000000 MOV ECX, 1
00455638 |. BA 06000000 MOV EDX, 6
0045563D |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
00455640 |. E8 2FEDFAFF CALL 00404374 ; 注册码第6位
00455645 |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
00455648 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
0045564B |. E8 44F9FFFF CALL 00454F94
00455650 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
00455653 0F84 03030000 JE 0045595C
00455659 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
0045565C |. 50 PUSH EAX
0045565D |. B9 05000000 MOV ECX, 5
00455662 |. BA 2A000000 MOV EDX, 2A
00455667 |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
00455669 |. E8 06EDFAFF CALL 00404374 ; 'intel'
0045566E |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455671 |. E8 3EF6FFFF CALL 00454CB4
00455676 |. 50 PUSH EAX
00455677 |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
0045567A |. E8 35F6FFFF CALL 00454CB4
0045567F |. 5A POP EDX
00455680 |. E8 DBF7FFFF CALL 00454E60 ; 相与
00455685 |. BA 0A000000 MOV EDX, 0A ; /10
0045568A |. E8 D5F7FFFF CALL 00454E64
0045568F |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
00455692 |. E8 8926FBFF CALL 00407D20
00455697 |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
0045569A |. 50 PUSH EAX
0045569B |. B9 01000000 MOV ECX, 1
004556A0 |. BA 07000000 MOV EDX, 7
004556A5 |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
004556A8 |. E8 C7ECFAFF CALL 00404374 ; 注册码第7位
004556AD |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
004556B0 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
004556B3 |. E8 DCF8FFFF CALL 00454F94
004556B8 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
004556BB 0F84 9B020000 JE 0045595C
004556C1 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
004556C4 |. 50 PUSH EAX
004556C5 |. B9 03000000 MOV ECX, 3
004556CA |. BA 30000000 MOV EDX, 30
004556CF |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
004556D1 |. E8 9EECFAFF CALL 00404374 ; 'Sun'
004556D6 |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
004556D9 |. E8 D6F5FFFF CALL 00454CB4
004556DE |. 50 PUSH EAX
004556DF |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
004556E2 |. E8 CDF5FFFF CALL 00454CB4
004556E7 |. 5A POP EDX
004556E8 |. E8 6FF7FFFF CALL 00454E5C ; 异或
004556ED |. BA 09000000 MOV EDX, 9
004556F2 |. E8 6DF7FFFF CALL 00454E64 ; /9
004556F7 |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
004556FA |. E8 2126FBFF CALL 00407D20
004556FF |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
00455702 |. 50 PUSH EAX
00455703 |. B9 01000000 MOV ECX, 1
00455708 |. BA 08000000 MOV EDX, 8
0045570D |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
00455710 |. E8 5FECFAFF CALL 00404374 ; 注册码第8位
00455715 |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
00455718 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
0045571B |. E8 74F8FFFF CALL 00454F94
00455720 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
00455723 0F84 33020000 JE 0045595C
00455729 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
0045572C |. 50 PUSH EAX
0045572D |. B9 04000000 MOV ECX, 4
00455732 |. BA 34000000 MOV EDX, 34
00455737 |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
00455739 |. E8 36ECFAFF CALL 00404374 ; 'DELL'
0045573E |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455741 |. E8 6EF5FFFF CALL 00454CB4
00455746 |. 50 PUSH EAX
00455747 |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
0045574A |. E8 65F5FFFF CALL 00454CB4
0045574F |. 5A POP EDX
00455750 |. E8 07F7FFFF CALL 00454E5C ; 异或
00455755 |. BA 07000000 MOV EDX, 7
0045575A |. E8 05F7FFFF CALL 00454E64 ; /7
0045575F |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
00455762 |. E8 B925FBFF CALL 00407D20
00455767 |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
0045576A |. 50 PUSH EAX
0045576B |. B9 01000000 MOV ECX, 1
00455770 |. BA 09000000 MOV EDX, 9
00455775 |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
00455778 |. E8 F7EBFAFF CALL 00404374 ; 注册码第9位
0045577D |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
00455780 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
00455783 |. E8 0CF8FFFF CALL 00454F94
00455788 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
0045578B 0F84 CB010000 JE 0045595C
00455791 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
00455794 |. 50 PUSH EAX
00455795 |. B9 06000000 MOV ECX, 6
0045579A |. BA 39000000 MOV EDX, 39
0045579F |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
004557A1 |. E8 CEEBFAFF CALL 00404374 ; 'SYBASE'
004557A6 |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
004557A9 |. E8 06F5FFFF CALL 00454CB4
004557AE |. 50 PUSH EAX
004557AF |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
004557B2 |. E8 FDF4FFFF CALL 00454CB4
004557B7 |. 5A POP EDX
004557B8 |. E8 9FF6FFFF CALL 00454E5C ; 异或
004557BD |. BA 0A000000 MOV EDX, 0A
004557C2 |. E8 9DF6FFFF CALL 00454E64 ; /10
004557C7 |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
004557CA |. E8 5125FBFF CALL 00407D20
004557CF |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
004557D2 |. 50 PUSH EAX
004557D3 |. B9 01000000 MOV ECX, 1
004557D8 |. BA 0A000000 MOV EDX, 0A
004557DD |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
004557E0 |. E8 8FEBFAFF CALL 00404374 ; 注册码第10位
004557E5 |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
004557E8 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
004557EB |. E8 A4F7FFFF CALL 00454F94
004557F0 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
004557F3 0F84 63010000 JE 0045595C
004557F9 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
004557FC |. 50 PUSH EAX
004557FD |. B9 06000000 MOV ECX, 6
00455802 |. BA 40000000 MOV EDX, 40
00455807 |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
00455809 |. E8 66EBFAFF CALL 00404374 ; 'Maxtor'
0045580E |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455811 |. E8 9EF4FFFF CALL 00454CB4
00455816 |. 50 PUSH EAX
00455817 |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
0045581A |. E8 95F4FFFF CALL 00454CB4
0045581F |. 5A POP EDX
00455820 |. E8 3BF6FFFF CALL 00454E60 ; 相与
00455825 |. BA 0A000000 MOV EDX, 0A
0045582A |. E8 35F6FFFF CALL 00454E64 ; /10
0045582F |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
00455832 |. E8 E924FBFF CALL 00407D20
00455837 |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
0045583A |. 50 PUSH EAX
0045583B |. B9 01000000 MOV ECX, 1
00455840 |. BA 0B000000 MOV EDX, 0B
00455845 |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
00455848 |. E8 27EBFAFF CALL 00404374 ; 注册码第11位
0045584D |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
00455850 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
00455853 |. E8 3CF7FFFF CALL 00454F94
00455858 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
0045585B 0F84 FB000000 JE 0045595C
00455861 |. 8D45 F8 LEA EAX, DWORD PTR SS:[EBP-8]
00455864 |. 50 PUSH EAX
00455865 |. B9 06000000 MOV ECX, 6
0045586A |. BA 47000000 MOV EDX, 47
0045586F |. 8B06 MOV EAX, DWORD PTR DS:[ESI]
00455871 |. E8 FEEAFAFF CALL 00404374 ; 'lenovo'
00455876 |. 8B45 F8 MOV EAX, DWORD PTR SS:[EBP-8]
00455879 |. E8 36F4FFFF CALL 00454CB4
0045587E |. 50 PUSH EAX
0045587F |. 8B45 FC MOV EAX, DWORD PTR SS:[EBP-4]
00455882 |. E8 2DF4FFFF CALL 00454CB4
00455887 |. 5A POP EDX
00455888 |. E8 D3F5FFFF CALL 00454E60 ; 相与
0045588D |. BA 09000000 MOV EDX, 9
00455892 |. E8 CDF5FFFF CALL 00454E64 ; /9
00455897 |. 8D55 F0 LEA EDX, DWORD PTR SS:[EBP-10]
0045589A |. E8 8124FBFF CALL 00407D20
0045589F |. 8D45 EC LEA EAX, DWORD PTR SS:[EBP-14]
004558A2 |. 50 PUSH EAX
004558A3 |. B9 01000000 MOV ECX, 1
004558A8 |. BA 0C000000 MOV EDX, 0C
004558AD |. 8B45 F4 MOV EAX, DWORD PTR SS:[EBP-C]
004558B0 |. E8 BFEAFAFF CALL 00404374 ; 注册码第12位
004558B5 |. 8B55 F0 MOV EDX, DWORD PTR SS:[EBP-10]
004558B8 |. 8B45 EC MOV EAX, DWORD PTR SS:[EBP-14]
004558BB |. E8 D4F6FFFF CALL 00454F94
004558C0 |. 803B 00 CMP BYTE PTR DS:[EBX], 0
004558C3 0F84 93000000 JE 0045595C
到这里12位注册码都计算并比较完了.那下面这个又是比较什么呢?在论坛里看到一些大大们说是比较窗口长度,这里就直接窃取成果了:P,具体怎么得到的还请大家补充,不想追了.
004558C9 |. E8 DAF3FFFF CALL 00454CA8 ; 取窗口长度
004558CE |. 3D FE010000 CMP EAX, 1FE ; 与0x1fe比较
004558D3 |. 0F85 83000000 JNZ 0045595C ; 相等才行
......
3.算法总结
(1)输入的用户名长度必须在5~15之间;
(2)输入的注册码长度必须是12位;
(3)固定字符串为'ORACLE-BenQ-HP-IBM-SIEMENS-CISCO SYSTEMS-intel-Sun-DELL-SYBASE-Maxtor-lenovo';
(4)依次取一个品牌,计算出各位字母的ASCII码的和,得A;
(5)计算出输入的用户名的各位ASCII码之和,得B;
(6)依次得到各位注册码:A与B相异或(或者相与),结果除以10(或者7、9)的余数.
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!
2007年01月23日 0:13:46
注册机及源码见附件.
由于刚学编程,注册机写得很糟,大家不要笑话
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课