对 爱在天涯's另类破解练习 的注册检测方式分析+Delphi注册机实现+CrackMe代码的易语言还原(从四楼开始)
难得周末,今天一上论坛便看到了很多经典的帖子,于是仔细看呀看,发现了其中一篇 爱在天涯 兄写的一个【另类破解练习】,是易语言编
写的,恰好偶也正在学习易语言,嘿嘿,出于爱好和借鉴,自然要下来看看的了。
原帖:http://bbs.pediy.com/showthread.php?t=42539
与其它CrackMe有些不一样,这个东东进了注册界面后,点击注册按钮没有任何提示,看来现在流行这样了,呵呵。反正 爱在天涯 兄也给了2
天时间,偶才不慌呐!决定象小蜗牛一样,慢慢爬!总要找到的,关键在于学习嘛!
打开OD,载入CrackMe程序,F9运行,出现界面后,alt+m 弹出内存窗口,找到:
00409000 00004000 (16384.) 注册 .ecode Imag 01001002 R RWE
这一行上,F2下断,自动停在了:
0040B2EE 55 push ebp
这一行上,F8走一遍:
0040B2EE 55 push ebp ; 界面窗口的时钟事件(因为猛按F9都还是停在这里,想不出来还有其它什么
东东有这样猛)
0040B2EF 8BEC mov ebp, esp
0040B2F1 81EC 04000000 sub esp, 4
0040B2F7 68 3D914000 push 注册.0040913D
0040B2FC FF35 B04CD200 push dword ptr [D24CB0]
0040B302 E8 83FEFFFF call 注册.0040B18A
0040B307 83C4 08 add esp, 8
0040B30A 83F8 00 cmp eax, 0
0040B30D 0F84 08010000 je 注册.0040B41B ; 下面便是注册提示?
0040B313 6A 00 push 0
0040B315 FF35 B04CD200 push dword ptr [D24CB0]
0040B31B 6A FF push -1
0040B31D 6A 08 push 8
0040B31F 68 25000116 push 16010025
0040B324 68 01000152 push 52010001
0040B329 E8 8B140000 call 注册.0040C7B9
0040B32E 83C4 18 add esp, 18
0040B331 6A 00 push 0
0040B333 68 00000000 push 0
0040B338 6A FF push -1
0040B33A 6A 08 push 8
0040B33C 68 82000116 push 16010082
0040B341 68 01000152 push 52010001
0040B346 E8 6E140000 call 注册.0040C7B9
0040B34B 83C4 18 add esp, 18
0040B34E 68 3E914000 push 注册.0040913E ; -,你已经成功注册了.不过这次未对注册算法优化,也没有
用到加密算法!
0040B353 FF35 B04CD200 push dword ptr [D24CB0]
0040B359 68 81914000 push 注册.00409181 ; 恭喜-
0040B35E B9 03000000 mov ecx, 3
0040B363 E8 2AFFFFFF call 注册.0040B292
0040B368 83C4 0C add esp, 0C
0040B36B 8945 FC mov dword ptr [ebp-4], eax
0040B36E 6A 00 push 0
0040B370 6A 00 push 0
0040B372 6A 00 push 0
0040B374 68 01030080 push 80000301
0040B379 6A 00 push 0
0040B37B 68 00000000 push 0
0040B380 68 04000080 push 80000004
0040B385 6A 00 push 0
0040B387 8B45 FC mov eax, dword ptr [ebp-4]
0040B38A 85C0 test eax, eax
0040B38C 75 05 jnz short 注册.0040B393
0040B38E B8 3D914000 mov eax, 注册.0040913D
0040B393 50 push eax
0040B394 68 03000000 push 3
0040B399 BB 00030000 mov ebx, 300
0040B39E E8 1C140000 call 注册.0040C7BF
0040B3A3 83C4 28 add esp, 28
0040B3A6 8B5D FC mov ebx, dword ptr [ebp-4]
0040B3A9 85DB test ebx, ebx
0040B3AB 74 09 je short 注册.0040B3B6
0040B3AD 53 push ebx
0040B3AE E8 00140000 call 注册.0040C7B3
0040B3B3 83C4 04 add esp, 4
0040B3B6 6A 00 push 0
0040B3B8 6A 00 push 0
0040B3BA 6A 00 push 0
0040B3BC 68 01030080 push 80000301
0040B3C1 6A 00 push 0
0040B3C3 68 00000000 push 0
0040B3C8 68 04000080 push 80000004
0040B3CD 6A 00 push 0
0040B3CF 68 87914000 push 注册.00409187 ; 不过你真的可以算是够历害的啦,兄弟该不是爆的吧!!!
0040B3D4 68 03000000 push 3
0040B3D9 BB 00030000 mov ebx, 300
0040B3DE E8 DC130000 call 注册.0040C7BF
0040B3E3 83C4 28 add esp, 28
0040B3E6 6A 00 push 0
0040B3E8 6A 00 push 0
0040B3EA 6A 00 push 0
0040B3EC 68 01030080 push 80000301
0040B3F1 6A 00 push 0
0040B3F3 68 00000000 push 0
0040B3F8 68 04000080 push 80000004
0040B3FD 6A 00 push 0
0040B3FF 68 BC914000 push 注册.004091BC ; 有些另类吧,下次会再加强一些的,谢谢你的支持和参与!
!!
0040B404 68 03000000 push 3
0040B409 BB 00030000 mov ebx, 300
0040B40E E8 AC130000 call 注册.0040C7BF
0040B413 83C4 28 add esp, 28
0040B416 E9 1D000000 jmp 注册.0040B438
0040B41B 6A 00 push 0
0040B41D 68 F5914000 push 注册.004091F5 ; 未注册
0040B422 6A FF push -1
0040B424 6A 08 push 8
0040B426 68 25000116 push 16010025
0040B42B 68 01000152 push 52010001
0040B430 E8 84130000 call 注册.0040C7B9
0040B435 83C4 18 add esp, 18
0040B438 8BE5 mov esp, ebp
0040B43A 5D pop ebp
0040B43B C3 retn
0040B43C 55 push ebp
0040B43D 8BEC mov ebp, esp
0040B43F 6A 00 push 0
0040B441 68 01000000 push 1
0040B446 6A FF push -1
0040B448 6A 05 push 5
0040B44A 68 47000106 push 6010047
0040B44F 68 48000152 push 52010048
0040B454 E8 60130000 call 注册.0040C7B9
0040B459 83C4 18 add esp, 18
0040B45C 68 02000080 push 80000002
0040B461 6A 00 push 0
0040B463 68 01000000 push 1
0040B468 6A 00 push 0
0040B46A 6A 00 push 0
0040B46C 6A 00 push 0
0040B46E 68 01000100 push 10001
0040B473 68 47000106 push 6010047
0040B478 68 48000152 push 52010048
0040B47D 68 03000000 push 3
0040B482 BB 20030000 mov ebx, 320
0040B487 E8 33130000 call 注册.0040C7BF
0040B48C 83C4 28 add esp, 28
0040B48F 8BE5 mov esp, ebp
0040B491 5D pop ebp
0040B492 C3 retn
却没看到相关注册算法什么的,没什么气馁,要这么简单,反而偶才郁闷 :-)
再次F2取消断点后,点击主界面的注册按钮,进入了注册窗口界面了;输入注册名aCaFeeL,注册码1234567890,没有反映,晕!
再看EcE中,发现注册名输入框1中有变动事件,呵呵,进入一看,果然是呀!
*******************************************
注册码第1部分:(注册码输入框1->内容被改变)
*******************************************
0040B6F0 55 push ebp
0040B6F1 8BEC mov ebp, esp
0040B6F3 81EC 3C000000 sub esp, 3C
0040B6F9 68 00000000 push 0
0040B6FE BB C4060000 mov ebx, 6C4 ; 取硬盘特征字
0040B703 E8 B7100000 call 注册.0040C7BF
0040B708 83C4 04 add esp, 4
0040B70B 8945 FC mov dword ptr [ebp-4], eax
0040B70E 68 00000000 push 0
0040B713 BB C4060000 mov ebx, 6C4 ; 取硬盘特征字
0040B718 E8 A2100000 call 注册.0040C7BF
0040B71D 83C4 04 add esp, 4
0040B720 8945 F0 mov dword ptr [ebp-10], eax
0040B723 DB45 F0 fild dword ptr [ebp-10] ; 运行后装入整数(机器码)到ST0
0040B726 DD5D F0 fstp qword ptr [ebp-10] ; 再执行一次ST0出栈操作->ST7
0040B729 DD45 F0 fld qword ptr [ebp-10] ; 装入实数(机器码)到ST0
0040B72C DC35 00924000 fdiv qword ptr [409200] ; * 除法:ST0/3->ST0 *
0040B732 DD5D E8 fstp qword ptr [ebp-18] ; 再执行一次ST0出栈操作
0040B735 DB45 FC fild dword ptr [ebp-4] ; 装入整数(机器码)到ST0
0040B738 DD5D E0 fstp qword ptr [ebp-20] ; 再执行一次ST0出战操作->st7
0040B73B DD45 E0 fld qword ptr [ebp-20] ; 装入实数(机器码)到ST0
0040B73E DC45 E8 fadd qword ptr [ebp-18] ; * 加发:ST0+ST0/3 -> ST0 *
0040B741 DD5D D8 fstp qword ptr [ebp-28]
0040B744 DD45 D8 fld qword ptr [ebp-28]
0040B747 DC25 08924000 fsub qword ptr [409208] ; * 减法:ST0-616583 -> ST0 *
0040B74D DD5D D0 fstp qword ptr [ebp-30]
0040B750 DD45 D0 fld qword ptr [ebp-30]
0040B753 E8 71FFFFFF call 注册.0040B6C9
0040B758 68 01030080 push 80000301 ; 整数型 -> EAX
0040B75D 6A 00 push 0
0040B75F 50 push eax
0040B760 68 01000000 push 1
0040B765 BB D4010000 mov ebx, 1D4 ; 取十六进制文本
0040B76A E8 50100000 call 注册.0040C7BF
0040B76F 83C4 10 add esp, 10
0040B772 8945 CC mov dword ptr [ebp-34], eax
0040B775 6A FF push -1
0040B777 6A 08 push 8 ; 内容
0040B779 68 39000116 push 16010039
0040B77E 68 36000152 push 52010036
0040B783 E8 3D100000 call 注册.0040C7C5
0040B788 83C4 10 add esp, 10
0040B78B 8945 C8 mov dword ptr [ebp-38], eax
0040B78E 8B45 CC mov eax, dword ptr [ebp-34]
0040B791 50 push eax
0040B792 FF75 C8 push dword ptr [ebp-38]
0040B795 E8 F0F9FFFF call 注册.0040B18A
0040B79A 83C4 08 add esp, 8
0040B79D 83F8 00 cmp eax, 0
0040B7A0 B8 00000000 mov eax, 0
0040B7A5 0F94C0 sete al
0040B7A8 8945 C4 mov dword ptr [ebp-3C], eax
0040B7AB 8B5D C8 mov ebx, dword ptr [ebp-38]
0040B7AE 85DB test ebx, ebx
0040B7B0 74 09 je short 注册.0040B7BB
0040B7B2 53 push ebx
0040B7B3 E8 FB0F0000 call 注册.0040C7B3
0040B7B8 83C4 04 add esp, 4
0040B7BB 8B5D CC mov ebx, dword ptr [ebp-34]
0040B7BE 85DB test ebx, ebx
0040B7C0 74 09 je short 注册.0040B7CB
0040B7C2 53 push ebx
0040B7C3 E8 EB0F0000 call 注册.0040C7B3
0040B7C8 83C4 04 add esp, 4
0040B7CB 837D C4 00 cmp dword ptr [ebp-3C], 0
0040B7CF 0F84 22000000 je 注册.0040B7F7 ; 成功便跳
0040B7D5 6A 00 push 0
0040B7D7 68 00000000 push 0
0040B7DC 6A FF push -1
0040B7DE 6A 06 push 6 ; 禁止“注册码二”
0040B7E0 68 3A000116 push 1601003A
0040B7E5 68 36000152 push 52010036
0040B7EA E8 CA0F0000 call 注册.0040C7B9
0040B7EF 83C4 18 add esp, 18
0040B7F2 E9 00000000 jmp 注册.0040B7F7
0040B7F7 8BE5 mov esp, ebp
0040B7F9 5D pop ebp
0040B7FA C3 retn
通过上面偶看到,注册码第1部分只是机器码参与运算;如:我的机器码为:1347718751;
则运算为:(机器码+机器码/3)-616583 =(1347718751+1347718751/3)-616583 = 1796341751;
转换为16进制(int->hex)后为:6B11FFF7;
同样道理,进入注册码第2部分,
*****************************************
注册码第2部分:(注册码输入框2->内容被改变)
*****************************************
0040B493 55 push ebp
0040B494 8BEC mov ebp, esp
0040B496 81EC 0C000000 sub esp, 0C
0040B49C 6A FF push -1
0040B49E 6A 08 push 8
0040B4A0 68 3A000116 push 1601003A
0040B4A5 68 36000152 push 52010036
0040B4AA E8 16130000 call 注册.0040C7C5
0040B4AF 83C4 10 add esp, 10
0040B4B2 8945 FC mov dword ptr [ebp-4], eax
0040B4B5 68 04000080 push 80000004 ; 文本型
0040B4BA 6A 00 push 0
0040B4BC 8B45 FC mov eax, dword ptr [ebp-4]
0040B4BF 85C0 test eax, eax
0040B4C1 75 05 jnz short 注册.0040B4C8
0040B4C3 B8 3D914000 mov eax, 注册.0040913D
0040B4C8 50 push eax
0040B4C9 68 01000000 push 1
0040B4CE BB 30010000 mov ebx, 130 ; 取文本长度
0040B4D3 E8 E7120000 call 注册.0040C7BF
0040B4D8 83C4 10 add esp, 10
0040B4DB 8945 F8 mov dword ptr [ebp-8], eax
0040B4DE 8B5D FC mov ebx, dword ptr [ebp-4]
0040B4E1 85DB test ebx, ebx
0040B4E3 74 09 je short 注册.0040B4EE
0040B4E5 53 push ebx
0040B4E6 E8 C8120000 call 注册.0040C7B3
0040B4EB 83C4 04 add esp, 4
0040B4EE 837D F8 08 cmp dword ptr [ebp-8], 8 ; 是否为8位数
0040B4F2 0F85 C6010000 jnz 注册.0040B6BE ; 不能跳
0040B4F8 6A FF push -1
0040B4FA 6A 08 push 8 ; 内容
0040B4FC 68 3A000116 push 1601003A
0040B501 68 36000152 push 52010036
0040B506 E8 BA120000 call 注册.0040C7C5
0040B50B 83C4 10 add esp, 10
0040B50E 8945 FC mov dword ptr [ebp-4], eax
0040B511 68 01030080 push 80000301 ; 整数型
0040B516 6A 00 push 0
0040B518 68 01000000 push 1
0040B51D 68 04000080 push 80000004 ; 文本型
0040B522 6A 00 push 0
0040B524 8B45 FC mov eax, dword ptr [ebp-4]
0040B527 85C0 test eax, eax
0040B529 75 05 jnz short 注册.0040B530
0040B52B B8 3D914000 mov eax, 注册.0040913D ;常量
0040B530 50 push eax
0040B531 68 02000000 push 2
0040B536 BB 34010000 mov ebx, 134 ; 取文本左边
0040B53B E8 7F120000 call 注册.0040C7BF
0040B540 83C4 1C add esp, 1C
0040B543 8945 F8 mov dword ptr [ebp-8], eax
0040B546 8B5D FC mov ebx, dword ptr [ebp-4]
0040B549 85DB test ebx, ebx
0040B54B 74 09 je short 注册.0040B556
0040B54D 53 push ebx
0040B54E E8 60120000 call 注册.0040C7B3
0040B553 83C4 04 add esp, 4
0040B556 68 FC914000 push 注册.004091FC ; C
0040B55B FF75 F8 push dword ptr [ebp-8]
0040B55E E8 27FCFFFF call 注册.0040B18A
0040B563 83C4 08 add esp, 8
0040B566 83F8 00 cmp eax, 0
0040B569 B8 00000000 mov eax, 0
0040B56E 0F94C0 sete al
0040B571 8945 F4 mov dword ptr [ebp-C], eax
0040B574 8B5D F8 mov ebx, dword ptr [ebp-8]
0040B577 85DB test ebx, ebx
0040B579 74 09 je short 注册.0040B584
0040B57B 53 push ebx
0040B57C E8 32120000 call 注册.0040C7B3
0040B581 83C4 04 add esp, 4
0040B584 837D F4 00 cmp dword ptr [ebp-C], 0
0040B588 0F84 12010000 je 注册.0040B6A0 ; ??
0040B58E 6A FF push -1
0040B590 6A 08 push 8 ; 内容
0040B592 68 3A000116 push 1601003A
0040B597 68 36000152 push 52010036
0040B59C E8 24120000 call 注册.0040C7C5
0040B5A1 83C4 10 add esp, 10
0040B5A4 8945 FC mov dword ptr [ebp-4], eax
0040B5A7 68 01030080 push 80000301 ; 整数型
0040B5AC 6A 00 push 0
0040B5AE 68 01000000 push 1
0040B5B3 68 04000080 push 80000004 ; 文本型
0040B5B8 6A 00 push 0
0040B5BA 8B45 FC mov eax, dword ptr [ebp-4]
0040B5BD 85C0 test eax, eax
0040B5BF 75 05 jnz short 注册.0040B5C6
0040B5C1 B8 3D914000 mov eax, 注册.0040913D ;常量
0040B5C6 50 push eax
0040B5C7 68 02000000 push 2
0040B5CC BB 38010000 mov ebx, 138 ; 取文本右边
0040B5D1 E8 E9110000 call 注册.0040C7BF
0040B5D6 83C4 1C add esp, 1C
0040B5D9 8945 F8 mov dword ptr [ebp-8], eax
0040B5DC 8B5D FC mov ebx, dword ptr [ebp-4]
0040B5DF 85DB test ebx, ebx
0040B5E1 74 09 je short 注册.0040B5EC
0040B5E3 53 push ebx
0040B5E4 E8 CA110000 call 注册.0040C7B3
0040B5E9 83C4 04 add esp, 4
0040B5EC 68 FE914000 push 注册.004091FE ; Y
0040B5F1 FF75 F8 push dword ptr [ebp-8]
0040B5F4 E8 91FBFFFF call 注册.0040B18A
0040B5F9 83C4 08 add esp, 8
0040B5FC 83F8 00 cmp eax, 0
0040B5FF B8 00000000 mov eax, 0
0040B604 0F94C0 sete al
0040B607 8945 F4 mov dword ptr [ebp-C], eax
0040B60A 8B5D F8 mov ebx, dword ptr [ebp-8]
0040B60D 85DB test ebx, ebx
0040B60F 74 09 je short 注册.0040B61A
0040B611 53 push ebx
0040B612 E8 9C110000 call 注册.0040C7B3
0040B617 83C4 04 add esp, 4
0040B61A 837D F4 00 cmp dword ptr [ebp-C], 0
0040B61E 0F84 3E000000 je 注册.0040B662
0040B624 833D B44CD200 0>cmp dword ptr [D24CB4], 0
0040B62B 0F85 0F000000 jnz 注册.0040B640
0040B631 C705 B44CD200 0>mov dword ptr [D24CB4], 4
0040B63B E9 00000000 jmp 注册.0040B640
0040B640 6A 00 push 0
0040B642 68 00000000 push 0
0040B647 6A FF push -1
0040B649 6A 06 push 6 ; 禁止->注册码三
0040B64B 68 3B000116 push 1601003B
0040B650 68 36000152 push 52010036
0040B655 E8 5F110000 call 注册.0040C7B9
0040B65A 83C4 18 add esp, 18
0040B65D E9 1C000000 jmp 注册.0040B67E
0040B662 833D B44CD200 0>cmp dword ptr [D24CB4], 0
0040B669 0F85 0F000000 jnz 注册.0040B67E
0040B66F C705 B44CD200 0>mov dword ptr [D24CB4], 3
0040B679 E9 00000000 jmp 注册.0040B67E
0040B67E 6A 00 push 0
0040B680 68 00000000 push 0
0040B685 6A FF push -1
0040B687 6A 06 push 6 ; 禁止->注册码三
0040B689 68 3B000116 push 1601003B
0040B68E 68 36000152 push 52010036
0040B693 E8 21110000 call 注册.0040C7B9
0040B698 83C4 18 add esp, 18
0040B69B E9 19000000 jmp 注册.0040B6B9
0040B6A0 833D B44CD200 0>cmp dword ptr [D24CB4], 0
0040B6A7 0F85 0C000000 jnz 注册.0040B6B9
0040B6AD 8305 B44CD200 0>add dword ptr [D24CB4], 2
0040B6B4 E9 00000000 jmp 注册.0040B6B9
0040B6B9 E9 07000000 jmp 注册.0040B6C5
0040B6BE 8305 B44CD200 0>add dword ptr [D24CB4], 0F
0040B6C5 8BE5 mov esp, ebp
0040B6C7 5D pop ebp
0040B6C8 C3 retn
通过上面看到,没有算法,但有检测了,要让第三个注册码输入框3激活,第二个注册码输入框2的内容应先为:PYxxxxxY的格式,凑够8位数,
以便开启第三个注册码输入框;
第三个注册框没有内容改动触发的事件了,但是有个’时钟周期的检测运算’:
0040BECF 55 push ebp ; 时钟周期事件
0040BED0 8BEC mov ebp, esp
0040BED2 81EC 1C000000 sub esp, 1C
0040BED8 6A FF push -1
0040BEDA 6A 08 push 8
0040BEDC 68 3B000116 push 1601003B ; 注册码三编辑框
0040BEE1 68 36000152 push 52010036
0040BEE6 E8 DA080000 call 注册.0040C7C5
0040BEEB 83C4 10 add esp, 10
0040BEEE 8945 FC mov dword ptr [ebp-4], eax
0040BEF1 68 21010000 push 121 ; DW520ZCY
0040BEF6 FF75 FC push dword ptr [ebp-4]
0040BEF9 E8 8CF2FFFF call 注册.0040B18A ; 检测
0040BEFE 83C4 08 add esp, 8
0040BF01 83F8 00 cmp eax, 0
0040BF04 B8 00000000 mov eax, 0
0040BF09 0F94C0 sete al
0040BF0C 8945 F8 mov dword ptr [ebp-8], eax
0040BF0F 8B5D FC mov ebx, dword ptr [ebp-4]
0040BF12 85DB test ebx, ebx
0040BF14 74 09 je short 注册.0040BF1F
0040BF16 53 push ebx
0040BF17 E8 97080000 call 注册.0040C7B3
0040BF1C 83C4 04 add esp, 4
0040BF1F 837D F8 00 cmp dword ptr [ebp-8], 0
0040BF23 0F84 5B010000 je 注册.0040C084 ; ??
0040BF29 833D 08000000 0>cmp dword ptr [8], 0
0040BF30 0F85 0D000000 jnz 注册.0040BF43
0040BF36 8305 04000000 0>add dword ptr [4], 4
0040BF3D FF05 08000000 inc dword ptr [8]
0040BF43 68 01060080 push 80000601
0040BF48 68 00002040 push 40200000
0040BF4D 68 00000000 push 0
0040BF52 DB05 04000000 fild dword ptr [4] ; 十进制 -> ST0
0040BF58 DD5D F8 fstp qword ptr [ebp-8] ; ST0 -> St7
0040BF5B 68 01060080 push 80000601
0040BF60 FF75 FC push dword ptr [ebp-4]
0040BF63 FF75 F8 push dword ptr [ebp-8]
0040BF66 68 02000000 push 2
0040BF6B BB 48000000 mov ebx, 48 ; 求余数 mod
0040BF70 E8 4A080000 call 注册.0040C7BF
0040BF75 83C4 1C add esp, 1C
0040BF78 8945 E8 mov dword ptr [ebp-18], eax
0040BF7B 8955 EC mov dword ptr [ebp-14], edx
0040BF7E DD45 E8 fld qword ptr [ebp-18]
0040BF81 D9E4 ftst ; St0与0比较
0040BF83 DFE0 fstsw ax ; 保存状态字的值->AX
0040BF85 F6C4 01 test ah, 1 ; 与1比较
0040BF88 74 02 je short 注册.0040BF8C
0040BF8A D9E0 fchs
0040BF8C DC1D 2A010000 fcomp qword ptr [12A] ; 实数比较 ST0-??(2)的结果标志位
0040BF92 DFE0 fstsw ax ; 保存状态字的值->AX
0040BF94 F6C4 41 test ah, 41 ; 与41(65)比较
0040BF97 0F84 E2000000 je 注册.0040C07F
0040BF9D 6A 00 push 0
0040BF9F 68 00000000 push 0
0040BFA4 6A FF push -1
0040BFA6 6A 05 push 5 ; 可视“注册1”
0040BFA8 68 3E000116 push 1601003E
0040BFAD 68 36000152 push 52010036
0040BFB2 E8 02080000 call 注册.0040C7B9
0040BFB7 83C4 18 add esp, 18
0040BFBA 6A 00 push 0
0040BFBC 68 01000000 push 1
0040BFC1 6A FF push -1
0040BFC3 6A 06 push 6 ; 禁止“注册”
0040BFC5 68 3C000116 push 1601003C
0040BFCA 68 36000152 push 52010036
0040BFCF E8 E5070000 call 注册.0040C7B9
0040BFD4 83C4 18 add esp, 18
0040BFD7 6A FF push -1
0040BFD9 6A 08 push 8 ; 内容
0040BFDB 68 3A000116 push 1601003A
0040BFE0 68 36000152 push 52010036
0040BFE5 E8 DB070000 call 注册.0040C7C5
0040BFEA 83C4 10 add esp, 10
0040BFED 8945 FC mov dword ptr [ebp-4], eax
0040BFF0 68 32010000 push 132 ; 12345678
0040BFF5 FF75 FC push dword ptr [ebp-4]
0040BFF8 E8 8DF1FFFF call 注册.0040B18A
0040BFFD 83C4 08 add esp, 8
0040C000 83F8 00 cmp eax, 0
0040C003 B8 00000000 mov eax, 0
0040C008 0F94C0 sete al
0040C00B 8945 F8 mov dword ptr [ebp-8], eax
0040C00E 8B5D FC mov ebx, dword ptr [ebp-4]
0040C011 85DB test ebx, ebx
0040C013 74 09 je short 注册.0040C01E
0040C015 53 push ebx
0040C016 E8 98070000 call 注册.0040C7B3
0040C01B 83C4 04 add esp, 4
0040C01E 837D F8 00 cmp dword ptr [ebp-8], 0
0040C022 0F84 57000000 je 注册.0040C07F
0040C028 6A FF push -1
0040C02A 6A 08 push 8 ; 内容(“用户名”)
0040C02C 68 38000116 push 16010038
0040C031 68 36000152 push 52010036
0040C036 E8 8A070000 call 注册.0040C7C5
0040C03B 83C4 10 add esp, 10
0040C03E 8945 FC mov dword ptr [ebp-4], eax
0040C041 8B45 FC mov eax, dword ptr [ebp-4]
0040C044 50 push eax
0040C045 8B1D 00000000 mov ebx, dword ptr [0]
0040C04B 85DB test ebx, ebx
0040C04D 74 09 je short 注册.0040C058
0040C04F 53 push ebx
0040C050 E8 5E070000 call 注册.0040C7B3
0040C055 83C4 04 add esp, 4
0040C058 58 pop eax
0040C059 A3 00000000 mov dword ptr [0], eax
0040C05E 68 01000100 push 10001
0040C063 68 35000106 push 6010035 ; 窗口2(注册窗口)
0040C068 68 36000152 push 52010036
0040C06D 68 01000000 push 1
0040C072 BB 60030000 mov ebx, 360 ; 销毁
0040C077 E8 43070000 call 注册.0040C7BF
0040C07C 83C4 10 add esp, 10
0040C07F E9 00000000 jmp 注册.0040C084
0040C084 8BE5 mov esp, ebp
0040C086 5D pop ebp
0040C087 C3 retn ; 结束
通过上面看到,时钟周期内检测运算为:注册码3部分固定为:DW520ZCY字符串;注册码2部分固定为:12345678字符串。
这不是奇怪了了吗?明明注册码2应为PYxxxxxY格式,怎么又要为12345678了?呵呵,那一定是 爱在天涯 兄的这个东东还有检测了。忘了‘注
册码输入框2的内容被改变事件’了吗?它检查的就是时钟周期事件与注册码输入框2的内容被改变事件相配合,体现的便是回写这个思路呀!
呵呵,一个很好的检测思路,偶咋从没有想起过呐!厉害的 爱在天涯 兄弟,向他学习。
一组可用的注册信息:
注册名:aCaFeeL
第一次输入的注册码:6B11FFF7-CY11111Y-DW520ZCY
第二次输入的注册码: 6B11FFF7-12345678-DW520ZCY
然后稍等一下。
既然了解了 爱在天涯 兄的思路,那么偶自己也照做一个来玩玩,嘿嘿。
通过上面的分析后得知,该CrackMe的保护思路为:
1。注册界面中的注册码输入框1内容被改变事件实施检测,符合便激活注册码输入框2,使其可用;
2。注册码输入框2内容被改变事件实施检测,符合CYxxxxxY格式便激活注册码输入框3,使其可用;
3。注册界面中的时钟事件检测注册码输入框3中的内容(要配合注册码输入框2中的内容被改动,才能符合);
4。如符合,注册界面中的时钟事件再检测注册码输入框2中的内容;
5。主界面中的时钟事件同时检测注册界面传过来的消息,一旦符合,便OK。(这里还大有文章可作呀,嘿嘿)
附上Delphi写的KeyGen源码: keygenSRC.rar
附上易语言写的
一个模仿爱在天涯兄弟的检测程序: 请到四楼继续看->
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)