-
-
[旧帖] [原创]爆破Crackme_S.rar_079 0.00雪花
-
发表于: 2016-1-17 19:59 1675
-
crackme提供者:4st0ne
原帖:http://bbs.pediy.com/showthread.php?t=8024
工具:od
平台:winxpsp3
又一个有壳的程序,和前面的壳类似,脱掉,开始爆破。
0040E4A4 50 push eax
0040E4A5 53 push ebx
0040E4A6 E8 0943FFFF call 004027B4 ; CreateProcessA
程序在启动后不久创建了一个进程。那么,是什么进程呢?看一下数据解释窗口就明白了。
eax=0015E214, (ASCII "C:\Documents and Settings\Administrator\My Documents\Crackme_S.rar_079\test.exe 4st0ne")
原来是自身,只不过加了参数。接下来,
0040E83B 50 push eax
0040E83C E8 9B3EFFFF call 004026DC ; DebugActiveProcessA
0040E841 8B35 34104000 mov esi, dword ptr [<&MSVBVM60.__vbaSetSyst>; MSVBVM60.__vbaSetSystemError
0040E847 FFD6 call esi
0040E849 8D4D 84 lea ecx, dword ptr [ebp-7C]
0040E84C 68 48284000 push 00402848 ; UNICODE "GO!"
0040E851 51 push ecx
0040E852 FF15 DC104000 call dword ptr [<&MSVBVM60.__vbaStrToAnsi>] ; MSVBVM60.__vbaStrToAnsi
0040E858 50 push eax
0040E859 6A 00 push 0
0040E85B 68 03001F00 push 1F0003
0040E860 E8 1F3DFFFF call 00402584 ; OpenEvenA
0040E865 8BF8 mov edi, eax
0040E867 FFD6 call esi
0040E869 8D4D 84 lea ecx, dword ptr [ebp-7C]
0040E86C FF15 00114000 call dword ptr [<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0040E872 57 push edi
0040E873 E8 403CFFFF call 004024B8 ; SetEven
0040E878 FFD6 call esi
0040E87A 8B1D 14104000 mov ebx, dword ptr [<&MSVBVM60.__vbaEnd>] ; MSVBVM60.__vbaEnd
0040E880 8D55 8C lea edx, dword ptr [ebp-74]
0040E883 6A FF push -1
0040E885 52 push edx
0040E886 E8 053EFFFF call 00402690 ; WaitforDebugEven
0040E88B FFD6 call esi
0040E88D 837D 8C 05 cmp dword ptr [ebp-74], 5
0040E891 75 28 jnz short 0040E8BB
0040E893 8B45 90 mov eax, dword ptr [ebp-70]
0040E896 50 push eax
0040E897 6A 00 push 0
0040E899 68 FF0F1F00 push 1F0FFF
0040E89E E8 C93EFFFF call 0040276C ; OpenProcess
0040E8A3 8BF8 mov edi, eax
0040E8A5 FFD6 call esi
0040E8A7 6A 00 push 0
0040E8A9 57 push edi
0040E8AA E8 793EFFFF call 00402728 ; TerminateProcess
0040E8AF FFD6 call esi
0040E8B1 57 push edi
0040E8B2 E8 893CFFFF call 00402540 ; CloseHandle
0040E8B7 FFD6 call esi
0040E8B9 FFD3 call ebx
0040E8BB 8B4D 94 mov ecx, dword ptr [ebp-6C]
0040E8BE 8B55 90 mov edx, dword ptr [ebp-70]
0040E8C1 68 02000100 push 10002 ; UNICODE "LLUSERSPROFILE=C:\Documents and Settings\All Users"
0040E8C6 51 push ecx
0040E8C7 52 push edx
0040E8C8 E8 633DFFFF call 00402630 ; ContinueDebugEven
0040E8CD FFD6 call esi
0040E8CF ^ EB AF jmp short 0040E880
程序对创建的进程进行调试模拟循环。显然要爆破这个程序就要调试被创建的进程才行。那么,怎样调试第二个进程呢?我们注意到程序在创建第二个进程的时候是带参数的。同时,在程序启动后,
0040E1E0 BA 24284000 mov edx, 00402824 ; UNICODE "4st0ne"
0040E1E5 8D4D B8 lea ecx, dword ptr [ebp-48]
0040E1E8 FFD6 call esi
0040E1EA 8D85 34FFFFFF lea eax, dword ptr [ebp-CC]
0040E1F0 50 push eax
0040E1F1 FF15 78104000 call dword ptr [<&MSVBVM60.rtcCommandVar>] ; MSVBVM60.rtcCommandVar
0040E1F7 8D95 34FFFFFF lea edx, dword ptr [ebp-CC]
0040E1FD 8D8D DCFEFFFF lea ecx, dword ptr [ebp-124]
0040E203 FF15 08104000 call dword ptr [<&MSVBVM60.__vbaVarMove>] ; MSVBVM60.__vbaVarMove
0040E209 8B35 70104000 mov esi, dword ptr [<&MSVBVM60.__vbaVarTstE>; MSVBVM60.__vbaVarTstEq
0040E20F 8D8D DCFEFFFF lea ecx, dword ptr [ebp-124]
0040E215 8D95 24FFFFFF lea edx, dword ptr [ebp-DC]
0040E21B BF 08800000 mov edi, 8008
0040E220 51 push ecx
0040E221 52 push edx
0040E222 C785 2CFFFFFF 4>mov dword ptr [ebp-D4], 00402244
0040E22C 89BD 24FFFFFF mov dword ptr [ebp-DC], edi
0040E232 FFD6 call esi ; MSVBVM60.__vbaVarTstEq
0040E234 66:85C0 test ax, ax ;检查命令行参数
0040E237 0F84 FA020000 je 0040E537 ;根据结果分支
程序检查命令行参数后进行了分支。显然,我们人工加上参数就可以直接调试第二个进程。加上参数后我们如愿进入分支,
0040E548 8995 2CFFFFFF mov dword ptr [ebp-D4], edx
0040E54E 89BD 24FFFFFF mov dword ptr [ebp-DC], edi
0040E554 FFD6 call esi
0040E556 66:85C0 test ax, ax ;检查
0040E559 0F84 E2000000 je 0040E641 ;(爆破点)
程序再次检查是否采用非正常手段进入分支,爆破。接下来,
0040E59A 6A FF push -1
0040E59C 57 push edi
0040E59D E8 4642FFFF call 004027E8 ; WaitforsingleObject
0040E5A2 FFD6 call esi
我们需要人为跳过这几条指令,否则在主进程没有运行的情况下执行这个调用就陷入死等待状态了。接下来就该寻找注册响应函数了。
0040D8B3 . 51 push ecx
0040D8B4 . 68 44224000 push 00402244
0040D8B9 . FF15 6C104000 call dword ptr [<&MSVBVM60.__vbaStrCmp>] ; MSVBVM60.__vbaStrCmp
0040D8BF . 8B55 B0 mov edx, dword ptr [ebp-50]
0040D8C2 . 8BF0 mov esi, eax
0040D8C4 . F7DE neg esi
0040D8C6 . 1BF6 sbb esi, esi
0040D8C8 . 52 push edx ; /String
0040D8C9 . 46 inc esi ; |
0040D8CA . F7DE neg esi ; |
0040D8CC . FF15 10104000 call dword ptr [<&MSVBVM60.__vbaLenBstr>] ; \__vbaLenBstr
0040D8D2 . 33C9 xor ecx, ecx
0040D8D4 . 83F8 05 cmp eax, 5 ;要求用户名长度大于5
0040D8D7 . 8D55 B0 lea edx, dword ptr [ebp-50]
0040D8DA . 8D45 B4 lea eax, dword ptr [ebp-4C]
0040D8DD 0F9CC1 setl cl ;处理比较结果
0040D8E0 . 52 push edx
0040D8E1 . 50 push eax
0040D8E2 . F7D9 neg ecx
0040D8E4 . 6A 02 push 2
0040D8E6 . 0BF1 or esi, ecx ;结果传到esi
0040D8E8 . FF15 C4104000 call dword ptr [<&MSVBVM60.__vbaFreeStrList>>; MSVBVM60.__vbaFreeStrList
0040D8EE . 8D4D A4 lea ecx, dword ptr [ebp-5C]
0040D8F1 . 8D55 A8 lea edx, dword ptr [ebp-58]
0040D8F4 . 51 push ecx
0040D8F5 . 52 push edx
0040D8F6 . 6A 02 push 2
0040D8F8 . FF15 20104000 call dword ptr [<&MSVBVM60.__vbaFreeObjList>>; MSVBVM60.__vbaFreeObjList
0040D8FE . 83C4 18 add esp, 18
0040D901 66:3BF3 cmp si, bx ;检查比较结果
0040D904 . 0F85 B7040000 jnz 0040DDC1 ;根据结果转向(爆破点)
这个地方爆破后输不输用户名就无所谓了。
0040D9CE > /8B17 mov edx, dword ptr [edi]
0040D9D0 . |57 push edi
0040D9D1 |85F6 test esi, esi ;是否比对完毕?
0040D9D3 . |0F84 63020000 je 0040DC3C ;(爆破点)
爆破点之下是大段比对代码,终于要结束了
0040DC77 . 50 push eax ; /String
0040DC78 . FF15 10104000 call dword ptr [<&MSVBVM60.__vbaLenBstr>] ; \__vbaLenBstr
0040DC7E . 0FBF4D B8 movsx ecx, word ptr [ebp-48]
0040DC82 . 33D2 xor edx, edx
0040DC84 . 3BC8 cmp ecx, eax
0040DC86 0F94C2 sete dl
0040DC89 . F7DA neg edx
0040DC8B . 8D4D B4 lea ecx, dword ptr [ebp-4C]
0040DC8E . 8BF2 mov esi, edx
0040DC90 . FF15 00114000 call dword ptr [<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0040DC96 . 8D4D A8 lea ecx, dword ptr [ebp-58]
0040DC99 . FF15 04114000 call dword ptr [<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
0040DC9F . 66:85F6 test si, si ;再次检查比对结果
0040DCA2 0F84 17010000 je 0040DDBF ;(爆破点)
大功告成,收工。发现程序一个小问题,爆破用户名长度检查后,不输入可以注册成功。
原帖:http://bbs.pediy.com/showthread.php?t=8024
工具:od
平台:winxpsp3
又一个有壳的程序,和前面的壳类似,脱掉,开始爆破。
0040E4A4 50 push eax
0040E4A5 53 push ebx
0040E4A6 E8 0943FFFF call 004027B4 ; CreateProcessA
程序在启动后不久创建了一个进程。那么,是什么进程呢?看一下数据解释窗口就明白了。
eax=0015E214, (ASCII "C:\Documents and Settings\Administrator\My Documents\Crackme_S.rar_079\test.exe 4st0ne")
原来是自身,只不过加了参数。接下来,
0040E83B 50 push eax
0040E83C E8 9B3EFFFF call 004026DC ; DebugActiveProcessA
0040E841 8B35 34104000 mov esi, dword ptr [<&MSVBVM60.__vbaSetSyst>; MSVBVM60.__vbaSetSystemError
0040E847 FFD6 call esi
0040E849 8D4D 84 lea ecx, dword ptr [ebp-7C]
0040E84C 68 48284000 push 00402848 ; UNICODE "GO!"
0040E851 51 push ecx
0040E852 FF15 DC104000 call dword ptr [<&MSVBVM60.__vbaStrToAnsi>] ; MSVBVM60.__vbaStrToAnsi
0040E858 50 push eax
0040E859 6A 00 push 0
0040E85B 68 03001F00 push 1F0003
0040E860 E8 1F3DFFFF call 00402584 ; OpenEvenA
0040E865 8BF8 mov edi, eax
0040E867 FFD6 call esi
0040E869 8D4D 84 lea ecx, dword ptr [ebp-7C]
0040E86C FF15 00114000 call dword ptr [<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0040E872 57 push edi
0040E873 E8 403CFFFF call 004024B8 ; SetEven
0040E878 FFD6 call esi
0040E87A 8B1D 14104000 mov ebx, dword ptr [<&MSVBVM60.__vbaEnd>] ; MSVBVM60.__vbaEnd
0040E880 8D55 8C lea edx, dword ptr [ebp-74]
0040E883 6A FF push -1
0040E885 52 push edx
0040E886 E8 053EFFFF call 00402690 ; WaitforDebugEven
0040E88B FFD6 call esi
0040E88D 837D 8C 05 cmp dword ptr [ebp-74], 5
0040E891 75 28 jnz short 0040E8BB
0040E893 8B45 90 mov eax, dword ptr [ebp-70]
0040E896 50 push eax
0040E897 6A 00 push 0
0040E899 68 FF0F1F00 push 1F0FFF
0040E89E E8 C93EFFFF call 0040276C ; OpenProcess
0040E8A3 8BF8 mov edi, eax
0040E8A5 FFD6 call esi
0040E8A7 6A 00 push 0
0040E8A9 57 push edi
0040E8AA E8 793EFFFF call 00402728 ; TerminateProcess
0040E8AF FFD6 call esi
0040E8B1 57 push edi
0040E8B2 E8 893CFFFF call 00402540 ; CloseHandle
0040E8B7 FFD6 call esi
0040E8B9 FFD3 call ebx
0040E8BB 8B4D 94 mov ecx, dword ptr [ebp-6C]
0040E8BE 8B55 90 mov edx, dword ptr [ebp-70]
0040E8C1 68 02000100 push 10002 ; UNICODE "LLUSERSPROFILE=C:\Documents and Settings\All Users"
0040E8C6 51 push ecx
0040E8C7 52 push edx
0040E8C8 E8 633DFFFF call 00402630 ; ContinueDebugEven
0040E8CD FFD6 call esi
0040E8CF ^ EB AF jmp short 0040E880
程序对创建的进程进行调试模拟循环。显然要爆破这个程序就要调试被创建的进程才行。那么,怎样调试第二个进程呢?我们注意到程序在创建第二个进程的时候是带参数的。同时,在程序启动后,
0040E1E0 BA 24284000 mov edx, 00402824 ; UNICODE "4st0ne"
0040E1E5 8D4D B8 lea ecx, dword ptr [ebp-48]
0040E1E8 FFD6 call esi
0040E1EA 8D85 34FFFFFF lea eax, dword ptr [ebp-CC]
0040E1F0 50 push eax
0040E1F1 FF15 78104000 call dword ptr [<&MSVBVM60.rtcCommandVar>] ; MSVBVM60.rtcCommandVar
0040E1F7 8D95 34FFFFFF lea edx, dword ptr [ebp-CC]
0040E1FD 8D8D DCFEFFFF lea ecx, dword ptr [ebp-124]
0040E203 FF15 08104000 call dword ptr [<&MSVBVM60.__vbaVarMove>] ; MSVBVM60.__vbaVarMove
0040E209 8B35 70104000 mov esi, dword ptr [<&MSVBVM60.__vbaVarTstE>; MSVBVM60.__vbaVarTstEq
0040E20F 8D8D DCFEFFFF lea ecx, dword ptr [ebp-124]
0040E215 8D95 24FFFFFF lea edx, dword ptr [ebp-DC]
0040E21B BF 08800000 mov edi, 8008
0040E220 51 push ecx
0040E221 52 push edx
0040E222 C785 2CFFFFFF 4>mov dword ptr [ebp-D4], 00402244
0040E22C 89BD 24FFFFFF mov dword ptr [ebp-DC], edi
0040E232 FFD6 call esi ; MSVBVM60.__vbaVarTstEq
0040E234 66:85C0 test ax, ax ;检查命令行参数
0040E237 0F84 FA020000 je 0040E537 ;根据结果分支
程序检查命令行参数后进行了分支。显然,我们人工加上参数就可以直接调试第二个进程。加上参数后我们如愿进入分支,
0040E548 8995 2CFFFFFF mov dword ptr [ebp-D4], edx
0040E54E 89BD 24FFFFFF mov dword ptr [ebp-DC], edi
0040E554 FFD6 call esi
0040E556 66:85C0 test ax, ax ;检查
0040E559 0F84 E2000000 je 0040E641 ;(爆破点)
程序再次检查是否采用非正常手段进入分支,爆破。接下来,
0040E59A 6A FF push -1
0040E59C 57 push edi
0040E59D E8 4642FFFF call 004027E8 ; WaitforsingleObject
0040E5A2 FFD6 call esi
我们需要人为跳过这几条指令,否则在主进程没有运行的情况下执行这个调用就陷入死等待状态了。接下来就该寻找注册响应函数了。
0040D8B3 . 51 push ecx
0040D8B4 . 68 44224000 push 00402244
0040D8B9 . FF15 6C104000 call dword ptr [<&MSVBVM60.__vbaStrCmp>] ; MSVBVM60.__vbaStrCmp
0040D8BF . 8B55 B0 mov edx, dword ptr [ebp-50]
0040D8C2 . 8BF0 mov esi, eax
0040D8C4 . F7DE neg esi
0040D8C6 . 1BF6 sbb esi, esi
0040D8C8 . 52 push edx ; /String
0040D8C9 . 46 inc esi ; |
0040D8CA . F7DE neg esi ; |
0040D8CC . FF15 10104000 call dword ptr [<&MSVBVM60.__vbaLenBstr>] ; \__vbaLenBstr
0040D8D2 . 33C9 xor ecx, ecx
0040D8D4 . 83F8 05 cmp eax, 5 ;要求用户名长度大于5
0040D8D7 . 8D55 B0 lea edx, dword ptr [ebp-50]
0040D8DA . 8D45 B4 lea eax, dword ptr [ebp-4C]
0040D8DD 0F9CC1 setl cl ;处理比较结果
0040D8E0 . 52 push edx
0040D8E1 . 50 push eax
0040D8E2 . F7D9 neg ecx
0040D8E4 . 6A 02 push 2
0040D8E6 . 0BF1 or esi, ecx ;结果传到esi
0040D8E8 . FF15 C4104000 call dword ptr [<&MSVBVM60.__vbaFreeStrList>>; MSVBVM60.__vbaFreeStrList
0040D8EE . 8D4D A4 lea ecx, dword ptr [ebp-5C]
0040D8F1 . 8D55 A8 lea edx, dword ptr [ebp-58]
0040D8F4 . 51 push ecx
0040D8F5 . 52 push edx
0040D8F6 . 6A 02 push 2
0040D8F8 . FF15 20104000 call dword ptr [<&MSVBVM60.__vbaFreeObjList>>; MSVBVM60.__vbaFreeObjList
0040D8FE . 83C4 18 add esp, 18
0040D901 66:3BF3 cmp si, bx ;检查比较结果
0040D904 . 0F85 B7040000 jnz 0040DDC1 ;根据结果转向(爆破点)
这个地方爆破后输不输用户名就无所谓了。
0040D9CE > /8B17 mov edx, dword ptr [edi]
0040D9D0 . |57 push edi
0040D9D1 |85F6 test esi, esi ;是否比对完毕?
0040D9D3 . |0F84 63020000 je 0040DC3C ;(爆破点)
爆破点之下是大段比对代码,终于要结束了
0040DC77 . 50 push eax ; /String
0040DC78 . FF15 10104000 call dword ptr [<&MSVBVM60.__vbaLenBstr>] ; \__vbaLenBstr
0040DC7E . 0FBF4D B8 movsx ecx, word ptr [ebp-48]
0040DC82 . 33D2 xor edx, edx
0040DC84 . 3BC8 cmp ecx, eax
0040DC86 0F94C2 sete dl
0040DC89 . F7DA neg edx
0040DC8B . 8D4D B4 lea ecx, dword ptr [ebp-4C]
0040DC8E . 8BF2 mov esi, edx
0040DC90 . FF15 00114000 call dword ptr [<&MSVBVM60.__vbaFreeStr>] ; MSVBVM60.__vbaFreeStr
0040DC96 . 8D4D A8 lea ecx, dword ptr [ebp-58]
0040DC99 . FF15 04114000 call dword ptr [<&MSVBVM60.__vbaFreeObj>] ; MSVBVM60.__vbaFreeObj
0040DC9F . 66:85F6 test si, si ;再次检查比对结果
0040DCA2 0F84 17010000 je 0040DDBF ;(爆破点)
大功告成,收工。发现程序一个小问题,爆破用户名长度检查后,不输入可以注册成功。
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
赞赏
谁下载
看原图
赞赏
雪币:
留言: