学破解-简单爆破程序原理教程
本帖最后由 Malimali 于 2017-6-27 12:32 编辑if (m_UserName=="www.wghai.net")
{
MessageBox("正确", "挂海论坛", MB_OK);
return;
}
else
{
MessageBox("错误", "挂海论坛", MB_OK);
}
}
在C++反汇编代码里面跟踪就明白爆破的原理.
经断下,并且显示了反编译后的源代码,这样分析起来就非常简单了。
008D1AB3 68 24 AE 91 00 push offset string "www.52xiaomo.com" (091AE24h) //输入的内容
008D1AB8 FF B6 B0 01 00 00 push dword ptr //输入长度
008D1AXF 85 C0 test eax,eax //eax与eax进行逻辑对比,不保存结果
008D1AD1 75 0C jne CtestpeizDlg::OnBnClickedButton1+2Fh (08D1ADFh)
008D1AD3 68 44 AE 91 00 push offset string "\xd5\xfd\xc8\xb7" (091AE44h)
008D1AD8 E8 5B 9F 00 00 call CWnd::MessageBoxA (08DBA38h)
008D1ADD 5E pop esi
008D1ADE C3 ret
008D1ADF 68 4C AE 91 00 push offset string "\xb4\xed\xce\xf3" (091AE4Ch)
008D1AE4 E8 4F 9F 00 00 call CWnd::MessageBoxA (08DBA38h)
008D1AE9 5E pop esi
008D1AEA C3 ret
008D1AD1 75 0C jne CtestpeizDlg::OnBnClickedButton1+2Fh (08D1ADFh)
207: {
208: MessageBox("正确", "挂海论坛", MB_OK);
008D1AD3 68 44 AE 91 00 push offset string "\xd5\xfd\xc8\xb7" (091AE44h)
209: return;
210:
211: }
212:
213: else
214:
215: {
216: MessageBox("错误", "挂海论坛", MB_OK);
008D1AD8 E8 5B 9F 00 00 call CWnd::MessageBoxA (08DBA38h)
008D1ADD 5E pop esi
217: }
218:
219: }
008D1ADE C3 ret
209: return;
210:
211: }
212:
213: else
214:
215: {
216: MessageBox("错误", "挂海论坛", MB_OK);
008D1ADF 68 4C AE 91 00 push offset string "\xb4\xed\xce\xf3" (091AE4Ch)
008D1AE4 E8 4F 9F 00 00 call CWnd::MessageBoxA (08DBA38h)
008D1AE9 5E pop esi
217: }
218:
219: }
008D1AEA C3 ret
可以分为两种方法,第一种没有显示源代码是OD那种简单快速,第二种是显示源代码。
主要是代码清晰易懂。
在C++反汇编后可以看到ZR标志位=0-----零ZR,OD里等于Z标志位。
008D1AC6 8B CE mov ecx,esi //溢出=====esi值赋值给ecx
008D1ABE E8 D5 B2 02 00 call _mbscmp (08FCD98h) //储存结果
008D1ADF 68 4C AE 91 00 push offset string "\xb4\xed\xce\xf3" (091AE4Ch)
008D1AE4 E8 4F 9F 00 00 call CWnd::MessageBoxA (08DBA38h)
008D1AE9 5E pop esi
008D1AEA C3 ret
008D1AE4 E8 4F 9F 00 00 call CWnd::MessageBoxA (08DBA38h)//messagebox
008D1AE9 5E pop esi //esi出栈
008D1AEA C3 ret //返回
00041AB3 68 24AE0800 push offset test_pei.AAt?$AAi?$AAo?$AAn?$AA?9?$AA>; www.wghai.net
00041AB8 FFB6 B0010000 push dword ptr ds: ; 长度
00041ABE E8 D5B20200 call test_pei._mbscmpenum CArchive::LoadArrayObjT>; 保存输入内容
00041AC3 83C4 08 add esp,0x8
00041AC6 8BCE mov ecx,esi
00041AC8 6A 00 push 0x0
00041ACA 68 38AE0800 push offset test_pei.ons@@9@4_KA?$AAw?$AAi?$AAn?$>; 挂海论坛
00041AXF 85C0 test eax,eax
00041AD1 75 0C jnz short test_pei.00041ADF
00041AD3 68 44AE0800 push offset test_pei.ck_cachetions@@9@4_KA?$AAw?$>; 正确
00041AD8 E8 5B9F0000 call test_pei.CWnd::MessageBoxAegisterClassAame::>
00041ADD 5E pop esi ; user32.74E224D3
00041ADE C3 retn
00041ADF 68 4CAE0800 push offset test_pei.tions@@9@4_KA?$AAw?$AAi?$AAn>; 错误
00041AE4 E8 4F9F0000 call test_pei.CWnd::MessageBoxAegisterClassAame::>; messagebox
00041AE9 5E pop esi ; user32.74E224D3
00041AEA C3 retn ; 返回
修改Z标志位=1
00041AD8 E8 5B9F0000 call test_pei.CWnd::MessageBoxAegisterClassAame::GetWindowid (_>//调用结果CALL
学破解-简单爆破程序
页:
[1]