• 标 题:妖幻TRW and videofixer的脱壳方法之我之拙见 (13千字)
  • 作 者:123112
  • 时 间:2003-8-14 13:58:26
  • 链 接:http://bbs.pediy.com

妖幻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....... 
哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪哪腜ROT32? 
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点