有感於朋友們的鼓勵,再送上艾克主頁秀2005 找破點,打SMC補丁(新手教程)

看雪資料發表於2004-12-02

【軟體名稱】:艾克主頁秀2005  找破點,打SMC補丁(新手教程)
【大    小】:624 KB (638,976 位元組)
【下載地址】:自己去找
【軟體限制】:功能限制
【軟體簡介】:艾克主頁(*)2005是一款功能強大的網頁製作輔助工具,它可以輕鬆的給您的網頁增加眩目的特效,並且可以直接透過網頁模板製作基本的網頁檔案!同時還具有網頁加密/壓縮等功能。
【作    者】:chenjiwl         chenjiwl@sina.com
【破解平臺】:Windows xp
【目    標】:找到爆破點,再打SMC補丁
【難度係數】:★☆☆☆☆(容易) 
【相關工具】:Ollydbg 1.10 Fly修改版,DeDe,aspackdie,Peid

【作者宣告】: 主要是想給自己的主頁做些特效,所以對它下了手,很容易的,可以做新手的教程。SMC部分系自己亂搞,請多指導!

【詳細過程】
        偶的作法一向是以穩健著稱,一般不出手,出手必出精!

        廢話少說,開工!

        安裝程式先!

  開啟安裝目錄,這裡偶給大家推薦一個軟體(Total Commader),一個很強的檔案管理軟體。

        一眼看去,不少檔案!恩,還有幾個DLL檔案,先用Peid查一查吧!

  眨眼的功夫已經出來了! 全部都是用ASPack 2.1 加的殼!

       用aspackdie脫了再說!又眨了一下眼,已經搞定。

       再用Peid查脫出來的程式,是Delphi編的程式,可以用上DeDe了。

       ---------------------------------------------------------------------------------
       熱身已經完成。

       請看我的標準動作:

       第一步:試一試

           開啟軟體,介面很漂亮(一定用了SuiPack的控制元件),下面的狀態條顯示未註冊!:=(,
       隨便試幾個功能。在開啟網頁模板時彈出了提示框,上面說了:不給錢,不讓用。
       再轉到註冊視窗,隨便輸入電郵地址,使用者名稱和註冊碼,再點確定。沒反映?作者
       有一定的反偵察能力!!!

           大大的狡猾,死了死了的有!

       ---------------------------------------------------------------------------------

       第二步:挖一挖
           該用DeDe了,用DeDe將脫殼後的程式載入分析,一分鐘就OK了,轉到"Forms",
       只有五個視窗,其中有兩個是讀資料庫的視窗,是Delphi自帶的,不用管。
           還有三個:Ta_frm_load,Ta_frm_main,Tgetcol
       一個是封面視窗,一個是主視窗,另一個是顏色拾取視窗。
           重點在Ta_frm_main,請轉到"Procedures"頁面,在左邊框中選擇frm_main,右邊框中
       的過程定義十分清晰(作者的程式設計風格不錯,偶程式設計序重來沒寫過一個正式的名稱!)。

     作者真是體貼我們啊!!! 秒秒鐘,我就找到了註冊框中“確定”按鈕的過程:

                btn_reg_okClick      00574948(這就是入口地址,在olldbg中有用)

  雙擊這一項,轉到相應的程式碼,請定位到下面的位置:

---------------------------------------------------------------------------------
       * Reference to object Treginfo
|
005749E0   8B0D00DA4F00           mov     ecx, [$004FDA00]

* Reference to: System.@CopyRecord;
|
005749E6   E8850CE9FF             call    00405670
005749EB   803D3C03580000         cmp     byte ptr [$0058033C], $00   //這裡就是比較點
005749F2   746F                   jz      00574A63          //如果註冊碼不正確就跳走!!!!!!
005749F4   6A02                   push    $02
005749F6   66A1A84A5700           mov     axword ptr [$00574AA8]
005749FC   50                     push    eax
005749FD   6A00                   push    $00
005749FF   8D45C4                 lea     eax, [ebp-$3C]
00574A02   8B0D20035800           mov     ecx, [$00580320]

* Possible String Reference to: '      軟體已經成功註冊給:'
|
00574A08   BAB44A5700             mov     edx, $00574AB4              //正確就到這裡讀恭喜的資訊了
---------------------------------------------------------------------------------
  OK!很簡單,看來只要將上面這個關鍵跳處理一下就可註冊成功了!

    在這裡我要停一下,讓大家分析一下了!下面這一段程式碼給我們什麼啟示?

005749EB   803D3C03580000         cmp     byte ptr [$0058033C], $00   //這裡就是比較點
005749F2   746F                   jz      00574A63          //如果註冊碼不正確就跳走!!!!!!

        想出來了嗎?
        我來分析一下吧,很簡單,即然在這裡有一個比較[0058033C]中的值的指令,
    就一定會有一個指令向[0058033C]中寫一個值,不然它比較個屁啊!
        明白了嗎!明白了就繼續!

       ---------------------------------------------------------------------------------
     第三步:動一動
          用Olldbg將脫殼後的程式載入! 記得上面的分析嗎!
          0058033C這個地址是我們的關鍵。
          點選左下方的記憶體框,按Ctrl+G,填入0058033C, 轉到這個地址,選擇第一個數值,再
    點右鍵,選擇“斷點”--“硬體訪問”--“byte”。(任何指令訪問這個地址都會中斷下來)
          按F9執行程式

    很快會停在00402B4F:
-------------------------------------------------------------------------------
00402B3F  |> \8D74>lea     esidword ptr ds:[ecx+esi-4]         >>源地址
00402B43  |.  8D7C>lea     edidword ptr ds:[ecx+edi-4]         >>目的地址
00402B47  |.  C1F9>sar     ecx, 2               >>複製的個數
00402B4A  |.  78 1>js      short unpacked.00402B5D
00402B4C  |.  FD   std
00402B4D  |.  F3:A>rep     movs dword ptr es:[edi], dword ptr ds:[esi]  >>這裡就是在給[0058033C]複製資料
00402B4F  |.  89C1 mov     ecxeax                        >>>>>>>>>>>>>>>>>>硬體中斷在這裡
00402B51  |.  83E1>and     ecx, 3
00402B54  |.  83C6>add     esi, 3
00402B57  |.  83C7>add     edi, 3
00402B5A  |.  F3:A>rep     movs byte ptr es:[edi], byte ptr ds:[esi]
00402B5C  |.  FC   cld
00402B5D  |>  5F   pop     edi                                                       ;  unpacked.004FDA4E
00402B5E  |.  5E   pop     esi                                                       ;  unpacked.004FDA4E
00402B5F  \.  C3   retn
-------------------------------------------------------------------------------
      上面的rep指令就是給[0058033C]這個地方做標記的。但這條指令還只是一個殺手,要找到
  下指令的人。請右下角的堆疊窗:
-------------------------------------------------------------------------------
0012FAF0   004FDA4E   unpacked.004FDA4E
0012FAF4   0012FB4C
0012FAF8   00405785   返回到 unpacked.00405785 來自 <unpacked.@Move> >>>>>>>>>>>就是這個東西了!
-------------------------------------------------------------------------------
      在堆疊窗中第三行上點右鍵,選擇“反彙編中跟隨”,CPU程式碼窗中就轉到相應的地址!
-------------------------------------------------------------------------------
00405779   . /7E 0>jle     short unpacked.00405785   >>>>>>>>>>>如果這裡跳走了,就不會複製資料!很重要,SMC中會用
0040577B   . |8D14>lea     edxdword ptr ds:[eax+ebx]
0040577E   . |01F0 add     eaxesi
00405780   . |E8 9>call    <unpacked.@Move>              >>>>>>>>>>>這個是呼叫殺手的程式碼
00405785   > \5D   pop     ebp                                                       ;  unpacked.004FDA4E
00405786   .  5F   pop     edi                                                       ;  unpacked.004FDA4E
00405787   .  5E   pop     esi                                                       ;  unpacked.004FDA4E
00405788   .  5B   pop     ebx                                                       ;  unpacked.004FDA4E
00405789   .  C3   retn
-------------------------------------------------------------------------------
      再按F9執行,又會被斷下來,又是一個類似的程式碼:
-------------------------------------------------------------------------------
005692BE      803D>cmp     byte ptr ds:[58033C], 0      >>>>比較標誌點
005692C5  |.  74 2>je      short unpacked.005692EE      >>>>跳走
-------------------------------------------------------------------------------
      到這裡,我想不用再跟了!直接將所有cmp byte ptr ds:[58033C], 0改成
cmp   byte ptr ds:[58033C], 1就可以了。

      試一試再說。
      在CPU程式碼窗中點選右鍵“搜尋”---“全部命令”
      填入:     cmp byte ptr ds:[58033C], 0
      找出了九處程式碼,全部改了,不要問我如何改!!!!!
      再將程式碼另存,也不要問我如何存!!!!!!!!!!!!!!!

      試一試!一切OK了,已經註冊了!網頁模板也可以用了!

      到現在好像已經完成了吧!如果只是自己用,是已經可以了!可是好東東,一定要給大家分享!
      還得做一個補丁!!
      如果直接提供脫殼後的程式,好像太大了。只能用SMC補丁了。繼續吧!!!

       ---------------------------------------------------------------------------------
      第四步:改一改
      SMC是做什麼?說白了,我們要在未脫殼的程式上下手,在程式解壓完成之後,沒跳到OEP之前,
      對程式打好所有的補丁。
      整個流程是這樣的:
                 1、找到一個適當的切入點
                 2、找一個空白的位置,以填入補丁程式碼
                 3、直接給[58033C]這個標誌點填入1
                 4、同時要禁止向[58033C]填資料(就是要將jle   short unpacked.00405785改成jmp short unpacked.00405785)
      當這四項任務完成以後,程式的補丁就打好了!
      讓我們開始:
                 1、找到一個適當的切入點
              Aspack的殼很好脫,切入點也很好找,一個簡單的辦法,按ctrl+f,輸入popad,
      轉到這裡:
-------------------------------------------------------------------------------------------
005E44F3   .  61   popad                                       //轉到這裡
005E44F4   .  75 0>jnz     short webshow5.005E44FE             //這裡就是一個很好的切入點*********************
005E44F6   .  B8 0>mov     eax, 1
005E44FB   .  C2 0>retn    0C
005E44FE   >  68 0>push    0              //SMC處理後,回到這裡
005E4503   .  C3   retn                                       //轉到OEP處
-------------------------------------------------------------------------------------------
                 2、找一個空白的位置,填入補丁程式碼
             不能隨便找一個空白位置的,一個很容易的辦法,在程式碼視窗點右鍵:
      “複製到可執行檔案”--“選擇部分”,在彈出的視窗中,轉到最後的部分,有一堆空白的位置,
       選擇一個位置吧,我選擇了0009BFC1(檔案偏移地址),先記下來!在這個位置點右鍵,選擇“在反
       彙編中檢視映象”就轉到CPU視窗中對應的位置{{記好這個地址(邏輯地址)}}了,

                 3、直接給[58033C]這個標誌點填入1
                按空格鍵,進行彙編,改成:

005E65C1    C605 3>mov     byte ptr ds:[58033C], 1                  >>>這裡給標誌點置1

                 4、同時要禁止向[58033C]填資料(就是要將jle   short unpacked.00405785改成jmp short unpacked.00405785)
                再按空格鍵,繼續彙編,改成:

005E65C8    C605 7>mov     byte ptr ds:[405779], 0EB      >>>>>將jle改成jmp (機器碼7E改為EB)

                處理完之後返回按空格鍵,繼續彙編,改成:

005E65CF  ^ E9 2AD>jmp     webshow5.005E44FE          >>>SMC完成返回

                切入點的跳轉還沒有做,再回到005E44F4:
                按空格鍵,進行彙編,改成:

005E44F4   /E9 C82>jmp     webshow5.005E65C1                       >>>>跳到SMC程式碼的入口

      OK!OK!到這裡,整個補丁流程就完了,很容易吧!儲存吧。
      注意了!建議每次修改一塊程式碼後就儲存到一個檔案中,再開啟這個檔案,繼續修改,不然會丟資料的。
      原因自己看!!!!!!
       
      OK了,請將全部修改過的程式改個名,再用KeyMaker做個補丁吧,送給大家做紀念!


      這裡我把我的補丁給大家,大家可以比較一下,修改後的程式與原程式的區別,就可以知道工作流程了。

       ---------------------------------------------------------------------------------
     後記:
         1、在找到關鍵點後,要分析它的來龍去脈,逆向思考。
         2、SMC補丁是一項很麻煩的工程,要考慮很多方面,比如,節區是否可寫等等
         3、冷靜,冷靜,再冷靜!!!!

     注:有一個webshow.pin檔案中儲存了註冊資訊,你有功夫可以研究一下如何算註冊碼!


    
                                         寫完時已經 22:30  睡了! 886
  
                                                        chenjiwl

相關文章