-
-
[旧帖] [原创]一个简单CrackMe(Brad Soblesky.2)的暴力破解(写给初学者) 0.00雪花
-
发表于: 2011-2-5 17:23 1252
-
【作 者】 leo_wanta
【邮 箱】 cswei99@163.com
【软件名称】 Brad Soblesky.2
【软件出处】 PEDIY CrackMe 2007
【软件大小】 24K
【破解声明】 写给和我一样"菜"的鸟,老鸟直接飞
【破解工具】 PEiD,OD
算法还没来得及分析,先贴个暴力方法
Peid查壳,发现没壳
用OD加载程序,首先在MessageBoxA下断
F9运行 输入 用户名:pediy 序列号:1234
check一下 到断点处
76F7EA70 90 NOP
76F7EA71 > 8BFF MOV EDI,EDI
76F7EA73 /. 55 PUSH EBP
76F7EA74 |. 8BEC MOV EBP,ESP
76F7EA76 |. 833D 749AF876>CMP DWORD PTR DS:[76F89A74],0
76F7EA7D 74 24 JE SHORT USER32.76F7EAA3
76F7EA7F |. 64:A1 1800000>MOV EAX,DWORD PTR FS:[18]
76F7EA85 |. 6A 00 PUSH 0
76F7EA87 |. FF70 24 PUSH DWORD PTR DS:[EAX+24]
76F7EA8A |. 68 A49EF876 PUSH USER32.76F89EA4
76F7EA8F |. FF15 3414F276 CALL DWORD PTR DS:[<&KERNEL32.InterlockedCompareExchange>] ; kernel32.InterlockedCompareExchange
76F7EA95 |. 85C0 TEST EAX,EAX
76F7EA97 |. 75 0A JNZ SHORT USER32.76F7EAA3
76F7EA99 |. C705 A09EF876>MOV DWORD PTR DS:[76F89EA0],1
76F7EAA3 |> 6A 00 PUSH 0 ; /LanguageID = 0 (LANG_NEUTRAL)
76F7EAA5 |. FF75 14 PUSH DWORD PTR SS:[EBP+14] ; |Style
76F7EAA8 |. FF75 10 PUSH DWORD PTR SS:[EBP+10] ; |Title
76F7EAAB |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |Text
76F7EAAE |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
76F7EAB1 |. E8 73FFFFFF CALL USER32.MessageBoxExA ; \MessageBoxExA
76F7EAB6 |. 5D POP EBP
76F7EAB7 \. C2 1000 RETN 10
76F7EABA 90 NOP
alt+F9 到程序领空
00401776 |. 8B8D 40FEFFFF MOV ECX,DWORD PTR SS:[EBP-1C0]
0040177C |. E8 03060000 CALL <JMP.&MFC42.#4224_?MessageBoxA@CWnd@@QAEHPBD0I@Z> ; Incorrect
00401781 |. C645 FC 02 MOV BYTE PTR SS:[EBP-4],2 <--程序停在此处
00401785 |. 8D8D 44FEFFFF LEA ECX,DWORD PTR SS:[EBP-1BC]
0040178B |. E8 D0050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
00401790 |. C645 FC 01 MOV BYTE PTR SS:[EBP-4],1
00401794 |. 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00401797 |. E8 C4050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
0040179C |. C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
004017A0 |. 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
004017A3 |. E8 B8050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
004017A8 |. C745 FC FFFFF>MOV DWORD PTR SS:[EBP-4],-1
004017AF |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14]
004017B2 |. E8 A9050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
004017B7 |> 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
004017BA |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
004017C1 |. 5F POP EDI
004017C2 |. 5E POP ESI
004017C3 |. 8BE5 MOV ESP,EBP
004017C5 |. 5D POP EBP
004017C6 \. C3 RETN
往上找 "可疑之处"
00401623 |. 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00401626 |. 51 PUSH ECX
00401627 |. E8 52070000 CALL <JMP.&MFC42.#2818_?Format@CString@@QAAXPBDZZ>
0040162C |. 83C4 0C ADD ESP,0C
0040162F |. 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00401632 |. E8 79020000 CALL Brad_Sob.004018B0
00401637 |. 50 PUSH EAX ; /Arg1
00401638 |. 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18] ; |
0040163B |. E8 80020000 CALL Brad_Sob.004018C0 ; \Brad_Sob.004018C0
00401640 |. 85C0 TEST EAX,EAX
00401642 0F85 FF000000 JNZ Brad_Sob.00401747 ; 暴力破解点 00401642
结果发现在00401642处有个 跳转语句 再往上看 发现 有
0040163B Call Brad_Sob.004018C0
00401640 Test Eax,Eax
于是在0040163B处下断 Ctrl+F2 重新开始调试
F9运行--输入--check 到0040163B处 F7跟进 发现004018D1处又调用了004018e0 F7跟进 发现这是一个比较函数
期间发现我们输入的序列号"1234"存储在Edx 正确的序列号"3272156575"存储于Eax 到此我们可以知道我
们输入的用户名pediy对应的序列号是"3272156575" 但我们的工作还没结束 我们的目标是暴力破解这个程
序 F8运行完所调用的函数 到00401640 处有个Test Eax,Eax语句 这个语句是用于判断序列号对比函
数结果 一般序列号正确Eax的值是0 不正确是-1(即FFFFFFFF) 下面一句更加关键JNZ 00401747 如果
序列号错误 程序就跳转到00401747 接着就弹出一个"Incorrect!!!"的MessageBox 所以我们就把JNZ
00401747改为 JZ 00401747 或者 NOP(00F85FF000000改为00F84FF000000) 这样无论你输入什么序列号都
会弹出正确的提示了 OK 暴力破解完成
【邮 箱】 cswei99@163.com
【软件名称】 Brad Soblesky.2
【软件出处】 PEDIY CrackMe 2007
【软件大小】 24K
【破解声明】 写给和我一样"菜"的鸟,老鸟直接飞
【破解工具】 PEiD,OD
算法还没来得及分析,先贴个暴力方法
Peid查壳,发现没壳
用OD加载程序,首先在MessageBoxA下断
F9运行 输入 用户名:pediy 序列号:1234
check一下 到断点处
76F7EA70 90 NOP
76F7EA71 > 8BFF MOV EDI,EDI
76F7EA73 /. 55 PUSH EBP
76F7EA74 |. 8BEC MOV EBP,ESP
76F7EA76 |. 833D 749AF876>CMP DWORD PTR DS:[76F89A74],0
76F7EA7D 74 24 JE SHORT USER32.76F7EAA3
76F7EA7F |. 64:A1 1800000>MOV EAX,DWORD PTR FS:[18]
76F7EA85 |. 6A 00 PUSH 0
76F7EA87 |. FF70 24 PUSH DWORD PTR DS:[EAX+24]
76F7EA8A |. 68 A49EF876 PUSH USER32.76F89EA4
76F7EA8F |. FF15 3414F276 CALL DWORD PTR DS:[<&KERNEL32.InterlockedCompareExchange>] ; kernel32.InterlockedCompareExchange
76F7EA95 |. 85C0 TEST EAX,EAX
76F7EA97 |. 75 0A JNZ SHORT USER32.76F7EAA3
76F7EA99 |. C705 A09EF876>MOV DWORD PTR DS:[76F89EA0],1
76F7EAA3 |> 6A 00 PUSH 0 ; /LanguageID = 0 (LANG_NEUTRAL)
76F7EAA5 |. FF75 14 PUSH DWORD PTR SS:[EBP+14] ; |Style
76F7EAA8 |. FF75 10 PUSH DWORD PTR SS:[EBP+10] ; |Title
76F7EAAB |. FF75 0C PUSH DWORD PTR SS:[EBP+C] ; |Text
76F7EAAE |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hOwner
76F7EAB1 |. E8 73FFFFFF CALL USER32.MessageBoxExA ; \MessageBoxExA
76F7EAB6 |. 5D POP EBP
76F7EAB7 \. C2 1000 RETN 10
76F7EABA 90 NOP
alt+F9 到程序领空
00401776 |. 8B8D 40FEFFFF MOV ECX,DWORD PTR SS:[EBP-1C0]
0040177C |. E8 03060000 CALL <JMP.&MFC42.#4224_?MessageBoxA@CWnd@@QAEHPBD0I@Z> ; Incorrect
00401781 |. C645 FC 02 MOV BYTE PTR SS:[EBP-4],2 <--程序停在此处
00401785 |. 8D8D 44FEFFFF LEA ECX,DWORD PTR SS:[EBP-1BC]
0040178B |. E8 D0050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
00401790 |. C645 FC 01 MOV BYTE PTR SS:[EBP-4],1
00401794 |. 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00401797 |. E8 C4050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
0040179C |. C645 FC 00 MOV BYTE PTR SS:[EBP-4],0
004017A0 |. 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18]
004017A3 |. E8 B8050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
004017A8 |. C745 FC FFFFF>MOV DWORD PTR SS:[EBP-4],-1
004017AF |. 8D4D EC LEA ECX,DWORD PTR SS:[EBP-14]
004017B2 |. E8 A9050000 CALL <JMP.&MFC42.#800_??1CString@@QAE@XZ>
004017B7 |> 8B4D F4 MOV ECX,DWORD PTR SS:[EBP-C]
004017BA |. 64:890D 00000>MOV DWORD PTR FS:[0],ECX
004017C1 |. 5F POP EDI
004017C2 |. 5E POP ESI
004017C3 |. 8BE5 MOV ESP,EBP
004017C5 |. 5D POP EBP
004017C6 \. C3 RETN
往上找 "可疑之处"
00401623 |. 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00401626 |. 51 PUSH ECX
00401627 |. E8 52070000 CALL <JMP.&MFC42.#2818_?Format@CString@@QAAXPBDZZ>
0040162C |. 83C4 0C ADD ESP,0C
0040162F |. 8D4D DC LEA ECX,DWORD PTR SS:[EBP-24]
00401632 |. E8 79020000 CALL Brad_Sob.004018B0
00401637 |. 50 PUSH EAX ; /Arg1
00401638 |. 8D4D E8 LEA ECX,DWORD PTR SS:[EBP-18] ; |
0040163B |. E8 80020000 CALL Brad_Sob.004018C0 ; \Brad_Sob.004018C0
00401640 |. 85C0 TEST EAX,EAX
00401642 0F85 FF000000 JNZ Brad_Sob.00401747 ; 暴力破解点 00401642
结果发现在00401642处有个 跳转语句 再往上看 发现 有
0040163B Call Brad_Sob.004018C0
00401640 Test Eax,Eax
于是在0040163B处下断 Ctrl+F2 重新开始调试
F9运行--输入--check 到0040163B处 F7跟进 发现004018D1处又调用了004018e0 F7跟进 发现这是一个比较函数
期间发现我们输入的序列号"1234"存储在Edx 正确的序列号"3272156575"存储于Eax 到此我们可以知道我
们输入的用户名pediy对应的序列号是"3272156575" 但我们的工作还没结束 我们的目标是暴力破解这个程
序 F8运行完所调用的函数 到00401640 处有个Test Eax,Eax语句 这个语句是用于判断序列号对比函
数结果 一般序列号正确Eax的值是0 不正确是-1(即FFFFFFFF) 下面一句更加关键JNZ 00401747 如果
序列号错误 程序就跳转到00401747 接着就弹出一个"Incorrect!!!"的MessageBox 所以我们就把JNZ
00401747改为 JZ 00401747 或者 NOP(00F85FF000000改为00F84FF000000) 这样无论你输入什么序列号都
会弹出正确的提示了 OK 暴力破解完成
赞赏
赞赏
雪币:
留言: