乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      小甲魚解密系列調試篇

       成已成物 2022-05-25 發(fā)布于湖南

       

      目錄

      一點鋪墊:基礎知識

      1.匯編語言

      2.NAG窗口

      3.SEH

      4.斷點類型

      一、MessageBox.exe修改程序標題內容——修改函數傳入值

      二、TraceMe.exe暴力破解程序登陸界面——搜索函數、尋找附近調用取值的地方

      三、reverseMe.exe暴力破解/打補丁實現(xiàn)注冊——分析文件結構 逆向注冊文件

      修改跳轉條件暴力破解:

      注冊打補?。?/a>

      四、reverseMe.exe去除NAG窗口——修改跳轉條件跳過對話框,使得MessageBox失效:父句柄設為空白,修改文件PE結構入口AddressOfEntryPoint

      1.修改跳轉條件跳過對話框

      2.使得MessageBox失效:父句柄設為空白

      3.修改文件PE結構入口AddressOfEntryPoint

      五、reverseMe.Oops.exe——PE文件頭!

      六、pixtopianbook破解功能限制——定位至引用彈出NAG窗口的地址、搜索字符串改變值

      1.定位NAG窗口

      2.搜索字符串改變UNREGISTERED VERSION字符串

      七、pcsurgeon.exe搜索字符串找到調用

      1.搜索字符串改變<>

      2.查找地址常量 https://blog.csdn.net/wlswls1711/article/details/97145997


      一點鋪墊:基礎知識

      1.匯編語言

      EBP:主要是用于棧和棧幀。

      ESP:指向當前進程的棧空間地址。

      EIP:總是指向下一條要被執(zhí)行的指令。

      2.NAG窗口

             nag本意是煩人的意思,nag窗口是軟件設計者用來時不時提醒用戶購買正版的警告窗口。一般nag在程序啟動或退出的時候彈出來,或者在程序運行的某個時刻突然蹦出來嚇你一跳。

      3.SEH

      SEH(Structured Exception Handling),即結構化異常處理。

      SEH是Windows操作系統(tǒng)提供的功能,跟開發(fā)工具無關。  

      Windows程序設計中最重要的理念就是消息傳遞,事件驅動。 當GUI應用程序觸發(fā)一個消息時,系統(tǒng)將把該消息放入消息隊列,然后去查找并調用窗體的消息處理函數(CALLBACK),傳遞的參數當然就是這個消息。  

      我們同樣可以把異常也當作是一種消息,應用程序發(fā)生異常時就觸發(fā)了該消息并告知系統(tǒng)。

      系統(tǒng)接收后同樣會找它的“回調函數”,也就是我們的異常處理例程。  

      當然,如果我們在程序中沒有做異常處理的話,系統(tǒng)也不會置之不理,它將彈出我們常見的應用程序錯誤框,然后結束該程序。 所以,當我們改變思維方式,以CALLBACK 的思想來看待SEH,SEH 將不再神秘。  

      4.斷點類型

      軟件斷點只能斷點程序領空,不能斷點動態(tài)鏈接庫如果需要斷點動態(tài)鏈接庫,就需要用到硬件斷點。


      一、MessageBox.exe修改程序標題內容——修改函數傳入值

      int WINAPI MessageBox(HWND hWnd,LPCTSTR lpText,LPCTSTR lpCaption,UINT uType);

            1.找到MessageBox的傳入值

            2.修改傳入的lpText


      二、TraceMe.exe暴力破解程序登陸界面——搜索函數、尋找附近調用取值的地方

            1使用OD加載程序,搜索分別搜索GetDlgItemTextA、GetDlgItemTextW、GetWindowTextA、GetWindowTextW,搜索到的都下斷點。

            (2)運行程序,在程序彈出對話框時,輸入用戶名和系列號,然后按F8單步,在消息窗口觀察哪條語句有我們剛剛輸入的用戶名和系列號。如下圖:

            (3找到后,就在這條語句的附件會有校驗和跳轉(那個test就是效驗,je就是跳轉),我們可以修改效驗結果,或者直接NOP掉跳轉。(我這里直接NOP掉了跳轉)


      三、reverseMe.exe暴力破解/打補丁實現(xiàn)注冊——分析文件結構 逆向注冊文件

      首先分析代碼結構:

      修改跳轉條件暴力破解:

      直接將彈出還未注冊的窗口判斷語句(je,jle,jnz等)更改為nop(不希望它執(zhí)行)或jmp(希望它執(zhí)行),即可實現(xiàn)。

      注冊打補丁:

      確認程序的邏輯結構。

      下了斷點的是程序的大致算法模塊。


      四、reverseMe.exe去除NAG窗口——修改跳轉條件跳過對話框,使得MessageBox失效:父句柄設為空白,修改文件PE結構入口AddressOfEntryPoint

      定位NAG窗口

      1.修改跳轉條件跳過對話框

      (2把程序跑一遍之后我們發(fā)現(xiàn)程序有兩個NAG,一個是在程序界面啟動前出現(xiàn),另一個是在程序關閉后出現(xiàn)的。如圖所示(紅框里的),運行這兩個call后都會彈出NAG窗口,所以我們判斷NAG窗口就在這里面。如第三講,可以把這兩個call給NOP掉或者在call前面使je跳轉實現(xiàn),還有在call前面添加一個jmp跳轉跳過這NAG窗口的call。

      2.使得MessageBox失效:父句柄設為空白

      我們看到NAG窗口它的父窗口是0(也就是沒有父窗口),那么我們就可以創(chuàng)造一個不存在的父窗口給NAG窗口。比如為NAG窗口添加一個句柄為1的父窗口,本來句柄1的父窗口就不存在(也就是相當于關閉了),那么NAG窗口也就不存在了,那么我們就達到了去除NAG窗口目的。

      3.修改文件PE結構入口AddressOfEntryPoint

      1把程序載入OD,可以看到AddressOfEntryPoint(入口地址)為00401000,但是我們程序的真正內容是在:00401024.前面的是我們要去掉的去除NAG窗口,那么我們如果把程序入口改為:00401024 就完美的去掉了第一個NAG窗口了。

      2說干就干,點擊快捷欄的“m”鍵,在彈出窗口中雙擊PE 文件頭,我們就來到內存中文件頭的位置了。在這個窗口中,第一欄為地址,第二欄為地址上的二進制數據,第三欄為方便人類閱讀的代碼(因為內存中的二進制數據是高地址放后面,底地址放前面,閱讀很不方便),第四欄為注釋。

      3找到真正的PE頭的偏移地址(000000C0),如圖:

      4根據偏移地址找到真正的PE頭(004000C0,PE頭會以ASCII的"PE"開頭,也就是50 45),然后就找到程序的入口地址(AddressOfEntryPoint)

      5根據(4)中得到的程序入口地址在內存中的地址(004000E8),那么我們就可以修改入口地址為00401024啦。在數據窗口按Ctrl+G輸入004000E8,修改之:

      6保存修改程序,重新載入OD發(fā)現(xiàn)入口地址成功改為00401024了:

      五、reverseMe.Oops.exe——PE文件頭!

      不知道為什么小甲魚不能在編譯器里運行但我卻可以,這里跳過,以后有機會再來看

      清理下OD的UDD文件夾,不行的話試試用視頻中演示的OD。

      你是開了OD后從OD打開程序,我是右鍵程序直接用OD打開程序的 我這樣沒你那個提示哦 |

       

      六、pixtopianbook破解功能限制——定位至引用彈出NAG窗口的地址、搜索字符串改變值

      1.定位NAG窗口

      (1)在OD運行彈出的軟件界面試圖添加第5個人,出現(xiàn)錯誤提示box,如下圖

      (2)此時在OD中按下暫停(暫停后OD中的地址跳至動態(tài)鏈接庫,即系統(tǒng)領空處),然后按ALT+F9返回到用戶,在用戶界面點擊確定后,OD中就返回到程序接管,地址跳轉到下圖的位置:

      (3)圖中的MessageBoxA就應該是剛才的錯誤提示框了,F(xiàn)8到retn,返回到函數(函數調用之后碰到ret返回),如下圖:

      注意:ret返回后,在上方又有一個call,說明在此處是間接地調用messagebox。

      2.搜索字符串改變UNREGISTERED VERSION字符串

      接下來將幾處”unregistered version”字符查找并修改:

      方法1:查找所有參考文本字串→查找文本“unregistered version”→跟隨到代碼處,找到在內存中的地址→在數據窗口中修改保存。

      方法2:直接點擊Memory→Ctrl+B查找→修改后記住字符串在內存中的地址,到OD的數據窗口保存?!窘ㄗh用這種方法】

      注意:修改時記得【保持大小】,不然會出錯。

      七、VisualSite Designer——定位、硬件斷點

      1.次數耗盡之前——定位修改跳轉條件

      一路F8,遇到彈窗就在此處F2下斷,然后重新載入,F(xiàn)9運行到斷點處,消除斷點,繼續(xù)執(zhí)行。

      F8,出現(xiàn)彈窗,計數減一完成,點擊進入程序發(fā)現(xiàn)程序執(zhí)行下一條語句

      在這里插入圖片描述

      所以該函數的作用是顯示歡迎界面,計數器減一并返回eax==1,

      此時我們修改該指令
      在這里插入圖片描述

      保存修改,運行,發(fā)現(xiàn)已經沒有次數限制

      2.次數耗盡之后——標志找不同

      我們用OD載入觀察所有的條件跳轉語句,并標志出跳轉結果,等到次數耗盡之后觀察跳轉結果與是否發(fā)生改變,找到關鍵跳轉點nop。

      八、pcsurgeon.exe——搜索字符串找到調用

      1.搜索字符串改變<UNREGISTER

      我們要從紅筆圈出的地方入手。將軟件載入OllyDBG,在代碼界面右鍵——查找——所有參考文本字串,在第一行右鍵——查找文本,查找一部分比如“<unregistered”,

      在這里插入圖片描述

      找到后雙擊進入代碼的位置,可以看到代碼的上方有兩個jnz跳轉,未注冊過的源代碼是不會跳轉的,將這個jnz改為jmp,右鍵——復制到可執(zhí)行文件——右鍵——保存文件為pcsurgeon1.exe,這樣NAG窗口就去掉了

      2.查找地址常量 https://blog.csdn.net/wlswls1711/article/details/97145997

      來到代碼處。鼠標向上滑幾行,可以看到這樣的代碼:

      1. mov eax,dword ptr [60ebe8]
      2. cmp byte ptr [eax],0
      3. jnz 005cc935

      顯然,將地址60ebe8的值送到eax里,然后將eax的值作為地址,將這個地址中的值和0比較(其實是兩數相減),結果不為零就跳轉,但是ds:[0060eb8c]=00610c4a
      右鍵點擊mov eax,dword ptr [60ebe8]這一行——查找參考——地址常量,將所有的都設置斷點。

      在這里插入圖片描述

      重新運行程序,來到第一個斷點處,有這樣的代碼:

      1. mov edx,dword ptr [60ebe8]
      2. mov byte ptr [edx],al

      在上面我們知道ds:[0060eb8c]=00610c4a,所以:
      這兩段代碼執(zhí)行后,ds:[00610c4a]的值就是al的值,不幸的是,我們從OD右邊的寄存器中看到al=0,所以
      ds:[00610c4a]=00,所以cmp byte ptr [eax],0的結果就是0,所以jnz 005cc935就不能跳轉,所以。
      我們直接將mov byte ptr [edx],al 改為mov byte ptr [edx],1,復制到可執(zhí)行文件,保存文件就破解成功了,但是這樣改會出現(xiàn)這樣的問題:

      這個軟件這樣改是沒有問題,但比較大的軟件這樣改,就可能會影響程序,因為要重定位的東西很多,所以也可以這樣改:
      將 cmp byte ptr [eax],0改為 mov byte ptr [eax],1
      將 jnz short 005c2c15 改為  jmp short 005c2c15

      九、MrBills.exe——不斷進入找到判斷注冊的地方

      1.使用搜尋字串找關鍵字。

      You have entered an invalid email address or license number.Please try again.

      2.嘗試跳過。

      • 斷點在004299B9 | 75 36 | jne mrbills.4299F1 |跳轉未實現(xiàn)

      • jne跳轉未實現(xiàn)為ZF=1,我們將其修改為ZF=0

      • F9執(zhí)行程式

      • 彈出視窗顯示Thank you for registering! (感謝你註冊!)

      • 按下確定

      • 發(fā)現(xiàn)程式並沒有真正被註冊

      • 在此可以確認單存跳過只是修改顯示的彈出訊息內容3.

      3.

      • 斷點在0040714C | 55 | push ebp |

      • F8一步一步過,並持續(xù)觀察eax的變化

        1. 0040714C | 55 | push ebp |
        2. 0040714D | 8BEC | mov ebp,esp |
        3. 0040714F | FF75 0C | push dword ptr ss:[ebp+C] |
        4. 00407152 | FF75 08 | push dword ptr ss:[ebp+8] |
        5. 00407155 | E8 77FEFFFF | call mrbills.406FD1 |
        6. 0040715A | 84C0 | test al,al |
        7. 0040715C | 59 | pop ecx |
        8. 0040715D | 59 | pop ecx |
        9. 0040715E | A2 A0765000 | mov byte ptr ds:[5076A0],al |
        10. 00407163 | 75 1B | jne mrbills.407180 |
        11. 00407165 | FF75 0C | push dword ptr ss:[ebp+C] |
        12. 00407168 | FF75 08 | push dword ptr ss:[ebp+8] |
        13. 0040716B | E8 ADFEFFFF | call mrbills.40701D |
        14. 00407170 | 84C0 | test al,al |
        15. 00407172 | 59 | pop ecx |
        16. 00407173 | 59 | pop ecx |
        17. 00407174 | A2 A0765000 | mov byte ptr ds:[5076A0],al |
        18. 00407179 | A2 A2765000 | mov byte ptr ds:[5076A2],al |
        19. 0040717E | 74 0D | je mrbills.40718D |
      • 004071550040716Bcall回傳eax的值,故這兩個需要在F7步入觀察

      • 004071550040716B設定中斷點

      • 移除其他中斷點

      4.繼續(xù)分析。

      直接將00406FC5 | mov al,bl 改為 mov al,1 即可變?yōu)橛谰米裕?/p>

      十、pc2am2p.exe VB語言編寫的程序的特點

       

       

      十一、查看調用——追根溯源

       

      十二、Delphi程序編寫的特點

      PUSH XXX

      RETN

      達到 CALL XXX的效果

       

      面向事件的編程語言,很多CALL指令

       

      -號返回CALL處

       

      十三/十四、搜索關鍵函數

      1.查找-》所有模塊間的調用

      2.Alt+N 搜索

        本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多