ollydbg和IDA,HIEW的简单结合

本人新手,对于逆向工程还不是很了解,现下只是学习,写下本文聊做笔记,以观后效

void CbhuDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码
CString str;
GetDlgItem(IDC_EDIT1)->GetWindowTextW(str);
if(str==L"DSADAS")
 {
::MessageBoxW(NULL,L"success",0,0);
 }
else
{
::MessageBoxW(NULL,L"failed",0,0);
}
}

破解本身有很多的方法,这也是最最简单的一种保护,所以我们现在只是拿这个程序做个例子,来进行演示OD和IDA的结合使用,因为我们知道IDA是很好的观察工具,但是在调试方面与OD相比有较多的不足之处,所以,我们结合两者来进行,最后使用HIEW进行exe文件的修改首先运行程序,我们可以看到错误提示框


在这里我们不再使用failed作为,检索条件,而是使用MessageBox,API函数来进行设置断点,然后再使用IDA查找跳转语句,即可

操作步骤如下:

1.运行Ollydbg和bhu(这里是您将要破解的程序)

2.OD->file->attach->bhu,附加到要运行的程序

3.在OD的反汇编窗口,右击->view->module "bhu"

4.在OD的反汇编窗口,右击->copy->select all

5.将其复制到本地的一个文本文件当中,查找字符串"MessageBox",并记录下所有的地址,在所有的地址处设置断点

6.进行操作查看运行至断点处

	011D1973  |. 75 07          JNZ SHORT bhu.011D197C
011D1975  |. 68 58371D01    PUSH OFFSET bhu.??_C@_1BA@ICANLBCA@?$AAs?$AAu?$AAc?$AAc?$AAe?$AAs?$AAs?$AA?$>;  UNICODE "success"
011D197A  |. EB 05          JMP SHORT bhu.011D1981
011D197C  |> 68 68371D01    PUSH OFFSET bhu.??_C@_1O@KPGHAGDD@?$AAf?$AAa?$AAi?$AAl?$AAe?$AAd?$AA?$AA@    ;  UNICODE "failed"
011D1981  |> 6A 00          PUSH 0                                                                       ; |hOwner = NULL
011D1983  |. FF15 BC301D01  CALL DWORD PTR DS:[<&USER32.MessageBoxW>]                                    ; \MessageBoxW
011D1989  |. 8D4D F0        LEA ECX,DWORD PTR SS:[EBP-10]
011D198C  |. FF15 3C311D01  CALL DWORD PTR DS:[<&mfc100u.#902>]                                          ;  mfc100u.5B370BEE
011D1992  |. 8B4D F4        MOV ECX,DWORD PTR SS:[EBP-C]
011D1995  |. 64:890D 000000>MOV DWORD PTR FS:[0],ECX
011D199C  |. 59             POP ECX
011D199D  |. 5E             POP ESI
011D199E  |. 8BE5           MOV ESP,EBP
011D19A0  |. 5D             POP EBP
011D19A1  \. C3             RETN

011D1983即是我们要记录的地址,因为在OD中的地址都是内存中的地址,与IDA中的静态反编译是不同的,所以我们要进行地址转换,bhu的起始地址是011D1000所以偏移量是011D1983-011D1000,然后在IDA中也同样进行偏移即可在IDA中的显示如下



.text:00401967                 call    ds:ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT
  
  
   
   >>::Compare(wchar_t const *)
.text:0040196D                 push    0               ; uType
.text:0040196F                 push    0               ; lpCaption
.text:00401971                 test    eax, eax
.text:00401973                 jnz     short loc_40197C
.text:00401975                 push    offset aSuccess ; "success"
.text:0040197A                 jmp     short loc_401981
.text:0040197C ; ---------------------------------------------------------------------------
.text:0040197C
.text:0040197C loc_40197C:                             ; CODE XREF: CbhuDlg::OnBnClickedButton1(void)+63j
.text:0040197C                 push    offset Text     ; "failed"
.text:00401981
.text:00401981 loc_401981:                             ; CODE XREF: CbhuDlg::OnBnClickedButton1(void)+6Aj
.text:00401981                 push    0               ; hWnd
.text:00401983                 call    ds:MessageBoxW(x,x,x,x)
.text:00401989                 lea     this, [ebp+str]
.text:0040198C                 call    ds:ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT
   
   
    
    >>::~CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT
    
    
     
     >>(void)
.text:00401992                 mov     this, [ebp+var_C]
.text:00401995                 mov     large fs:0, this
.text:0040199C                 pop     this
.text:0040199D                 pop     esi
.text:0040199E                 mov     esp, ebp
.text:004019A0                 pop     ebp
.text:004019A1                 retn
.text:004019A1 public: void __thiscall CbhuDlg::OnBnClickedButton1(void) endp


    
    
   
   
  
  
要进行暴力破解,只需将.text:00401973 jnz short loc_40197C全部换成NOP即可,这里不再赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

世纪殇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值