1. 程式人生 > >第五章——演示版保護技術-去除警告視窗例項

第五章——演示版保護技術-去除警告視窗例項

   去除警告視窗意為將廣告彈窗去除,去除的思路歸根結底是:在不影響主程式的條件下,查詢到警告視窗建立的位置將其跳過或者nop掉,顯示視窗的函式主要有Messagebox、DialogBoxPara、ShowWindow、CreateWindowEx。還有一種去除的方式是通過訊息斷點的方式準根溯源到視窗建立的程式碼。   這裡的例項是加密解密書上的例項程式,演示為了熟悉整個操作的思路和流程 源程式:   演示程式是一個呼叫了DialogBoxParamA函式來顯示資源中的對話方塊 我們可以用eXeScope開啟它,查詢其對應的資源ID:

我們發現資源ID為121, 對應十六進位制0x79. 根據這點開啟W32Dasm去檢視資源ID為0x79的彙編程式碼:

我們也是確實呼叫了DialogBoxParamA,但是這裡不能簡單的將DialogBoxParamA去除,因為DialogBoxParamA一般會和EndDialog配合使用,前者開啟對話方塊,後者關閉對話方塊 函式原型: int DialogBoxParam(       HINSTANCE     hInstance,                        //控制代碼       LPCTSTR           lpTemplateName,           //對話方塊ID      HWND               hWndParent,                  //父視窗控制代碼       DLGPROC         lpDialogFunc,                 //對話方塊處理函式指標       PARAM             dwInitParam                  //初始化值 ); 這裡的最重要引數是lpDialogFunc,此引數制定了視窗回撥的具體程式碼位置,在IDA中具體程式碼如下:
這裡發現,呼叫主程式也是呼叫的DialogBoxParamA,並且視窗的ID為0x65,跟蹤到這裡我們總結出了兩種修改方式:
  • 將0x00401051處程式碼push 0 修改為 Jmp 0X4010E5,直接定位到主程式執行位置,在OD中修改如下
  • 第二種方式,將警告框的程式碼修改為主程式的程式碼內容,修改回撥函式地址和資源ID即可 如果遇到對話方塊不是資源,也無法用三種斷點斷下,則可以嘗試訊息斷點 WM_LBUTTONUP等等