- 帖子
- 77
- 积分
- 301
- 威望
- 408
- 金钱
- 206
- 在线时间
- 29 小时
|
自己做得语音教程,不是太好,还请见谅了。
以下是密码:
www.3ast.com.cn
希望大家多支持下我们的站。
★★★★★★★★★★★★★★★★
破 解 系 列
3AST
WWW.3AST.COM.CN
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
【文章标题】: 简单爆破与文件补丁
【文章作者】: DoubleW
【使用工具】: PEID,OD,Keymaker
【软件信息】: 大小:33,818 字节 MD5:28808f0caf2b18dfe9f0f86d19df4f77
【下载地址】: 已打包。
【加壳方式】: PEDiminisher 0.1 -> Teraphy
【保护方式】: 用户名+序列号
【编写语言】: Microsoft Visual C++ 6.0
【操作平台】: WinXP SP3
【录制环境】:1280*800
【作者声明】: 仅供技术交流,请勿用于非法目的!
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【详细过程】
今天主要目标是一个CrackMe,是用户名+注册码的验证方式,我们的目的就是通过修改软件的代码,以达到破解的目的。
然后是通过Keymaker来制作文件的破解补丁。
首先看下我们的目标,很简单的一个CrackMe,下面我们正式开始,首先查壳。
PEDiminisher 0.1 -> Teraphy
是一款很好脱的壳,我们手动脱壳,用ESP定律足以搞定。
OD载入后停在如下位置:
0040D000 > 53 push ebx ; (初始 cpu 选择)
0040D001 51 push ecx ; 这个位置,看左边的寄存器窗口
0040D002 52 push edx ; ntdll.KiFastSystemCallRet
0040D003 56 push esi
0040D004 57 push edi ; ntdll.7C930208
0040D005 55 push ebp
0040D006 E8 00000000 call PEDimini.0040D00B
0040D00B 5D pop ebp ; 7FFD8000
0040D00C 8BD5 mov edx, ebp
0040D00E 81ED A2304000 sub ebp, PEDimini.004030A2
0040D014 2B95 91334000 sub edx, ss:[ebp+403391]
0040D01A 81EA 0B000000 sub edx, 0B
0040D020 8995 9A334000 mov ss:[ebp+40339A], edx ; ntdll.KiFastSystemCallRet
以下是寄存器窗口:
EAX 00000000
ECX 0013FFB0
EDX 7C92E4F4 ntdll.KiFastSystemCallRet
EBX 7FFD8000
ESP 0013FFC0 ;这里已经变红了,
EBP 0013FFF0
ESI FFFFFFFF
EDI 7C930208 ntdll.7C930208
EIP 0040D001 PEDimini.0040D001
C 1 ES 0023 32位 0(FFFFFFFF)
P 0 CS 001B 32位 0(FFFFFFFF)
A 0 SS 0023 32位 0(FFFFFFFF)
Z 0 DS 0023 32位 0(FFFFFFFF)
S 1 FS 003B 32位 7FFDF000(FFF)
T 0 GS 0000 NULL
命令窗口下命令:
hr 0013FFC0
然后我们回车。
紧接着F9运行,停在以下位置:
0040D093 - FFE0 jmp near eax ; PEDimini.00403922 //停在这里。
0040D095 8B95 9A334000 mov edx, ss:[ebp+40339A]
0040D09B 8BB5 F6334000 mov esi, ss:[ebp+4033F6]
0040D0A1 33FF xor edi, edi ; ntdll.7C930208
0040D0A3 03F2 add esi, edx ; ntdll.KiFastSystemCallRet
0040D0A5 03FA add edi, edx ; ntdll.KiFastSystemCallRet
0040D0A7 8B46 0C mov eax, ds:[esi+C]
0040D0AA 85C0 test eax, eax ; PEDimini.00403922
0040D0AC 74 7F je short PEDimini.0040D12D
0040D0AE 03C2 add eax, edx ; ntdll.KiFastSystemCallRet
0040D0B0 8BD8 mov ebx, eax ; PEDimini.00403922
0040D0B2 50 push eax ; PEDimini.00403922
其实以上的 jmp near eax 就是要跳到OEP了,我们在一次 F8 就可以到达OEP了。
00403922 55 push ebp ; 这里就是OEP了。
00403923 8BEC mov ebp, esp
00403925 6A FF push -1
00403927 68 38814000 push PEDimini.00408138
0040392C 68 845C4000 push PEDimini.00405C84
00403931 64:A1 00000000 mov eax, fs:[0]
00403937 50 push eax ; PEDimini.00403922
00403938 64:8925 0000000>mov fs:[0], esp
0040393F 83EC 58 sub esp, 58
00403942 53 push ebx
00403943 56 push esi
00403944 57 push edi ; ntdll.7C930208
00403945 8965 E8 mov ss:[ebp-18], esp
00403948 FF15 34804000 call near ds:[408034] ; kernel32.GetVersion
脱壳,
这次用loadPE转储,但是无法运行,提示错误,我们用ImportREC修复。
好了,可以运行了。
查壳,Microsoft Visual C++ 6.0。
脱完壳之后,我们来爆破。
首先还是找软件的错误提示
“注册码错误,继续加油。”
OD载入,查找字符串。双击来到以下位置:
00402E80 . 68 00010000 push 100 ; /Count = 100 (256.)
00402E85 . 51 push ecx ; |Buffer = 0013FFB0
00402E86 . 68 E8030000 push 3E8 ; |ControlID = 3E8 (1000.)
00402E8B . 56 push esi ; |hWnd = FFFFFFFF
00402E8C . FFD3 call near ebx ; \GetDlgItemTextA
00402E8E . 8DBD F0FEFFFF lea edi, ss:[ebp-110]
00402E94 . 83C9 FF or ecx, FFFFFFFF
00402E97 . 33C0 xor eax, eax
00402E99 . F2:AE repne scas byte ptr es:[edi]
00402E9B . F7D1 not ecx
00402E9D . 49 dec ecx
00402E9E . 83F9 01 cmp ecx, 1
00402EA1 . 73 26 jnb short dumped_.00402EC9
00402EA3 . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402EA5 . 68 D4904000 push dumped_.004090D4 ; |注册提示
00402EAA . 68 BC904000 push dumped_.004090BC ; |用户名不能为空请输入!
00402EAF . 56 push esi ; |hOwner = FFFFFFFF
00402EB0 . FF15 B4804000 call near ds:[<&user32.MessageBoxA>] ; \MessageBoxA
00402EB6 . 33C0 xor eax, eax
00402EB8 . 8B4D F4 mov ecx, ss:[ebp-C] ; kernel32.7C839AC0
00402EBB . 64:890D 00000>mov fs:[0], ecx
00402EC2 . 5F pop edi ; kernel32.7C817067
00402EC3 . 5E pop esi ; kernel32.7C817067
00402EC4 . 5B pop ebx ; kernel32.7C817067
00402EC5 . 8BE5 mov esp, ebp
00402EC7 . 5D pop ebp ; kernel32.7C817067
00402EC8 . C3 retn
00402EC9 > 8D95 ECF8FFFF lea edx, ss:[ebp-714]
00402ECF . 68 00040000 push 400
00402ED4 . 52 push edx ; ntdll.KiFastSystemCallRet
00402ED5 . 68 07040000 push 407
00402EDA . 56 push esi
00402EDB . FFD3 call near ebx
00402EDD . 8DBD ECF8FFFF lea edi, ss:[ebp-714]
00402EE3 . 83C9 FF or ecx, FFFFFFFF
00402EE6 . 33C0 xor eax, eax
00402EE8 . F2:AE repne scas byte ptr es:[edi]
00402EEA . F7D1 not ecx
00402EEC . 49 dec ecx
00402EED . 83F9 01 cmp ecx, 1
00402EF0 . 73 26 jnb short dumped_.00402F18
00402EF2 . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402EF4 . 68 D4904000 push dumped_.004090D4 ; |注册提示
00402EF9 . 68 A4904000 push dumped_.004090A4 ; |注册码不能为空请输入!
00402EFE . 56 push esi ; |hOwner = FFFFFFFF
00402EFF . FF15 B4804000 call near ds:[<&user32.MessageBoxA>] ; \MessageBoxA
00402F05 . 33C0 xor eax, eax
00402F07 . 8B4D F4 mov ecx, ss:[ebp-C] ; kernel32.7C839AC0
00402F0A . 64:890D 00000>mov fs:[0], ecx
00402F11 . 5F pop edi ; kernel32.7C817067
00402F12 . 5E pop esi ; kernel32.7C817067
00402F13 . 5B pop ebx ; kernel32.7C817067
00402F14 . 8BE5 mov esp, ebp
00402F16 . 5D pop ebp ; kernel32.7C817067
00402F17 . C3 retn
00402F18 > 8D85 F0FDFFFF lea eax, ss:[ebp-210]
00402F1E . 8D8D ECFCFFFF lea ecx, ss:[ebp-314]
00402F24 . 50 push eax ; /Arg4 = 00000000
00402F25 . 51 push ecx ; |Arg3 = 0013FFB0
00402F26 . 8D95 ECF8FFFF lea edx, ss:[ebp-714] ; |
00402F2C . 68 9C904000 push dumped_.0040909C ; |10001
00402F31 . 52 push edx ; |Arg1 = 7C92E4F4
00402F32 . C745 FC 00000>mov dword ptr ss:[ebp-4], 0 ; |
00402F39 . E8 82FCFFFF call dumped_.00402BC0 ; \dumped_.00402BC0
00402F3E . 85C0 test eax, eax
00402F40 . 75 26 jnz short dumped_.00402F68
00402F42 . 6A 40 push 40
00402F44 . 68 D4904000 push dumped_.004090D4 ; 注册提示
00402F49 > 68 84904000 push dumped_.00409084 ; |注册码错误,继续加油!
00402F4E . 56 push esi ; |hOwner = FFFFFFFF
00402F4F . FF15 B4804000 call near ds:[<&user32.MessageBoxA>] ; \MessageBoxA
00402F55 . 33C0 xor eax, eax
00402F57 . 8B4D F4 mov ecx, ss:[ebp-C] ; kernel32.7C839AC0
00402F5A . 64:890D 00000>mov fs:[0], ecx
00402F61 . 5F pop edi ; kernel32.7C817067
00402F62 . 5E pop esi ; kernel32.7C817067
00402F63 . 5B pop ebx ; kernel32.7C817067
00402F64 . 8BE5 mov esp, ebp
00402F66 . 5D pop ebp ; kernel32.7C817067
00402F67 . C3 retn
00402F68 > 8D85 F0FDFFFF lea eax, ss:[ebp-210]
00402F6E . 8D8D F0FEFFFF lea ecx, ss:[ebp-110]
00402F74 . 50 push eax
00402F75 . 51 push ecx
00402F76 . E8 65FDFFFF call dumped_.00402CE0
00402F7B . 83C4 08 add esp, 8
00402F7E . 83F8 01 cmp eax, 1
00402F81 . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402F83 . 68 D4904000 push dumped_.004090D4 ; |注册提示
00402F88 .^ 75 BF jnz short dumped_.00402F49 ; |我们只需将这里的jnz short dumped_.00402F49改为jz short dumped_.00402F49就可爆破
00402F8A . 68 70904000 push dumped_.00409070 ; |恭喜你,注册码正确!
00402F8F . 56 push esi ; |hOwner = FFFFFFFF
00402F90 . FF15 B4804000 call near ds:[<&user32.MessageBoxA>] ; \MessageBoxA
00402F96 . 33C0 xor eax, eax
00402F98 . 8B4D F4 mov ecx, ss:[ebp-C] ; kernel32.7C839AC0
00402F9B . 64:890D 00000>mov fs:[0], ecx
00402FA2 . 5F pop edi ; kernel32.7C817067
00402FA3 . 5E pop esi ; kernel32.7C817067
00402FA4 . 5B pop ebx ; kernel32.7C817067
00402FA5 . 8BE5 mov esp, ebp
00402FA7 . 5D pop ebp ; kernel32.7C817067
00402FA8 . C3 retn
00402FA9 . 8B55 08 mov edx, ss:[ebp+8] ; dumped_.<模块入口点>
00402FAC . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402FAE . 68 D4904000 push dumped_.004090D4 ; |注册提示
00402FB3 . 68 84904000 push dumped_.00409084 ; |注册码错误,继续加油!
00402FB8 . 52 push edx ; |hOwner = 7C92E4F4
00402FB9 . FF15 B4804000 call near ds:[<&user32.MessageBoxA>] ; \MessageBoxA
00402FBF . B8 C52F4000 mov eax, dumped_.00402FC5
00402FC4 . C3 retn
我们将:
00402F81 . 6A 40 push 40 ; /Style = MB_OK|MB_ICONASTERISK|MB_APPLMODAL
00402F83 . 68 D4904000 push dumped_.004090D4 ; |注册提示
00402F88 .^ 75 BF jnz short dumped_.00402F49 ; |我们只需将这里的jnz short dumped_.00402F49改为jz short dumped_.00402F49就可爆破
00402F8A . 68 70904000 push dumped_.00409070 ; |恭喜你,注册码正确!
00402F8F . 56 push esi ; |hOwner = FFFFFFFF
00402F90 . FF15 B4804000 call near ds:[<&user32.MessageBoxA>] ; \MessageBoxA
只要这么简单的修改就可用达到爆破的目的。
下面我们开始制作文件破解补丁。一点技术含量都没有,就不细说了。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【经验总结】
主要是能够看懂软件的注册流程。找准修改的地方,当然有些软件需要修改好几处。
如果还有什么不太明白的地方,可以到
http://www.3ast.com.cm
来找我,我们一起探讨。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
【版权声明】: 转载请注明出处,并保证文章的完整性! |
|