去除nag彈窗

pray030發表於2020-12-09

【一】實驗內容及要求

實驗名稱:去除nag

實驗目的

掌握基本的軟體破解方法

實驗環境

Windows作業系統,OllyDbg,Tut.ReverseMe1.exe,CodeZero.1.exe,
blaster99.exe

實驗內容

1.破解Tut.ReverseMe1.exe

2.破解CodeZero.1.exe

3.破解blaster99.exe

【二】實驗過程及結果

實驗內容1

1.破解Tut.ReverseMe1.exe,根據PPT給出實驗過程
1.現在先從入口點00401168處往下開始觀察一下程式碼,發現不遠處,即地址00401189處有一個RETN指令,RETN是跳出子程式的指令,被稱為返回指令。後面開始是一些看不懂的東西,所以先按F8一句一句除錯看看。
在這裡插入圖片描述

2.按F8當執行地址0040116D處函式呼叫的時候彈出了煩人的Nag視窗,點OK,彈出輸入註冊碼,然後輸入自己的學號,點Register me!彈出錯誤對話方塊,再點OK,程式結束。因此現在第一步要先去除Nag視窗,第二步找到正確的註冊碼。
在這裡插入圖片描述

3.要去除訊息框,只要操作呼叫訊息框的函式部分即可。VB中呼叫訊息框的函式為MSBVBVM50.rctMsgBox。重新開始除錯程式,在OllyDbg中點右鍵選擇Search for – All intermodular calls,將會列出程式中呼叫的API目錄。在地址00402977處可以看到一個MSBVBVM50.rctMsgBox函式呼叫,右鍵選擇Set breakpoint on every call to retMsgBox。在這裡插入圖片描述

  1. 右鍵選擇Set breakpoint on every call to retMsgBox,即在所有呼叫retMsgBox的程式碼處設定斷點,這時滑鼠點Destination根據函式名稱排序,可以看到已經在所有呼叫retMsgBox的程式碼處設定了斷點。在這裡插入圖片描述

  2. 現在開始按F9除錯程式,程式執行到斷點00402CFE處,這裡是一個recMsgBox函式的呼叫,函式呼叫前應該會傳遞引數,往上拉在地址00402C85和00402CBE處找到了Nag視窗顯示的字串。在這裡插入圖片描述

6.繼續按F9除錯程式,彈出對話方塊,選擇OK。在這裡插入圖片描述

7.選擇OK後,彈出程式的主畫面,讓輸入註冊碼,因為我們要去除Nag視窗,所以要找到所有Nag視窗,這時候點Nag?,看會發生什麼。
8.點Nag?,程式又執行到地址00402CFE處停下來,這說明剛開始執行程式時的Nag視窗和點Nag?後彈出的Nag視窗有相同的執行程式碼,所以只要對這一個地方打補丁即可。在這裡插入圖片描述

9.按Ctrl + F2重新開始除錯程式,找到地址00402CFE處,該地址的程式碼呼叫rtcMsgBox()彈出Nag視窗,一直往上拉,找到呼叫rtcMsgBox()函式的上層函式的棧針,注意所有函式呼叫開始的前兩行程式碼都是PUSH EBP和MOV EBP,ESP。往上拉找出它們。 在地址00402C17和00402C18處找到了呼叫rtcMsgBox()函式的上層函式的棧針,現在的目標就是修改這兩行程式碼讓上層函式無法執行,或讓上層函式直接返回,使其無法呼叫rtcMsgBox()函式。在這裡插入圖片描述

10.將地址00402C17處的PUSH EBP命令修改為RETN 4,讓呼叫rtcMsgBox()函式的上層函式直接返回。在這裡插入圖片描述

按F9執行程式,直接彈出下面對話方塊,沒有彈出Nag視窗,而且現在怎麼點Nag?都不會彈出Nag視窗,說明去除成功,是不是很簡單,右鍵選擇copy to executable-All modifications彈出對話方塊,然後右鍵選擇Save File儲存檔案。下一步就是查詢註冊碼。
在這裡插入圖片描述

11.前面去除了Nag視窗,現在查詢註冊碼,開啟儲存的已去除Nag視窗的檔案,按F9執行程式彈出註冊對話方塊,輸入自己的學號,彈出錯誤對話方塊。現在查詢錯誤對話方塊裡的字串。在這裡插入圖片描述

12.重新除錯程式,查詢錯誤對話方塊中的字串,在程式碼視窗右鍵選擇Search for-All referenced text strings,在地址00402A69處找到”Sorry! Wrong registration code !”,雙擊這一行。在這裡插入圖片描述

13.雙擊後跳轉到地址00402A69處,往上拉,在地址00402A2A處看到一個字串“I’mlena151”,在該字串下面,即地址00402A2F處的一條命令呼叫了一個字串比較函式__vbaStrCmp(),用於比較使用者輸入的字串,現在猜測該字串就是驗證碼。
在這裡插入圖片描述

14.繼續往上拉,在地址004028BD處也看到了字串“I’mlena151”,在該字串下面,即地址004028C2處的一條命令也呼叫了一個字串比較函式__vbaStrCmp(),用於比較使用者輸入的字串,並且在地址004028F5處,看到了註冊成功字串,因此進一步證明該字串就是驗證碼。在這裡插入圖片描述

15.重新開始除錯程式,按F9執行程式,彈出對話方塊,輸入剛才的註冊碼,彈出正確成功對話方塊,註冊成功。現在兩個目標都已完成。
在這裡插入圖片描述
在這裡插入圖片描述

實驗內容2

1.破解CodeZero.1.exe,根據PPT給出實驗過程

1.用OllyDbg開啟CodeZero.1.exe,和之前Tut.ReverseMe1.exe的一樣,用VB5.0編寫的程式,入口點處在地址004011A8處,ThunRTMain()函式在地址004011A2處, PUSH 004013E8相當於把004013E8當作ThunRTMain()函式的引數壓入棧中。從資訊視窗可以看到,地址004011A1處的CALL指令呼叫地址004011A2處的ThunRTMain()函式。在這裡插入圖片描述

  1. 按F9開始除錯程式,直接彈出視窗讀秒,讀完秒點繼續,彈出驗證碼對話方塊,輸入自己的學號,點check,彈出錯誤對話方塊在這裡插入圖片描述

  2. 彈出錯誤對話方塊,通過前面學習的方法找到關鍵字串或者rctMsgBox()函式呼叫所在位置,這裡查詢關鍵字,在程式碼視窗右鍵選擇Search for-All referenced text strings,在地址0040579F處找到”Invalid unlock code, please try again.”,雙擊這一行。
    在這裡插入圖片描述

3.跳到地址0040579F處的”Invalid unlock code, please try again.”後,往上拉,可以看到在地址0040577B有成功註冊字串,即“Congratulation!you’ ve really made it ”。現在猜測,應該要跳到地址0040577B處執行,但是在該地址前面地址0040576E處有一個跳轉語句,即JE SHORT 0040579A,如果執行這條語句將繞過地址0040577B處的命令從而執行地址0040579F處的命令。因此,想辦法修改地址0040576E處的跳轉命令,讓其不跳轉在這裡插入圖片描述

  1. 按Ctrl + F2重新開始執行程式,來到地址0040576E處將跳轉命令JE SHORT 0040579A用NOP填充,讓其不跳轉,然後按F9執行程式。在這裡插入圖片描述

5…按F9後,彈出對話方塊,輸入自己的序號,然後彈出破解成功對話方塊,但這不是我們想要的,我們希望找到真正的註冊碼。在這裡插入圖片描述

  1. 現在猜測真正的註冊碼應該在註冊成功和註冊不成功前面,即地址0040577B和地址0040579F 前面,然後通過一個字串比較函式__vbaStrCmp()來比較真正的註冊碼和使用者輸出的註冊碼,現在從地址0040577B 處往上拉,在地址00405721處我們看到了一串字元,在地址00405726處我們看到了字串比較函式,現在猜測55555就是註冊碼。在這裡插入圖片描述

7.按Ctrl+F2重新開始除錯程式,然後按F9後,彈出對話方塊,輸入正確註冊碼,然後彈出破解成功對話方塊。下一步就要去除Nag視窗,即去掉第一個倒數計時介面。
在這裡插入圖片描述

8.找到出現Continue的彙編程式碼。在程式碼視窗右鍵選擇Search for-All referenced text strings,在地址0040604B處找到”Continue…”,雙擊這一行。在這裡插入圖片描述
函式棧針的前兩行應該是PUSH EBP和MOV EBP, ESP,在地址00405FF2處找到離Conutine最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。
在這裡插入圖片描述
在這裡插入圖片描述

9.繼續往上尋找函式的棧針,在地址00405EE9處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 在這裡插入圖片描述
在這裡插入圖片描述

  1. 繼續往上尋找函式的棧針,在地址00405DE0處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。在這裡插入圖片描述
    在這裡插入圖片描述

  2. 繼續往上尋找函式的棧針,在地址00405CD7處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。在這裡插入圖片描述
    在這裡插入圖片描述

12.繼續往上尋找函式的棧針,在地址00405BCE處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。在這裡插入圖片描述
在這裡插入圖片描述

  1. 繼續往上尋找函式的棧針,在地址00405AC5處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。
    在這裡插入圖片描述
    在這裡插入圖片描述

14 繼續往上尋找函式的棧針,在地址004059C2處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。
.在這裡插入圖片描述
在這裡插入圖片描述

15.繼續往上尋找函式的棧針,在地址00405905處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。在這裡插入圖片描述

執行程式,這次沒有彈出Nag視窗,說明這個函式就是呼叫Nag視窗的函式,現在想辦法終止該函式的呼叫。
16.將在地址00405905處函式棧針程式碼修改為RETN 4,直接將函式呼叫返回,然後儲存檔案,Nag視窗去除。

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述

實驗內容3

1.破解blaster99.exe,給出實驗過程

1.用OllyDbg開啟BLASTER99.exe,和之前Tut.ReverseMe1.exe的一樣,用VB5.0編寫的程式,入口點處在地址00401168處,ThunRTMain()函式在地址00401168處, PUSH 004018B8相當於把004018B8當作ThunRTMain()函式的引數壓入棧中。在這裡插入圖片描述

2.開始除錯。輸入學號彈出錯誤框在這裡插入圖片描述

3.出錯誤對話方塊,通過前面學習的方法找到關鍵字串或者rctMsgBox()函式呼叫所在位置,這裡查詢關鍵字,在程式碼視窗右鍵選擇Search for-All referenced text strings,在地址0040579F處找到”error!Das Passwort ist falsch!.”,雙擊這一行。在這裡插入圖片描述

4.往上拉發現Unicode“2G83G35Hs2”,猜測其為正確的密碼,現在輸入進行測試在這裡插入圖片描述

5.按F9進行除錯,彈窗成功。
在這裡插入圖片描述

6.現在去除煩人的nag彈窗。要去除訊息框,只要操作呼叫訊息框的函式部分即可。VB中呼叫訊息框的函式為MSBVBVM50.rctMsgBox。重新開始除錯程式,在OllyDbg中點右鍵選擇Search for – All intermodular calls,將會列出程式中呼叫的API目錄。在地址00402977處可以看到一個MSBVBVM50.rctMsgBox函式呼叫,右鍵選擇Set breakpoint on every call to retMsgBox。在這裡插入圖片描述

7.右鍵選擇Set breakpoint on every call to retMsgBox,即在所有呼叫retMsgBox的程式碼處設定斷點,這時滑鼠點Destination根據函式名稱排序,可以看到已經在所有呼叫retMsgBox的程式碼處設定了斷點。在這裡插入圖片描述

8.現在開始按F9除錯程式,程式執行到斷點00402CFE處,這裡是一個recMsgBox函式的呼叫,函式呼叫前應該會傳遞引數,往上拉在地址00402C85和00402CBE處找到了Nag視窗顯示的字串。在這裡插入圖片描述

9.按F9進行除錯,出現nag彈窗後點確定,發現程式還是執行在00402CFE處。這說明剛開始執行程式時的Nag視窗和點Nag?後彈出的Nag視窗有相同的執行程式碼,所以只要對這一個地方打補丁即可。
在這裡插入圖片描述
在這裡插入圖片描述

10.按Ctrl + F2重新開始除錯程式,找到地址00402CFE處,該地址的程式碼呼叫rtcMsgBox()彈出Nag視窗,一直往上拉,找到呼叫rtcMsgBox()函式的上層函式的棧針,注意所有函式呼叫開始的前兩行程式碼都是PUSH EBP和MOV EBP,ESP。往上拉找出它們。在地址00402C17和00402C18處找到了呼叫rtcMsgBox()函式的上層函式的棧針,現在的目標就是修改這兩行程式碼讓上層函式無法執行,或讓上層函式直接返回,使其無法呼叫rtcMsgBox()函式。在這裡插入圖片描述

  1. 將地址00402C17處的PUSH EBP命令修改為RETN 4,讓呼叫rtcMsgBox()函式的上層函式直接返回。在這裡插入圖片描述

12.按F9執行程式,直接彈出下面對話方塊,沒有彈出Nag視窗,成功去除。在這裡插入圖片描述

相關文章