1. 程式人生 > >ollydbg和IDA,HIEW的簡單結合

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 [email protected][email protected]@?$AAs?$AAu?$AAc?$AAc?$AAe?$AAs?$AAs?$AA?$>;  UNICODE "success"
011D197A  |. EB 05          JMP SHORT bhu.011D1981
011D197C  |> 68 68371D01    PUSH OFFSET [email protected]
[email protected]@[email protected] ; 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即可,這裡不再贅述

相關推薦

ollydbgIDAHIEW簡單結合

本人新手,對於逆向工程還不是很瞭解,現下只是學習,寫下本文聊做筆記,以觀後效 void CbhuDlg::OnBnClickedButton1() { // TODO: 在此新增控制元件通知處理程式程式碼 CString str; GetDlgItem(IDC_EDIT

DialogListViewprogressBar的結合使用

ati als 一個 tex stub onclick dsm 適配器 ttext 今天看了體格Demos,使用Dialog和ListView結合使用。這個樣例讓我掌握了自己定義Dialog的使用和自己定義Adapter的使用。以下是實現的步驟以及代碼實現。 Dialo

內網穿透工具ngrok的安裝使用簡單~

寫在前面: ngrok可以做內網穿透,外網對映,可以用其他任何有網的裝置訪問你當前開啟對映的埠專案~ 全域性安裝ngrok npm install ngrok -g 如果本地起了一個服務,埠號為3001。則輸入以下命令: ngrok http 3001

主裝置號file_operations結構關係; ioctlunlocked_ioctl ioctl簡單測試例子

open一個字元裝置的過程是從 VFS層open系統呼叫 ===> def_chr_fops-->open ===> cdev->fops->open ===> device specific operation 如果是同一類裝置,比

mysql安裝配置操作簡單

檢查系統中是否安裝了 Microsoft Visual C++ 2013 Redistributable的x64和x86, 如果沒有請安裝 如果上面檢查通過,正式開始安裝: 執行安裝包

使用Struts2jQuery EasyUI實現簡單CRUD系統(五)——jsp,json,EasyUI的結合

元素 word cli resultset sheet 傳輸 charset {} tco 這部分比較復雜,之前看過自己的同學開發一個選課系統的時候用到了JSON,可是一直不知道有什麽用。寫東西也沒用到。所以沒去學他。然後如今以這樣的懷著好奇心,這是做什麽用的,這是怎麽用

簡單兩步快速實現shiro的配置使用包含登錄驗證、角色驗證、權限驗證以及shiro登錄註銷流程(基於spring的方式使用maven構建)

protect login uid sim isa 當前 sub efi inf 前言: shiro因為其簡單、可靠、實現方便而成為現在最常用的安全框架,那麽這篇文章除了會用簡潔明了的方式講一下基於spring的shiro詳細配置和登錄註銷功能使用之外,也會根據慣例在文章最

封裝privatethis關鍵字的簡單應用

變量 簡單應用 一個 創建 int .get new 內部 ret 1.將成員變量用private修飾 2.提供對應的getxx()和setxx()方法 1 public class Student { 2 3 private String name;

C++Java絕不只是語法不同這麼簡單

          說到面向物件,我們的腦海中立馬會湧現出C++,java,object-C 這幾個大類的語言,甚至是C#。似乎看來,他們都是面向物件的不同實現而已(博主這句話就很C++了)。尤其對於初學者而言,很難顯見他們之間的不同以及設

Socket TCP 協議實現服務端客戶端的簡單通訊-結合線程池的使用

文章目錄 前言 當前模式的弊端 服務端程式碼 客戶端程式碼 執行結果 客戶端 服務端

大資料之scala(一) --- 安裝scala簡單語法介紹條件表示式輸入輸出迴圈函式過程lazy 異常陣列

一、安裝和執行Scala解釋程式 --------------------------------------------- 1.下載scala-2.11.7.msi 2.管理員執行--安裝 3.進入scala/bin,找到scala.bat,管理員執行,進入scala命

React Native中Navigator的基本使用實現簡單的頁面之間的跳轉頁面資料傳遞

效果如下:很簡單的例子,大佬勿噴啊...           點選檢視多少錢後,自動跳轉到超市頁面,點選回答價格後,自動跳轉回顧客介面,並傳遞引數回去。   在我使用的0.57.0的版本中,Navigator已被移除,

百度網盤下載神器Pan DownloadSpeedPan簡單幾步讓電腦滿速下載百度雲網盤檔案

大家都知道,百度網盤如果不是超級會員的話,下載速度會非常慢,慢到你懷疑人生,幾十M的檔案都要下載好久。不過說實話,對於經常使用百度網盤下載東西的人來說,一個月30塊錢的超級會員費用並不貴,畢竟現在頻寬這麼貴,百度又不是慈善家,肯定要考慮收回成本和盈利的問題。 可是對於我們這些一個月只用幾次百

物件簡單講解

定義階段: class Student(): def __init__(self,name,score,sex): self.name = name self.score = score self.sex = sex def pri

三大抽樣分佈:卡方分佈t分佈F分佈的簡單理解

有很多統計推斷是基於正態分佈的假設,以標準正態分佈變數為基石而構造的三個著名統計量在實際中有廣泛的應用,這是因為這三個統計量不僅有明確背景,而且其抽樣分佈的密度函式有顯式表示式,它們被稱為統計中的“三大抽樣分佈”。這三大抽樣分佈即為著名的卡方分佈,t分佈和F分佈。 目錄

在Linux下使用makefile寫一個進度條以及對\r \n緩衝區的簡單瞭解

1.’\r’和‘\n’的區別 \r:表示回車:它只會回到這一行的最前邊 \n:表示回車換行。它會回到這一行的最前邊,然後跳到下一行  。 2.緩衝區 c函式如printf(),在輸出時,shell預設將資料輸出到標準輸出如顯示器,而printf()在

python2.x python3.x 中urllib的區別簡單使用

urllb  的常見變化有:          在Python2.x中使用import.urllib2 -----------對應的,在Python3.x中會使用import.urllib.request,urllib.error

Python資料物件的編碼解碼jsonpickle模組base64模組的簡單使用

1.面向物件 物件:生活中的客觀事物 類:對事物的抽象,在程式碼中實現class型別 類屬性:這類事物具有的特點或者屬性 類方法:這類事物具有的行為,可以實現的方法 例項:使用之前對類的例項化之後的結果 例項屬性:物件具有的一些描述物件或者形容物件的屬性,物件具體具有的特性 例項方法:物件具有的方

Pyhton抓取BOSS直聘職位描述資料清洗簡單沒有那麼難

一、抓取詳細的職位描述資訊 詳情頁分析 Python學習資料或者需要程式碼、視訊加Python學習群:960410445   在詳情頁中,比較重要的就是職位描述和工作地址這兩個 由於在頁面程式碼中崗位職責和任職要求是在一個 div 中的,所以在抓的時候就不太好分,