妖幻TRW and videofixer的脫殼方法之我之拙見 (13千字)

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

妖幻TRW and videofixer的脫殼方法之我之拙見。 

videofixer.exe這個程式會利用Findwindow,或者createfiles 之類的函式查詢TRW,如果發現後用Terminateprocess結束掉TRW。可是他這樣的做法並沒有什麼 

用,只是使trw成為妖幻般的偵錯程式。這個時候你用CTRL+N無法撥出,但是此時可以用CTRL+M撥出,如果你以前設定有斷點,這時所有斷點都是有效的。這個時候 

程式中是沒有TRW的,記憶體中也沒有TRW的視窗控制程式碼了!這個時候用什麼findwindow、createfiles之類的函式再也無法發現TRW了,所以我說videofixer根本不反 

TRW! 
1、videofixer的OEP 
用ice載入後設斷點 bpx createfilea+1 do "d esp->8"按幾下後就看到下面的內容 
======================================= 
016F:0070D4CD 5C 5C 2E 5C 53 49 43 45-00 5C 5C 2E 5C 4E 54 49  \\.\SICE.\\.\NTI 
016F:0070D4DD 43 45 00 5C 5C 2E 5C 4E-54 49 43 45 37 38 37 31  CE.\\.\NTICE7871 
016F:0070D4ED 00 5C 5C 2E 5C 4E 54 49-43 45 44 30 35 32 00 5C  .\\.\NTICED052.\ 
016F:0070D4FD 5C 2E 5C 54 52 57 44 45-42 55 47 00 5C 5C 2E 5C  \.\TRWDEBUG.\\.\ 
016F:0070D50D 54 52 57 00 5C 5C 2E 5C-54 52 57 32 30 30 30 00  TRW.\\.\TRW2000. 
016F:0070D51D 5C 5C 2E 5C 53 55 50 45-52 42 50 4D 00 5C 5C 2E  \\.\SUPERBPM.\\. 
016F:0070D52D 5C 49 43 45 44 55 4D 50-00 5C 5C 2E 5C 52 45 47  \ICEDUMP.\\.\REG 
016F:0070D53D 4D 4F 4E 00 5C 5C 2E 5C-46 49 4C 45 4D 4F 4E 00  MON.\\.\FILEMON. 
016F:0070D54D 5C 5C 2E 5C 52 45 47 56-58 44 00 5C 5C 2E 5C 46  \\.\REGVXD.\\.\F 
016F:0070D55D 49 4C 45 56 58 44 00 5C-5C 2E 5C 56 4B 45 59 50  ILEVXD.\\.\VKEYP 
016F:0070D56D 52 4F 44 00 5C 5C 2E 5C-42 57 32 4B 00 5C 5C 2E  ROD.\\.\BW2K.\\. 
016F:0070D57D 5C 53 49 57 44 45 42 55-47 00 00 60 E8 00 00 00  \SIWDEBUG..`.... 
016F:0070D58D 00 5E 83 EE 06 B9 43 03-00 00 29 CE BA 33 07 50  .^....C...)..3.P 
016F:0070D59D EC C1 E9 02 83 E9 02 83-F9 00 7C 1A 8B 04 8E 8B  ..........|..... 
016F:0070D5AD 5C 8E 04 03 C3 C1 C8 0D-2B C2 81 EA 6D 8A 83 79  \.......+...m..y 
016F:0070D5BD 89 04 8E 49 EB E1 61 61-C3 00 00 00 00 00 C3 41  ...I..aa.......A 
016F:0070D5CD 0F 88 02 00 00 00 03 D7-EB 01 E8 8B D5 50 E8 01  .............P.. 
016F:0070D5DD 00 00 00 79 58 58 66 1B-DD E8 01 00 00 00 76 83  ...yXXf.......v. 
016F:0070D5ED 04 24 06 C3 49 E8 01 00-00 00 7F 83 04 24 06 C3  .$..I.......$.. 
016F:0070D5FD 66 C1 DB 11 E8 01 00 00-00 7B 83 C4 04 85 D9 50  f........{.....P 
========================================= 
每安一次F5就檢查一種除錯工具。當檢查的到最後一個SIWDEBUG後,F12回到如下 

0167:0070D25E  8DB5CD644000        LEA      ESI,[EBP+004064CD]                 
0167:0070D264  6A00                PUSH      00                                 
0167:0070D266  6880000000          PUSH      00000080                          
0167:0070D26B  6A03                PUSH      03                                
0167:0070D26D  6A00                PUSH      00                                
0167:0070D26F  6A03                PUSH      03                                
0167:0070D271  68000000C0          PUSH      C0000000                          
0167:0070D276  56                  PUSH      ESI      <-esi 內放上面的黑名單                        
0167:0070D277  50                  PUSH      EAX                                
0167:0070D278  8B851D444000        MOV      EAX,[EBP+0040441D]                
0167:0070D27E  8038CC              CMP      BYTE PTR [EAX],CC                  
0167:0070D281  7410                JZ        0070D293                          
0167:0070D283  90                  NOP                                          
0167:0070D284  90                  NOP                                          
0167:0070D285  90                  NOP                                          
0167:0070D286  90                  NOP                                          
0167:0070D287  58                  POP      EAX                                
0167:0070D288  FF951D444000        CALL      [EBP+0040441D] <--call createfilea  
========================================= 
這個時候下命令 tracex 00400000 00700000 
5秒後來到OEP處。 
0167:004E4F4E  53                  PUSH      EBX    <-OEP                           
0167:004E4F4F  B8A84A4E00          MOV      EAX,004E4AA8                      
0167:004E4F54  E81320F2FF          CALL      00406F6C                          
0167:004E4F59  8B1D3C704E00        MOV      EBX,[004E703C]                    
0167:004E4F5F  8B03                MOV      EAX,[EBX]                          
0167:004E4F61  E87E20F8FF          CALL      00466FE4                          
0167:004E4F66  8B0D6C714E00        MOV      ECX,[004E716C]                    
0167:004E4F6C  8B03                MOV      EAX,[EBX]                          
0167:004E4F6E  8B15689C4D00        MOV      EDX,[004D9C68]                    
0167:004E4F74  E88320F8FF          CALL      00466FFC                          
0167:004E4F79  8B0DF8714E00        MOV      ECX,[004E71F8]                    
0167:004E4F7F  8B03                MOV      EAX,[EBX]                          
0167:004E4F81  8B15B4964D00        MOV      EDX,[004D96B4]                    
0167:004E4F87  E87020F8FF          CALL      00466FFC                          
0167:004E4F8C  8B0D0C6E4E00        MOV      ECX,[004E6E0C]                    
0167:004E4F92  8B03                MOV      EAX,[EBX]                          
0167:004E4F94  8B1514994D00        MOV      EDX,[004D9914]                    
0167:004E4F9A  E85D20F8FF          CALL      00466FFC                           
0167:004E4F9F  8B0DE8714E00        MOV      ECX,[004E71E8] 
======================================= 
起初我不大信這裡是OEP一直很困惑。飛葉賢弟授我一法也是來到這裡,我才信這裡是OEP啊,飛葉賢弟不愧為脫神,確實讓麥當娜都汗顏啊! 
2、輸入表的問題 
用ice載入後 下命令 g 00710fe0 這個時候你d ebx 看到如下 
=========================================== 
0167:0050A9C0 44 65 6C 65 74 65 43 72-69 74 69 63 61 6C 53 65  DeleteCriticalSe<-函式名 
0167:0050A9D0 63 74 69 6F 6E 00 00 00-89 AC 2C CE AC 68 4E 2D  ction.....,..hN- 
0167:0050A9E0 8E 2D 6C 2C 8D 6A AC 6C-8E 2D ED CD 00 00 00 00  .-l,.j.l.-...... 
0167:0050A9F0 A8 CD 8E AC 4E 68 4E 2D-8E 2D 6C 2C 8D 6A AC 6C  ....NhN-.-l,.j.l 
0167:0050AA00 8E 2D ED CD 00 00 00 00-29 CD 2D 8E 2D 2C 8D 2D  .-......).-.-,.- 
0167:0050AA10 4F AC 68 4E 2D 8E 2D 6C-2C 8D 6A AC 6C 8E 2D ED  O.hN-.-l,.j.l.-. 
0167:0050AA20 CD 00 00 00 CA 2D 4E 8E-AE 2C 8D C8 4E AC AC 00  .....-N..,..N... 
0167:0050AA30 00 00 CA 2D 4E 8E AE 2C-8D 28 8D 8D ED 6C 00 00  ...-N..,.(...l.. 
0167:0050AA40 00 00 89 ED 6C 2C 8D C8-4E AC AC 00 00 00 89 ED  ....l,..N....... 
哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪PROT32? 
0167:00710FDC  90                  NOP                      

                   
0167:00710FDD  90                  NOP                                         
0167:00710FDE  90                  NOP                                          
0167:00710FDF  60                  PUSHAD                                      
0167:00710FE0  2BC0                SUB      EAX,EAX            \              
0167:00710FE2  8803                MOV      [EBX],AL            \  這9個位元組把函式名消掉了,一定要NOP掉。            
0167:00710FE4  43                  INC      EBX                  /              
0167:00710FE5  3803                CMP      [EBX],AL            /              
0167:00710FE7  75F9                JNZ      00710FE2                          
0167:00710FE9  61                  POPAD                                        
0167:00710FEA  0BC0                OR        EAX,EAX                            
0167:00710FEC  0F842EFFFFFF        JZ        00710F20                          
0167:00710FF2  3B85F0BD4100        CMP      EAX,[EBP+0041BDF0]                
0167:00710FF8  750A                JNZ      00711004                          
0167:00710FFA  90                  NOP                                          
0167:00710FFB  90                  NOP                                          
0167:00710FFC  90                  NOP                                          
0167:00710FFD  90                  NOP                                          
0167:00710FFE  8D85DB444000        LEA      EAX,[EBP+004044DB]  
========================= 
還有: 
================================ 
0167:00710F50 60              PUSHA  
0167:00710F51 2BC0            SUB      EAX,EAX    \ 
0167:00710F53 8803            MOV      [EBX],AL    \這裡將DLL的名稱清0,也要NOP掉。 
0167:00710F55 43              INC      EBX        / 
0167:00710F56 3803            CMP      [EBX],AL  / 
0167:00710F58 75F9            JNZ      00710F53 
0167:00710F5A 61              POPA    
0167:00710F5B 8985303F4000    MOV      [EBP+00403F30],EAX 
0167:00710F61 C785343F40000000+MOV      DWORD [EBP+00403F34],00 
0167:00710F6B 8B95383F4000    MOV      EDX,[EBP+00403F38] 
0167:00710F71 8B06            MOV      EAX,[ESI
0167:00710F73 0BC0            OR      EAX,EAX 
0167:00710F75 7507            JNZ      00710F7E 
============================= 
這樣函式就OK了! 
3、修復程式 
以上都做完就是修復程式了,dump出來的程式中會有CALL 0070XXXX這樣的指令,我怎麼跟都是這樣的,看來只能將這些指令後面的子程式DUMP出來以節點的 
方式加入了。 

感慨: 
我每天平均要畫10個小時的圖紙,然後再抽時間看這些殼子,真累!感覺自己都要枯萎了! 
今天是我25週歲生日,我只身在一個陌生的城市裡!沒有一個朋友,我唯一認識的人and親人就是我姑夫了!鬱悶…… 
寫這些東西是我利用午飯時間寫的,寫的倉促,見諒! 
                                                                                                                      8月14 中午 12點

相關文章