逆向工程(201522220234)_第1頁
逆向工程(201522220234)_第2頁
逆向工程(201522220234)_第3頁
逆向工程(201522220234)_第4頁
逆向工程(201522220234)_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、課程名稱:逆向工程實(shí)踐 報(bào)告題目:使用Ollydbg破解程序課程教師:何興高 學(xué)院:信息與軟件工程學(xué)院 姓名:楊博辰 學(xué)號:201522220234 一、題目名稱使用Ollydbg破解程序二、題目內(nèi)容使用C+語言通過Windows API編寫一個登錄程序,當(dāng)用戶輸入正確的用戶名和密碼之后,提示登錄成功,否則提示登錄失敗。通過Ollydbg軟件進(jìn)行反匯編,對程序進(jìn)行破解。程序界面如下圖。三、知識點(diǎn)及介紹。1.匯編語言介紹匯編語言(Assembly Language)是面向機(jī)器的程序設(shè)計(jì)語言。在匯編語言中,用助記符(Mnemonics)代替機(jī)器指令的操作碼,用地址符號(Symbol)或標(biāo)號(Lab

2、el)代替指令或操作數(shù)的地址,如此就增強(qiáng)了程序的可讀性并且降低了編寫難度,象這樣符號化的程序設(shè)計(jì)語言就是匯編語言,因此亦稱為符號語言。使用匯編語言編寫的程序,機(jī)器不能直接識別,還要由匯編程序或者叫匯編語言編譯器(即匯編器)轉(zhuǎn)換成機(jī)器指令。匯編程序?qū)⒎柣牟僮鞔a組裝成處理器可以識別的機(jī)器指令,這個組裝的過程稱為組合或者匯編。因此,有時候人們也把匯編語言稱為組合語言。匯編語言是一種功能很強(qiáng)的程序設(shè)計(jì)語言,也是利用計(jì)算機(jī)所有硬件特性并能直接控制硬件的語言。匯編語言,作為一門語言,對應(yīng)于高級語言的編譯器,需要一個“匯編器”來把匯編語言原文件匯編成機(jī)器可執(zhí)行的代碼。高級的匯編器如MASM,TASM等

3、等為我們寫匯編程序提供了很多類似于高級語言的特征,比如結(jié)構(gòu)化、抽象等。在這樣的環(huán)境中編寫的匯編程序,有很大一部分是面向匯編器的偽指令,已經(jīng)類同于高級語言?,F(xiàn)在的匯編環(huán)境已經(jīng)如此高級,即使全部用匯編語言來編寫windows的應(yīng)用程序也是可行的,但這不是匯編語言的長處。匯編語言的長處在于編寫高效且需要對機(jī)器硬件精確控制的程序。2.C+語言介紹C+是在C語言的基礎(chǔ)上開發(fā)的一種通用編程語言,應(yīng)用廣泛。C+支持多種編程范式 面向?qū)ο缶幊獭⒎盒途幊毯瓦^程化編程。最新正式標(biāo)準(zhǔn)C+14于2014年8月18日公布。其編程領(lǐng)域眾廣,常用于系統(tǒng)開發(fā),引擎開發(fā)等應(yīng)用領(lǐng)域,是至今為止最受廣大受用的最強(qiáng)大編程語言之一,支

4、持類:類、封裝、重載等!C+語言的主要特點(diǎn)表現(xiàn)在兩個方面,一是盡量兼容C,二是支持面向?qū)ο蟮姆椒?。它操持了C的簡潔、高效的接近匯編語言等特點(diǎn),對C的類型系統(tǒng)進(jìn)行了改革的擴(kuò)充,因此C+比C更安全,C+的編譯系統(tǒng)能檢查出更多的類型錯誤。另外,由于C語言的廣泛使用,因而極大的促進(jìn)了C+的普及和推廣。3.Windows API介紹Windows 這個多作業(yè)系統(tǒng)除了協(xié)調(diào)應(yīng)用程序的執(zhí)行、分配內(nèi)存、管理資源之外, 它同時也是一個很大的服務(wù)中心,調(diào)用這個服務(wù)中心的各種服務(wù)(每一種服務(wù)就是一個函數(shù)),可以幫應(yīng)用程式達(dá)到開啟視窗、描繪圖形、使用周邊設(shè)備等目的,由于這些函數(shù)服務(wù)的對象是應(yīng)用程序(Applicatio

5、n), 所以便稱之為 Application Programming Interface,簡稱 API 函數(shù)。WIN32 API也就是Microsoft Windows 32位平臺的應(yīng)用程序編程接口。當(dāng)WINDOWS操作系統(tǒng)開始占據(jù)主導(dǎo)地位的時候,開發(fā)WINDOWS平臺下的應(yīng)用程序成為人們的需要。而在WINDOWS程序設(shè)計(jì)領(lǐng)域處于發(fā)展的初期,WINDOWS程序員所能使用的編程工具唯有API函數(shù),這些函數(shù)是WINDOWS提供給應(yīng)用程序與操作系統(tǒng)的接口,他們猶如“積木塊”一樣,可以搭建出各種界面豐富,功能靈活的應(yīng)用程序。所以可以認(rèn)為API函數(shù)是構(gòu)筑整個WINDOWS框架的基石,在它的下面是WIND

6、OWS的操作系統(tǒng)核心,而它的上面則是所有的華麗的WINDOWS應(yīng)用程序。程序員想編寫具有Windows風(fēng)格的軟件,必須借助API,API也因此被賦予至高無上的地位。但是,如若沒有合適的Windows編程平臺,那么Windows開發(fā)是一項(xiàng)很復(fù)雜的工作。在可視化編程IDE出來之前,那時的WINDOWS程序開發(fā)還是比較復(fù)雜的工作,程序員必須熟記一大堆常用的API函數(shù),而且還得對WINDOWS操作系統(tǒng)有深入的了解。然而隨著軟件技術(shù)的不斷發(fā)展,在WINDOWS平臺上出現(xiàn)了很多優(yōu)秀的可視化編程環(huán)境,程序員可以采用“所見即所得”的編程方式來開發(fā)具有精美用戶界面和功能強(qiáng)大的應(yīng)用程序。四、工具及介紹1.Olly

7、dbg介紹OLLYDBG是一個新的動態(tài)追蹤工具,將IDA與SoftICE結(jié)合起來的思想,Ring 3級調(diào)試器,非常容易上手,己代替SoftICE成為當(dāng)今最為流行的調(diào)試解密工具了。同時還支持插件擴(kuò)展功能,是目前最強(qiáng)大的調(diào)試工具。OllyDbg 可以以在任何采用奔騰處理器的 Windows 95、98、ME、NT 或是 XP(未經(jīng)完全測試)操作系統(tǒng)中工作,但我們強(qiáng)烈建議您采用300-MHz以上的奔騰處理器以達(dá)到最佳效果。還有,OllyDbg 是極占內(nèi)存的,因此如果您需要使用諸如追蹤調(diào)試Trace之類的擴(kuò)展功能話,建議您最好使用128MB以上的內(nèi)存。OllyDbg 的最大特點(diǎn)之一就是分析。它會分析函

8、數(shù)過程、循環(huán)語句、選擇語句、表tables、常量、代碼中的字符串、欺騙性指令tricky constructs、API調(diào)用、函數(shù)中參數(shù)的數(shù)目,import表等等. 這些分析增加了二進(jìn)制代碼的可讀性,減少了出錯的可能性,使得我們的調(diào)試工作更加容易。2.MINGW介紹MinGW,是Minimalist GNU for Windows的縮寫。它是一個可自由使用和自由發(fā)布的Windows特定頭文件和使用GNU工具集導(dǎo)入庫的集合,允許你在GNU/Linux和Windows平臺生成本地的Windows程序而不需要第三方C運(yùn)行時庫。MinGW 是一組包含文件和端口庫,其功能是允許控制臺模式的程序使用微軟的標(biāo)

9、準(zhǔn)C運(yùn)行時間庫(MSVCRT.DLL),該庫在所有的 NT OS 上有效,在所有的 Windows 95發(fā)行版以上的 Windows OS 有效,使用基本運(yùn)行時間,你可以使用 GCC 寫控制臺模式的符合美國標(biāo)準(zhǔn)化組織(ANSI)程序,可以使用微軟提供的 C 運(yùn)行時間擴(kuò)展,與基本運(yùn)行時間相結(jié)合,就可以有充分的權(quán)利既使用 CRT(C Runtime)又使用 WindowsAPI功能。五、源程序#include<windows.h>LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam );

10、int CALLBACK WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)WNDCLASS wndClass;wndClass.style=CS_HREDRAW|CS_VREDRAW;wndClass.lpfnWndProc=WindowProc;wndClass.cbClsExtra=0;wndClass.cbWndExtra=0;wndClass.hInstance=hInstance;wndClass.hIcon=LoadIcon(NULL,IDI_APPLICATION);

11、wndClass.hCursor=LoadCursor(NULL,IDC_ARROW);wndClass.hbrBackground=(HBRUSH)(COLOR_WINDOW+1);wndClass.lpszMenuName=NULL;wndClass.lpszClassName="主程序界面"RegisterClass(&wndClass);HWND hwnd=CreateWindow(wndClass.lpszClassName,TEXT("逆向工程"),WS_OVERLAPPED|WS_CAPTION|WS_SYSMENU,CW_USED

12、EFAULT,CW_USEDEFAULT,400,300,NULL,NULL,hInstance,NULL);ShowWindow(hwnd,SW_SHOW);UpdateWindow(hwnd);MSG msg;while(GetMessage(&msg,NULL,0,0)TranslateMessage (&msg) ;DispatchMessage (&msg) ;return msg.wParam;LRESULT CALLBACK WindowProc(HWND hwnd,UINT uMsg,WPARAM wParam,LPARAM lParam )static

13、 HWND hEditUserName;static HWND hEditPassword;static HWND hButtonLogin;HDC hdc;PAINTSTRUCT ps;RECT rect;switch(uMsg)case WM_CREATE:hButtonLogin=CreateWindow(TEXT("button"),TEXT("登錄"),WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON,170,130,60,40,hwnd,NULL,(LPCREATESTRUCT)lParam)->hInstance,N

14、ULL);hEditUserName=CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER,130,55,150,25,hwnd,NULL,(LPCREATESTRUCT)lParam)->hInstance,NULL);hEditPassword=CreateWindow(TEXT("edit"),NULL,WS_CHILD|WS_VISIBLE|ES_LEFT|WS_BORDER|ES_PASSWORD,130,85,150,25,hwnd,NULL,(LPCR

15、EATESTRUCT)lParam)->hInstance,NULL);return 0;case WM_PAINT:hdc=BeginPaint(hwnd,&ps);rect.left=150;rect.top=100;rect.right=50;rect.bottom=30;DrawText(hdc,TEXT("用戶名:"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);rect.left=150;rect.top=160;rect.right=50;rect.bottom=30;DrawText(hdc

16、,TEXT("密 碼:"),-1,&rect,DT_SINGLELINE|DT_CENTER|DT_VCENTER);return 0;case WM_COMMAND:if(HWND)lParam=hButtonLogin)char userName20;char password20;GetWindowText(hEditUserName,userName,20);GetWindowText(hEditPassword,password,20);if(strcmp(userName,"楊博辰")=0&&strcmp(passwo

17、rd,"201522220234")=0)MessageBox(hwnd,TEXT("登錄成功"),TEXT("提示"),MB_OK);elseMessageBox(hwnd,TEXT("登錄失敗"),TEXT("提示"),MB_OK);return 0;case WM_DESTROY:PostQuitMessage(0);return 0;return DefWindowProc (hwnd, uMsg, wParam, lParam) ;六、過程及分析破解方法一:程序在輸入用戶名和密碼后點(diǎn)擊

18、登錄,如果用戶名和密碼正確,則會彈出登錄成功的消息框,否則會彈出登錄失敗的消息框。在反匯編窗口中單擊右鍵選擇“查找”,然后選擇“當(dāng)前模塊中的名稱(標(biāo)簽)”,按下鍵盤上的M鍵,找到USER32.MessageBoxA,如下圖所示。在該行單擊右鍵,選擇“反匯編窗口中跟隨輸入函數(shù)”,轉(zhuǎn)到該函數(shù)的匯編代碼處,在返回處加上斷點(diǎn)。如下圖所示。然后按F9運(yùn)行程序,輸入用戶名和密碼,如下圖所示。點(diǎn)擊登錄,彈出登錄失敗消息框。程序執(zhí)行到斷點(diǎn)處暫停,按F7單步步入,程序執(zhí)行到調(diào)用MessageBox函數(shù)的下一條指令處。如下圖所示?;疑噶畹纳弦粭l指令是當(dāng)用戶名和密碼不正確時執(zhí)行,提示登錄失敗。004017ED處和00401804處的CALL <JMP.&msvcrt.strcmp>指令是比較字符串,分別比較用戶名和密碼是否相等。004017F4處和0040180B處的JNZ SHORT test.00401835指令是如果字符串不相等,跳轉(zhuǎn)到00401835處執(zhí)行,提示用戶登錄失敗。將兩處JNZ指令換成NOP指令,無論用戶輸入的用戶名和密碼是否正確,都會提示登錄成功。如下圖所示。將修改后的程序保存為test2.exe后運(yùn)行,與上述分析一致,無論用戶輸

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論