分析跟踪了几个小时,没搞懂什么算法,明码的“假”注册码倒跟踪了一堆,试着注册一个也不成功。看下面的代码片断:
005CB980 |. 55 push ebp
005CB981 |. 68 CCB95C00 push 005CB9CC
005CB986 |. 64:FF30 push dword ptr fs:[eax]
005CB989 |. 64:8920 mov dword ptr fs:[eax], esp
005CB98C |. C705 00447400>mov dword ptr [744400], 0AE ; 先置 0AE 未注册标志
005CB996 |. 8D55 FC lea edx, dword ptr [ebp-4]
005CB999 |. 8BC6 mov eax, esi
005CB99B |. E8 8CFDFFFF call 005CB72C
经过分析,凡是[744400]返回的值为0AE,则说明未注册,返回0B2则说明已注册。
005CBCFC .^\75 90 jnz short 005CBC8E
005CBCFE . A1 68CE7200 mov eax, dword ptr [72CE68]
005CBD03 . 8338 03 cmp dword ptr [eax], 3
005CBD06 75 67 jnz short 005CBD6F ; 这里不能跳
005CBD08 . 8D85 E4FEFFFF lea eax, dword ptr [ebp-11C]
005CBD0E . 50 push eax
005CBD0F . B9 11000000 mov ecx, 11
005CBD14 . BA 13000000 mov edx, 13
005CBD19 . 8B45 E4 mov eax, dword ptr [ebp-1C]
005CBD1C . E8 1B9CE3FF call 0040593C
005CBD21 . 8B85 E4FEFFFF mov eax, dword ptr [ebp-11C]
005CBD27 . 50 push eax
005CBD28 . 8D95 E0FEFFFF lea edx, dword ptr [ebp-120]
005CBD2E . B8 54C05C00 mov eax, 005CC054 ; ASCII "F4708EAF14D64A8272F7BF1F090ACB6C8E7A90CC94FBB437E68558A9B81E4BF7"
005CBD33 . E8 F4F9FFFF call 005CB72C
005CBD38 . 8B95 E0FEFFFF mov edx, dword ptr [ebp-120]
005CBD3E . 58 pop eax
005CBD3F . E8 E49AE3FF call 00405828
005CBD44 0F85 4D020000 jnz 005CBF97 ; 这里不能跳
005CBD4A . 8B45 FC mov eax, dword ptr [ebp-4]
005CBD4D . 8B50 40 mov edx, dword ptr [eax+40]
005CBD50 . 8B45 FC mov eax, dword ptr [ebp-4]
005CBD53 . E8 BC040000 call 005CC214
005CBD58 . 84C0 test al, al
005CBD5A . 0F85 37020000 jnz 005CBF97
005CBD60 . C705 00447400>mov dword ptr [744400], 0B2 ; 应该执行到这里
005CBD6A . E9 28020000 jmp 005CBF97
005CBD6F > A1 68CE7200 mov eax, dword ptr [72CE68]
005CBD74 . 8338 00 cmp dword ptr [eax], 0
005CBD77 75 67 jnz short 005CBDE0 ; 这里不能跳
005CBD79 . 8D85 DCFEFFFF lea eax, dword ptr [ebp-124]
005CBD7F . 50 push eax
005CBD80 . B9 11000000 mov ecx, 11
005CBD85 . BA 13000000 mov edx, 13
005CBD8A . 8B45 E4 mov eax, dword ptr [ebp-1C]
005CBD8D . E8 AA9BE3FF call 0040593C
005CBD92 . 8B85 DCFEFFFF mov eax, dword ptr [ebp-124]
005CBD98 . 50 push eax
005CBD99 . 8D95 D8FEFFFF lea edx, dword ptr [ebp-128]
005CBD9F . B8 A0C05C00 mov eax, 005CC0A0 ; ASCII "D72F621FCACA1FD02770013EA56F334F17523F3C02D6BA204451715A23218974"
005CBDA4 . E8 83F9FFFF call 005CB72C
005CBDA9 . 8B95 D8FEFFFF mov edx, dword ptr [ebp-128]
005CBDAF . 58 pop eax
005CBDB0 . E8 739AE3FF call 00405828
005CBDB5 0F85 DC010000 jnz 005CBF97 ; 这里不能跳
005CBDBB . 8B45 FC mov eax, dword ptr [ebp-4]
005CBDBE . 8B50 40 mov edx, dword ptr [eax+40]
005CBDC1 . 8B45 FC mov eax, dword ptr [ebp-4]
005CBDC4 . E8 4B040000 call 005CC214
005CBDC9 . 84C0 test al, al
005CBDCB . 0F85 C6010000 jnz 005CBF97
005CBDD1 . C705 00447400>mov dword ptr [744400], 0B2 ; 应该执行到这里
005CBDDB . E9 B7010000 jmp 005CBF97
005CBDE0 > A1 68CE7200 mov eax, dword ptr [72CE68]
005CBDE5 . 8338 04 cmp dword ptr [eax], 4
005CBDE8 75 67 jnz short 005CBE51
005CBDEA . 8D85 D4FEFFFF lea eax, dword ptr [ebp-12C]
005CBDF0 . 50 push eax
005CBDF1 . B9 11000000 mov ecx, 11
005CBDF6 . BA 13000000 mov edx, 13
005CBDFB . 8B45 E4 mov eax, dword ptr [ebp-1C]
005CBDFE . E8 399BE3FF call 0040593C
005CBE03 . 8B85 D4FEFFFF mov eax, dword ptr [ebp-12C]
005CBE09 . 50 push eax
005CBE0A . 8D95 D0FEFFFF lea edx, dword ptr [ebp-130]
005CBE10 . B8 ECC05C00 mov eax, 005CC0EC ; ASCII "8AA951263242025654DB5978E2CBD56564505B4D3B1B26823AB88A1442256B6C"
005CBE15 . E8 12F9FFFF call 005CB72C
005CBE1A . 8B95 D0FEFFFF mov edx, dword ptr [ebp-130]
005CBE20 . 58 pop eax
005CBE21 . E8 029AE3FF call 00405828
005CBE26 0F85 6B010000 jnz 005CBF97
005CBE2C . 8B45 FC mov eax, dword ptr [ebp-4]
005CBE2F . 8B50 40 mov edx, dword ptr [eax+40]
005CBE32 . 8B45 FC mov eax, dword ptr [ebp-4]
005CBE35 . E8 DA030000 call 005CC214
005CBE3A . 84C0 test al, al
005CBE3C . 0F85 55010000 jnz 005CBF97
005CBE42 . C705 00447400>mov dword ptr [744400], 0B2 ; 应该执行到这里
005CBE4C . E9 46010000 jmp 005CBF97
005CBE51 > A1 68CE7200 mov eax, dword ptr [72CE68]
005CBE56 . 8B00 mov eax, dword ptr [eax]
005CBE58 . 83E8 06 sub eax, 6
005CBE5B . 74 08 je short 005CBE65
005CBE5D . 83C0 FD add eax, -3
005CBE60 . 83E8 02 sub eax, 2
005CBE63 . 73 67 jnb short 005CBECC
005CBE65 > 8D85 CCFEFFFF lea eax, dword ptr [ebp-134]
005CBE6B . 50 push eax
005CBE6C . B9 11000000 mov ecx, 11
005CBE71 . BA 13000000 mov edx, 13
005CBE76 . 8B45 E4 mov eax, dword ptr [ebp-1C]
005CBE79 . E8 BE9AE3FF call 0040593C
005CBE7E . 8B85 CCFEFFFF mov eax, dword ptr [ebp-134]
005CBE84 . 50 push eax
005CBE85 . 8D95 C8FEFFFF lea edx, dword ptr [ebp-138]
005CBE8B . B8 38C15C00 mov eax, 005CC138 ; ASCII "3F3DB35C1B6D495611E5C94AC0377A32260CF7F656092000112894F38907BAB7"
005CBE90 . E8 97F8FFFF call 005CB72C
005CBE95 . 8B95 C8FEFFFF mov edx, dword ptr [ebp-138]
005CBE9B . 58 pop eax
005CBE9C . E8 8799E3FF call 00405828
005CBEA1 0F85 F0000000 jnz 005CBF97 ; 这里不能条
005CBEA7 . 8B45 FC mov eax, dword ptr [ebp-4]
005CBEAA . 8B50 40 mov edx, dword ptr [eax+40]
005CBEAD . 8B45 FC mov eax, dword ptr [ebp-4]
005CBEB0 . E8 5F030000 call 005CC214
005CBEB5 . 84C0 test al, al
005CBEB7 . 0F85 DA000000 jnz 005CBF97
005CBEBD . C705 00447400>mov dword ptr [744400], 0B2 ; 应该执行到这里
005CBEC7 . E9 CB000000 jmp 005CBF97
005CBECC > 8B45 F8 mov eax, dword ptr [ebp-8]
005CBECF . 83E8 02 sub eax, 2 ; Switch (cases 2..5)
005CBED2 . 74 0D je short 005CBEE1
005CBED4 . 48 dec eax
005CBED5 . 74 66 je short 005CBF3D
005CBED7 . 83E8 02 sub eax, 2
005CBEDA . 74 61 je short 005CBF3D
005CBEDC . E9 B6000000 jmp 005CBF97
005CBEE1 > 8D85 C4FEFFFF lea eax, dword ptr [ebp-13C] ; Case 2 of switch 005CBECF
005CBEE7 . 50 push eax
005CBEE8 . B9 11000000 mov ecx, 11
005CBEED . BA 13000000 mov edx, 13
005CBEF2 . 8B45 E4 mov eax, dword ptr [ebp-1C]
005CBEF5 . E8 429AE3FF call 0040593C
005CBEFA . 8B85 C4FEFFFF mov eax, dword ptr [ebp-13C]
005CBF00 . 50 push eax
005CBF01 . 8D95 C0FEFFFF lea edx, dword ptr [ebp-140]
005CBF07 . B8 84C15C00 mov eax, 005CC184 ; ASCII "8CEB8D8701D9C48F63FFAA85FE5C74DDD9BFA1ABE74BF552DF3029B0209BEA94"
005CBF0C . E8 1BF8FFFF call 005CB72C
005CBF11 . 8B95 C0FEFFFF mov edx, dword ptr [ebp-140]
005CBF17 . 58 pop eax
005CBF18 . E8 0B99E3FF call 00405828
005CBF1D . 75 78 jnz short 005CBF97
005CBF1F . 8B45 FC mov eax, dword ptr [ebp-4]
005CBF22 . 8B50 40 mov edx, dword ptr [eax+40]
005CBF25 . 8B45 FC mov eax, dword ptr [ebp-4]
005CBF28 . E8 E7020000 call 005CC214
005CBF2D . 84C0 test al, al
005CBF2F . 75 66 jnz short 005CBF97
005CBF31 . C705 00447400>mov dword ptr [744400], 0B2 ; 应该执行到这里
005CBF3B . EB 5A jmp short 005CBF97
005CBF3D > 8D85 BCFEFFFF lea eax, dword ptr [ebp-144] ; Cases 3,5 of switch 005CBECF
005CBF43 . 50 push eax
005CBF44 . B9 11000000 mov ecx, 11
005CBF49 . BA 13000000 mov edx, 13
005CBF4E . 8B45 E4 mov eax, dword ptr [ebp-1C]
005CBF51 . E8 E699E3FF call 0040593C
005CBF56 . 8B85 BCFEFFFF mov eax, dword ptr [ebp-144]
005CBF5C . 50 push eax
005CBF5D . 8D95 B8FEFFFF lea edx, dword ptr [ebp-148]
005CBF63 . B8 D0C15C00 mov eax, 005CC1D0 ; ASCII "64D9370F358B4A62B33B641413AAA34CAD398BFA82BF1539C4BB71C078F2E3BD"
005CBF68 . E8 BFF7FFFF call 005CB72C
005CBF6D . 8B95 B8FEFFFF mov edx, dword ptr [ebp-148]
005CBF73 . 58 pop eax
005CBF74 . E8 AF98E3FF call 00405828
005CBF79 . 75 1C jnz short 005CBF97
005CBF7B . 8B45 FC mov eax, dword ptr [ebp-4]
005CBF7E . 8B50 40 mov edx, dword ptr [eax+40]
005CBF81 . 8B45 FC mov eax, dword ptr [ebp-4]
005CBF84 . E8 8B020000 call 005CC214
005CBF89 . 84C0 test al, al
005CBF8B . 75 0A jnz short 005CBF97
005CBF8D . C705 00447400>mov dword ptr [744400], 0B2 ; 应该执行到这里
005CBF97 > 8D85 F0FEFFFF lea eax, dword ptr [ebp-110] ; Default case of switch 005CBECF
005CBF9D . E8 7E3FFDFF call 0059FF20
005CBFA2 . 33C0 xor eax, eax
005CBFA4 . 5A pop edx
005CBFA5 . 59 pop ecx
上面代码片断中不断比较诸如:cmp dword ptr [eax], 4 或 cmp dword ptr [eax], 3 或 cmp dword ptr [eax], 0 等等,到底是比较使用的大师属于哪个版本还是????搞不明白。上面有几个 mov dword ptr [744400], 0B2,只要有办法让它跳转到这里,爆破也能成功,但不知道使用过程中有无功能限制没完全测试。
另外一个爆破点就是直接让它不管什么情形始终跳转到分支语句(switch)中的默认支路,即修改前后对照:
修改前:
005CBA2A . E8 6D0FE4FF call 0040C99C
005CBA2F . 8B45 F4 mov eax, dword ptr [ebp-C]
005CBA32 . E8 A59CE3FF call 004056DC
005CBA37 85C0 test eax, eax ; 必须经过这里
005CBA39 0F84 58050000 je 005CBF97
005CBA3F BB 01000000 mov ebx, 1
005CBA44 . 33FF xor edi, edi
005CBA46 . BE 13000000 mov esi, 13
005CBA4B > 8B45 F4 mov eax, dword ptr [ebp-C]
修改后:
005CBA2A . E8 6D0FE4FF call 0040C99C
005CBA2F . 8B45 F4 mov eax, dword ptr [ebp-C]
005CBA32 . E8 A59CE3FF call 004056DC
005CBA37 33C0 xor eax, eax ; 必须经过这里
005CBA39 85C0 test eax, eax
005CBA3B E9 4D050000 jmp 005CBF8D
005CBA40 90 nop
005CBA41 90 nop
005CBA42 90 nop
005CBA43 90 nop
005CBA44 . 33FF xor edi, edi
005CBA46 . BE 13000000 mov esi, 13
005CBA4B > 8B45 F4 mov eax, dword ptr [ebp-C]
不知哪位高手能分析出注册算法,以便学习。
只要能够写出注册机的程序来注册的稳妥些,当然无法通过写注册机来注册或分析算法工作量特别大的除外。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)