妖幻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点