去除nag彈窗
【一】實驗內容及要求
實驗名稱:去除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。
-
右鍵選擇Set breakpoint on every call to retMsgBox,即在所有呼叫retMsgBox的程式碼處設定斷點,這時滑鼠點Destination根據函式名稱排序,可以看到已經在所有呼叫retMsgBox的程式碼處設定了斷點。
-
現在開始按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()函式。
-
按F9開始除錯程式,直接彈出視窗讀秒,讀完秒點繼續,彈出驗證碼對話方塊,輸入自己的學號,點check,彈出錯誤對話方塊
-
彈出錯誤對話方塊,通過前面學習的方法找到關鍵字串或者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處的跳轉命令,讓其不跳轉
- 按Ctrl + F2重新開始執行程式,來到地址0040576E處將跳轉命令JE SHORT 0040579A用NOP填充,讓其不跳轉,然後按F9執行程式。
5…按F9後,彈出對話方塊,輸入自己的序號,然後彈出破解成功對話方塊,但這不是我們想要的,我們希望找到真正的註冊碼。
- 現在猜測真正的註冊碼應該在註冊成功和註冊不成功前面,即地址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視窗之前就已經建立好了,還要往上找。
-
繼續往上尋找函式的棧針,在地址00405DE0處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。
-
繼續往上尋找函式的棧針,在地址00405CD7處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。
12.繼續往上尋找函式的棧針,在地址00405BCE處又找到了一個最近的函式棧針,在這裡設定斷點。重新執行程式,看會不會有視窗1和顯示的等待5秒出現,如果出現了,說明這個Nag視窗之前就已經建立好了,還要往上找。 。
- 繼續往上尋找函式的棧針,在地址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()函式。
- 將地址00402C17處的PUSH EBP命令修改為RETN 4,讓呼叫rtcMsgBox()函式的上層函式直接返回。
12.按F9執行程式,直接彈出下面對話方塊,沒有彈出Nag視窗,成功去除。
相關文章
- win10去除彈窗廣告怎麼設定 win10如何阻止廣告彈窗Win10
- 方法|rk3568開發平臺如何去除android正在啟動彈窗Android
- WPF 自定義MessageBox 彈窗提示 彈窗載入
- iView之Modal(一級彈窗和二級彈窗)View
- 彈出視窗
- react-native 仿原生自定義彈窗|iOS/Android 彈窗效果ReactiOSAndroid
- Prism 彈出視窗
- avalonia自定義彈窗
- 彈出視窗messagebox
- Flutter 全域性彈窗Flutter
- 移動端彈窗
- 廣告彈窗/小視窗程式碼
- uniapp彈窗24小時之後彈APP
- 圖片彈窗和下載彈窗wordpress外掛下載-Facebox download
- winrar去廣告彈窗
- 去掉RedisDesktopManager更新提示彈窗Redis
- uniapp 自定義彈窗元件APP元件
- 自定義版本更新彈窗
- WKViewManager iOS 彈窗架構ViewiOS架構
- 去除 bootstrap 彈出框背景變暗的效果boot
- fastadmin 彈出視窗的功能AST
- 成功或失敗彈窗vueVue
- vue3仿windows彈窗VueWindows
- iOS開發之彈窗管理iOS
- react navigation實現透明彈窗ReactNavigation
- jQuery 加入購物車 彈窗jQuery
- 從底部彈出Dialog視窗
- flash廣告彈窗怎麼刪除win10 flash廣告彈窗怎麼禁止Win10
- layer父介面呼叫子彈窗的方法和獲取子彈窗的元素值總結
- avalonia實現自定義小彈窗
- antdv彈窗modal可拖動方法
- 直播app原始碼,Flutter 彈窗元件APP原始碼Flutter元件
- laraval-admin彈窗table元件改元件
- Chrome彈窗提醒Flash將不再支援Chrome
- Android之Window和彈窗問題Android
- 簡單的網頁彈窗陷阱網頁
- Android彈窗二則: PopupWindow和AlertDialogAndroid
- iOS開發常用之 HUD 彈窗iOS