幻影 V2.33 脫殼+修復――dbpe.exe主程式

看雪資料發表於2015-11-15

標 題:幻影 V2.33 脫殼+修復——dbpe.exe主程式 

發信人:fly

時 間:2004年1月08日 10:39 

詳細資訊: 




幻影 V2.33 脫殼+修復――dbpe.exe主程式
 
 
 
幻影下載:  http://dbpe.allit.net/  (或者網上搜尋)
軟體大小:  2.94 M

【軟體簡介】:幻影 是一個為 WINDOWS 下的EXE,DLL,OCX.32位可執行檔案加密系統。 它為程式加上一層堅硬的保護殼。還可以為程式設定限制註冊功能。即使你沒有程式的原始碼你也可以用幻影在程式上加上執行次數限制,執行天數限制,執行有效日期限制。加密程式支援Windows98,Windows Me,Windows 2000,Windows XP。

【作者宣告】:只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!

【除錯環境】:WinXP、flyODBG、PEiD、LordPE、ImportREC、Idt Tool

――――――――――――――――――――――――――――――――― 
【過    程】:
        
         

Ollydbg1.09D 中文修改版 ―― flyODBG   下載頁面:
http://tongtian.net/pediybbs/viewtopic.php?t=1532

OllyDbg各類外掛:可以下載 花指令去除器、IsDebug等外掛
http://www.pediy.com/tools/Debuggers/ollydbg/plugin.htm 

       
設定Ollydbg忽略所有的異常選項。老規矩:用IsDebug 1.4外掛去掉flyODBG的偵錯程式標誌。載入後彈出“是壓縮程式碼――要繼續進行分析嗎?”,點“否”。

―――――――――――――――――――――――――――――――――
一、淺談 幻影 的除錯



幻影 是國產加殼程式的驕傲!雖然有了脫殼機,但幻影依舊是值得研究的。幻影 最大的特點可謂是其反跟蹤了,幻影的Anti能力之強在Xtreme-Protector未出之前是首屈一指的。正如 CoDe_inJect 大俠所言:“這個殼在國內如日中天,奧妙在於哪裡?就在於anti做得比較完善,它是我見到的最早使用驅動的殼,雖然驅動的運用僅僅是為了在NT下切到Ring0,但他開創了殼使用驅動的先例。對idt進行修改,改變了int 1 and int 3的地址。”

雖然 幻影 威力巨大,但還是有許多的Cracker不顧藍色畫面當機、硬碟傷痕而潛心研究,共享出寶貴的資料!感謝 :-)

偶覺得用修改的Ollydbg+IsDebug+花指令去除器等外掛能夠比較“爽”的除錯幻影。 

對於 幻影 對IDT的修改,偶找了個小工具:tMD[CsP]的Idt Tool,這樣用Ollydbg除錯出錯後用Idt Tool恢復一下除錯前的IDT就不會讓 幻影 來幫偶們自動重啟啦。:-D
 
很忙,抽點時間再次分析一下,算是對前幾天發的《1分鐘尋找 幻影 V2.33 殼的OEP》的補充吧。


―――――――――――――――――――――――――――――――――
二、避開IAT加密,得到正確的輸入表



004FE000     EB 20                jmp short dbpe.004FE022//進入OD後停在這!

F9執行,彈出要求註冊的對話方塊。此時在GetProcAddress處下硬體執行斷點。
當然要點“試用”啦,返回OD,再次中斷。

77E5A5FD     55                  push ebp//斷在這!然後取消這個硬體斷點
77E5A5FE     8BEC                mov ebp,esp
77E5A600     51                  push ecx
77E5A601     51                  push ecx
77E5A602     53                  push ebx
77E5A603     57                  push edi
77E5A604     8B7D 0C             mov edi,dword ptr ss:[ebp+C]
77E5A607     BB FFFF0000         mov ebx,0FFFF
77E5A60C     3BFB                cmp edi,ebx
77E5A60E     0F86 6B83FFFF       jbe kernel32.77E5297F

☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆
看看GetProcAddress堆疊:

0012FF78    7FF80D42  /CALL 到 GetProcAddress 來自 7FF80D3C ★★這裡!:-)
0012FF7C    77DA0000  |hModule = 77DA0000 (advapi32)
0012FF80    004D0E7E  ProcNameOrOrdinal = "RegCloseKey"
0012FF84    7FF8571A  ASCII "user.dat"
☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

Ctrl+G:7FF80D42  在7FF80D42處再下 硬體執行 斷點!F9執行,斷下!


執行 hoto 大俠的 花指令去除器 ,填入 地址=7FF7EEBB 大小=FFFF  呵呵,大範圍搜尋,彈出去除了1842個花指令,看看效果:牛!:-)  看來 hoto 大俠是在分析 幻影 的時候寫這個外掛的,呵呵。


7FF80D35     50                  push eax
7FF80D36     FFB5 F9C64200       push dword ptr ss:[ebp+42C6F9]
7FF80D3C     FF95 02854300       call dword ptr ss:[ebp+438502]; kernel32.GetProcAddress
7FF80D42     90                  nop//斷在這!然後取消斷點
7FF80D43     90                  nop
  …… ……  省 略  …… ……
7FF80D9F     90                  nop
7FF80DA0     90                  nop
7FF80DA1     3985 45134300       cmp dword ptr ss:[ebp+431345],eax//EAX=正確函式
7FF80DA7     75 4B               jnz short 7FF80DF4
7FF80DA9     90                  nop
7FF80DAA     90                  nop
  …… ……  省 略  …… ……
7FF80DD4     90                  nop
7FF80DD5     90                  nop
7FF80DD6     C685 547C4200 01    mov byte ptr ss:[ebp+427C54],1
7FF80DDD     90                  nop
7FF80DDE     90                  nop
  …… ……  省 略  …… ……
7FF80E24     90                  nop
7FF80E25     90                  nop
7FF80E26     80BD 547C4200 01    cmp byte ptr ss:[ebp+427C54],1
7FF80E2D     0F85 59030000       jnz 7FF8118C
7FF80E33     90                  nop
  …… ……  省 略  …… ……
7FF81036     90                  nop
7FF81037     90                  nop
7FF81038     8B85 7CD84200       mov eax,dword ptr ss:[ebp+42D87C]
7FF8103E     90                  nop
7FF8103F     90                  nop
  …… ……  省 略  …… ……
7FF8106F     90                  nop
7FF81070     90                  nop
7FF81071     33D2                xor edx,edx
7FF81073     90                  nop
7FF81074     90                  nop
  …… ……  省 略  …… ……
7FF810C4     90                  nop
7FF810C5     90                  nop
7FF810C6     03F8                add edi,eax
7FF810C8     90                  nop
7FF810C9     90                  nop
  …… ……  省 略  …… ……
7FF810F8     90                  nop
7FF810F9     90                  nop
7FF810FA     89BD 4C7C4200       mov dword ptr ss:[ebp+427C4C],edi
7FF81100     90                  nop
7FF81101     90                  nop
  …… ……  省 略  …… ……
7FF811E1     39BD D7D14200       cmp dword ptr ss:[ebp+42D1D7],edi
7FF811E7     76 10               jbe short 7FF811F9
7FF811E9     90                  nop
7FF811EA     90                  nop
7FF811EB     90                  nop
7FF811EC     90                  nop
7FF811ED     90                  nop
7FF811EE     89BD D7D14200       mov dword ptr ss:[ebp+42D1D7],edi//①、NOP掉! ★★★
  …… ……  省 略  …… ……
7FF811DF     90                  nop
7FF811E0     90                  nop
7FF811E1     39BD D7D14200       cmp dword ptr ss:[ebp+42D1D7],edi
7FF811E7     76 10               jbe short 7FF811F9
  …… ……  省 略  …… ……
7FF8122D     90                  nop
7FF8122E     90                  nop
7FF8122F     89BD D3D14200       mov dword ptr ss:[ebp+42D1D3],edi//②、NOP掉! ★★★
7FF81235     90                  nop
  …… ……  省 略  …… ……
7FF8126C     90                  nop
7FF8126D     890F                mov dword ptr ds:[edi],ecx ★★★
                       //③、改為mov dword ptr ds:[edi],eax  呵呵,正確的函式寫入正確的地址 :-)

7FF81272     90                  nop
7FF81273     90                  nop
7FF81274     83C6 04             add esi,4
7FF81277     90                  nop
7FF81278     90                  nop
7FF81279     90                  nop
7FF8127A     90                  nop
7FF8127B     90                  nop
7FF8127C     83C7 04             add edi,4
  …… ……  省 略  …… ……
7FF81296     E9 71F9FFFF         jmp 7FF80C0C//迴圈!


OK,修改3個地方偶就得到了完整的輸入表啦!:-)

1、7FF811EE   mov dword ptr ss:[ebp+42D1D7],edi//①、NOP掉!
2、7FF8122F   mov dword ptr ss:[ebp+42D1D3],edi//②、NOP掉!
3、7FF8126D   mov dword ptr ds:[edi],ecx
       改為   mov dword ptr ds:[edi],eax//正確的函式寫入正確的地址

1和2這兩處NOP掉是避免 幻影 對 地址指標 的加密,這樣函式就寫入正確的地址了。


―――――――――――――――――――――――――――――――――
二、尋找OEP,DUMP程式



可以參看偶前幾天發的筆記:《1分鐘尋找 幻影 V2.33 殼的OEP》
http://tongtian.net/pediybbs/viewtopic.php?p=14280


不用麻煩,在改完上面的3個地方後,Ctrl+F在當前位置下查詢命令:jmp eax  在7FF8BFE7處 ,這就是 ☆夢寐以求☆ 的OEP一跳 :-) 可以在其上的POPAD的7FF8BFDB記憶體處下 記憶體訪問 斷點,F9斷在7FF8BFDB

7FF8BFDB     61                  popad  //斷在這! 
7FF8BFDC     58                  pop eax ;00401000//這就是OEP值
7FF8BFDD     83F8 FF             cmp eax,-1
7FF8BFE0     75 05               jnz short 7FF8BFE7
7FF8BFE2     33C0                xor eax,eax
7FF8BFE4     C2 0C00             retn 0C
7FF8BFE7     FFE0                jmp eax//飛向光明之巔!:-)


00401000     EB 10               jmp short 00401012//可以在這兒用LordPE糾正ImageSize後完全DUMP這個程式
00401002     66:623A             bound di,dword ptr ds:[edx]
00401005     43                  inc ebx
00401006     2B2B                sub ebp,dword ptr ds:[ebx]
00401008     48                  dec eax
00401009     4F                  dec edi
0040100A     4F                  dec edi
0040100B     4B                  dec ebx
0040100C     90                  nop
0040100D     E9 30844B00         jmp 008B9442
00401012     A1 23844B00         mov eax,dword ptr ds:[4B8423]
00401017     C1E0 02             shl eax,2
0040101A     A3 27844B00         mov dword ptr ds:[4B8427],eax
0040101F     52                  push edx
00401020     6A 00               push 0
00401022     E8 3B5F0B00         call 004B6F62 ; jmp to kernel32.GetModuleHandleA


――――――――――――――――――――――――
三、修正部分地址



幻影的主程式還有一些地址加密:

004B6E58     FF25 08014D80       jmp dword ptr ds:[804D0108]
004B6E5E     FF25 0C014D80       jmp dword ptr ds:[804D010C]
  …… ……  省 略  …… ……
004B7302     FF25 B8074D80       jmp dword ptr ds:[804D07B8]
004B7308     FF25 BC074D80       jmp dword ptr ds:[804D07BC]

這些地方的[804D0108]是經過修改了,此時修復輸入表還是無法執行的。不過偶們可以再次簡單處理使其指向正確的地址。

把上面地址段內的[80XXXXXX]前面的80全部替換成00,就OK啦。 呵呵 :-)

004B6E58     FF25 08014D00       jmp dword ptr ds:[4D0108]   ; advapi32.RegCloseKey
004B6E5E     FF25 0C014D00       jmp dword ptr ds:[4D010C]   ; advapi32.RegCreateKeyExA
004B6E64     FF25 10014D00       jmp dword ptr ds:[4D0110]   ; advapi32.RegFlushKey
004B6E6A     FF25 14014D00       jmp dword ptr ds:[4D0114]   ; advapi32.RegOpenKeyExA
004B6E70     FF25 18014D00       jmp dword ptr ds:[4D0118]   ; advapi32.RegQueryValueExA

可以直接在Ollydbg裡修改後再DUMP程式,也可以DUMP之後用16進位制工具修改。
注意:不要“濫殺”無辜!:-D 也不能遺漏。改的只是jmp dword ptr ds:[80XXXXXX]的前2位:80->00


―――――――――――――――――――――――――――――――――
四、修復輸入表



執行ImportREC,選擇這個程式。把OEP改為00001000,RVA=000D0108 大小=00000CF0 點IT AutoSearch,點“Get Import”,CUT掉幾個無效函式。FixDump,正常執行! 
  
雖然 幻影 主程式能夠正常執行了,但是執行加殼功能時會提示“建立資料檔案錯誤!加密失敗!”,呵呵,這個暗樁偶就不追了,有興趣就自己再去研究吧,或者對比swift大俠的破解版分析。

相信 D Boy 老師的 幻影 新版加殼系統就快“出爐”了。:-)


―――――――――――――――――――――――――――――――――
    
                                
         ,     _/ 
        /| _.-~/            _     ,        青春都一餉
       ( /~   /              ~-._ |
       `\  _/                   ~ )          忍把浮名 
   _-~~~-.)  )__/;;,.          _  //'
  /'_,   --~    ~~~-  ,;;___(  (.-~~~-.        換了破解輕狂
 `~ _( ,_..-- (     ,;'' /    ~--   /._` 
  /~~//'   /' `~         ) /--.._, )_  `~
  "  `~"  "      `"      /~'`    `\~~   
                         "     "   "~'  ""

    

     Cracked By 巢水工作坊――fly [OCN][FCG][NUKE][DCM]

                2004-01-08  22:22

相關文章