手動脫ASProtect 的殼-Synchromagic v3.5 build 557

看雪資料發表於2003-08-03

我這個只能說是脫殼流程,沒有什麼技術含量:P
工具:LPE-DLX,OllyDbg 1.09d,Import REConstructor v1.6 FINAL,隱藏OllyDbg的外掛IsDebug.dll
目標:Synchromagic v3.5 build 557


這幾天在研究用OD脫ASPR新版本的殼,在此我要感謝Newbie,jingulong,VolX,lipton,等人對我的幫助,才使得我能寫出這篇文章.


我們首先用OllyDbg開啟Synchromagic的主程式.彈出的視窗,點No.選擇Plugins->IsDebugPresent->Hide,然後按F9,接著中止在異常處,然後我們按Shift+F9一直到如下指令,(注意:不是每臺電腦前面的地址都一樣的.以指令內容為標準)
00DB3D5F   3100             XOR DWORD PTR DS:[EAX],EAX
00DB3D61   64:8F05 00000000 POP DWORD PTR FS:[0]
00DB3D68   58               POP EAX
00DB3D69   833D BC7EDB00 00 CMP DWORD PTR DS:[DB7EBC],0
00DB3D70   74 14            JE SHORT 00DB3D86
00DB3D72   6A 0C            PUSH 0C
00DB3D74   B9 BC7EDB00      MOV ECX,0DB7EBC
00DB3D79   8D45 F8          LEA EAX,DWORD PTR SS:[EBP-8]
00DB3D7C   BA 04000000      MOV EDX,4
00DB3D81   E8 8ED2FFFF      CALL 00DB1014
00DB3D86   FF75 FC          PUSH DWORD PTR SS:[EBP-4]
00DB3D89   FF75 F8          PUSH DWORD PTR SS:[EBP-8]
00DB3D8C   8B45 F4          MOV EAX,DWORD PTR SS:[EBP-C]
00DB3D8F   8338 00          CMP DWORD PTR DS:[EAX],0
00DB3D92   74 02            JE SHORT 00DB3D96
00DB3D94   FF30             PUSH DWORD PTR DS:[EAX]
00DB3D96   FF75 F0          PUSH DWORD PTR SS:[EBP-10]
00DB3D99   FF75 EC          PUSH DWORD PTR SS:[EBP-14]
00DB3D9C   C3               RETN

我們先在00DB3D69   833D BC7EDB00 00 CMP DWORD PTR DS:[DB7EBC],0 處按F2設斷.然後再按一次Shift+F9中斷在該地址,然後去掉斷點,接著一直按F8單步執行到00DB3D9C   C3               RETN,此時我們就可以DUMP檔案了,執行LORDPE,在程式列表裡面選中Synchromagic主程式的程式,點選右鍵選擇full dump,另存為dumped.exe檔案.接著我們要修補程式碼.

我們來看看下面的這些指令
00467757 >/$ 55 PUSH EBP <此處是OEP
00467758 |. 8BEC MOV EBP,ESP
0046775A |. 6A FF PUSH -1
0046775C |. 68 A8384A00 PUSH dumped_.004A38A8
00467761 |. 68 6CC54600 PUSH dumped_.0046C56C
00467766 |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
0046776C |. 50 PUSH EAX
0046776D |. 64:8925 000000>MOV DWORD PTR FS:[0],ESP
00467774 |. 83EC 58 SUB ESP,58
00467777 |. 53 PUSH EBX
00467778 |. 56 PUSH ESI
00467779 |. 57 PUSH EDI
0046777A |. 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP
0046777D |. FF15 94934900 CALL DWORD PTR DS:[<&kernel32.GetVersion>; <-在此處偽造OEP 00467783 |. 33D2 XOR EDX,EDX

我們從67757開始修復.我們用LORDPE開啟剛剛DUMPE出來的檔案,點選FLC,選中RVA:填入67757,然後點Do,再點Hex Edit,這時我們看到有一段空白的部分,把以下程式碼填入後再儲存退出即可.
55 8B EC 6A FF 68 A8 38 4A 00 68 6C C5 46 00 64 A1 00 00 00 00 50 64 89 25 00
00 00 00 83 EC 58 53 56 57 89 65 E8

或者有一種方便的方法,用OllyDbg開啟DUMP出來的檔案,在46777A處雙擊,填入push ebp,在46777B處填入mov ebp,esp,然後再儲存即可.接下來我們來修復IAT,先執行未脫殼的Synchromagic的主程式,然後再執行Import REConstructor v1.6 FINAL,選擇Synchromagic的主程式的程式OEP處填入06777A,再點IAT AutoSearch,再點Get  Imports,再點Show invalid,這時有很多無效的指標,我們在無效的指標處點選右鍵,選擇Trace Level1 (Dasam)這樣大部分的都修復了.接著再點Show invalid,然後再點選右鍵選擇Plugin Tracers->ASProtect 1.22然後就全部的修復了.但是注意,外掛修復有一個地方修復錯誤了.就是rva:000992D0 mod:kernel32.dll ord:0131 name:GetCurrentProcessId修復錯誤了.根據分析,正確的應該是name=GetCurrentProcess,接著我們再點Fix Dump,選擇剛剛修補程式碼好的檔案,再點Open,這樣IAT就修復好了.現在我們來執行主程式看看是不是已經可以執行了呢?我們再點一下About,結果又出錯了.我們關閉主程式,用OD開啟他,然後點F9執行,然後我們再點About,中斷到以下地址:
004012ED   . F2:AE          REPNE SCAS BYTE PTR ES:[EDI]
我們分析他的edi,他的edi錯了,那是殼中的地址,這個值來源與前面不遠的地方,我們來看edi取值的語句是
我們往上拉,可以看到如下資料.點選這裡
004012E2  MOV EDI,DWORD PTR DS:[4B7100]
然後在底下出現的DS:[004B7100]=00DA3951處點選右鍵,選擇Follow address in Dump.接著我們看Hex Dump的那個視窗,地址004B71000的資料是51 39 DA.我們選中這3個機器碼,按Ctrl+e彈出個視窗在Hex+00處填入D01455,因為我們要選一個空閒的地方讓他指向,我選擇的是5514DO所以填入DO1455接著再點OK,然後我們在Hex dump視窗處點選右鍵,選擇Copy to executable file.彈出個視窗,再關閉他,他提示我們儲存檔案,我們儲存這個檔案為一個新的檔案.然後再執行這個檔案,點選ABOUT,是不是可以顯示拉?不過現在顯示的是註冊給未註冊,這樣看起來不舒服,我們關閉他,再用OllyDbg載入修復ABOUT後的檔案,然後在Hex dump視窗處,拉動捲軸到地址5514D0處我選中5514D0的5個00,就是10個0,然後按Ctrl+e,在ASCII處填入Feisu.然後點選OK,然後我們在Hex dump視窗處點選右鍵,選擇Copy to executable file.彈出個視窗,再關閉他,他提示我們儲存檔案,我們儲存這個檔案為一個新的檔案.再執行修改後的檔案點選ABOUT是不是顯示為註冊給Feisu了?你在5514D0處也可以填入別的檔案,這樣子ABOUT就顯示註冊給你填入的值.到此,這個脫殼文章全部寫完了.

飛速[BCG][IPB][DEF][DCM][YCG]


相關文章