///////////////////////////////////////////////////////////////////////////////////////////////
文件名称:手脱加三层壳(未知壳+UPX壳+未知壳)的病毒样本程序
目标程序:病毒样本
操作环境:Windows XP-SP2
使用工具:Ollydbg 1.10版
编写作者:Coderui
编写时间:2008年05月22日
///////////////////////////////////////////////////////////////////////////////////////////////
------------------------------------------------------------------------------------
第一层壳是很容易一眼就可以看出来关键跳转的,第二层壳是使用ESP守恒定义就可以轻松解决的,但第三层壳初步拿来时是不太好分析的。因为第三层壳中有复杂的嵌套循环跳转,并且在动态跟踪分析时代码严重受到花指令的干扰和影响,不小心动一动的话,代码结构就都变了。使用过下内存执行断点的方法,效果不是很理想。我最开始全部都是利用单步跟踪,然后根据规律和结构去一点点的向循环的外部跳转的。最后发现该壳结束时需要用到的那个跨段大跳的指令没有被花指令干扰到,所以还是很容易就把壳全部脱掉了。看来多分析、多看、多观察、多想、多思考对脱壳来说还是非常重要的,呵呵。
------------------------------------------------------------------------------------
OD设置:(OD设置为不忽略任何异常。[F2]:下软断点、[F4]:执行到当前代码处、[F7]:单步步入、[F8]单步步过、[F9]运行。)
脱第一层壳:(未知壳)
0040C000 > 60 PUSHAD ; 第一层壳入口。
0040C001 61 POPAD
0040C002 9C PUSHFD
0040C003 9D POPFD
0040C004 50 PUSH EAX
0040C005 53 PUSH EBX
0040C006 51 PUSH ECX
0040C007 59 POP ECX
0040C008 5B POP EBX
0040C009 58 POP EAX
0040C00A 74 02 JE SHORT 0.0040C00E
0040C00C 75 00 JNZ SHORT 0.0040C00E
0040C00E E9 00000000 JMP 0.0040C013
0040C013 68 00974000 PUSH 0.00409700
0040C018 C3 RETN ; 这行代码是第一层壳结束的地方,是一个跨段大跳。
脱第二层壳:(UPX壳)
00409700 60 PUSHAD ; 第二层壳入口,[F8]向下走一步。
00409701 BE 00704000 MOV ESI,0.00407000 ; 使用命令[HR ESP]下硬件断点,[F9]运行。
00409706 8DBE 00A0FFFF LEA EDI,DWORD PTR DS:[ESI+FFFFA000]
0040970C 57 PUSH EDI
0040970D 89E5 MOV EBP,ESP
0040970F 8D9C24 80C1FFFF LEA EBX,DWORD PTR SS:[ESP-3E80]
00409716 31C0 XOR EAX,EAX
00409718 50 PUSH EAX
00409719 39DC CMP ESP,EBX
0040971B ^ 75 FB JNZ SHORT 0.00409718
0040971D 46 INC ESI
0040971E 46 INC ESI
0040971F 53 PUSH EBX
00409720 68 43770000 PUSH 7743
00409725 57 PUSH EDI
00409726 83C3 04 ADD EBX,4
文件名称:手脱加三层壳(未知壳+UPX壳+未知壳)的病毒样本程序
目标程序:病毒样本
操作环境:Windows XP-SP2
使用工具:Ollydbg 1.10版
编写作者:Coderui
编写时间:2008年05月22日
///////////////////////////////////////////////////////////////////////////////////////////////
------------------------------------------------------------------------------------
第一层壳是很容易一眼就可以看出来关键跳转的,第二层壳是使用ESP守恒定义就可以轻松解决的,但第三层壳初步拿来时是不太好分析的。因为第三层壳中有复杂的嵌套循环跳转,并且在动态跟踪分析时代码严重受到花指令的干扰和影响,不小心动一动的话,代码结构就都变了。使用过下内存执行断点的方法,效果不是很理想。我最开始全部都是利用单步跟踪,然后根据规律和结构去一点点的向循环的外部跳转的。最后发现该壳结束时需要用到的那个跨段大跳的指令没有被花指令干扰到,所以还是很容易就把壳全部脱掉了。看来多分析、多看、多观察、多想、多思考对脱壳来说还是非常重要的,呵呵。
------------------------------------------------------------------------------------
OD设置:(OD设置为不忽略任何异常。[F2]:下软断点、[F4]:执行到当前代码处、[F7]:单步步入、[F8]单步步过、[F9]运行。)
脱第一层壳:(未知壳)
0040C000 > 60 PUSHAD ; 第一层壳入口。
0040C001 61 POPAD
0040C002 9C PUSHFD
0040C003 9D POPFD
0040C004 50 PUSH EAX
0040C005 53 PUSH EBX
0040C006 51 PUSH ECX
0040C007 59 POP ECX
0040C008 5B POP EBX
0040C009 58 POP EAX
0040C00A 74 02 JE SHORT 0.0040C00E
0040C00C 75 00 JNZ SHORT 0.0040C00E
0040C00E E9 00000000 JMP 0.0040C013
0040C013 68 00974000 PUSH 0.00409700
0040C018 C3 RETN ; 这行代码是第一层壳结束的地方,是一个跨段大跳。
脱第二层壳:(UPX壳)
00409700 60 PUSHAD ; 第二层壳入口,[F8]向下走一步。
00409701 BE 00704000 MOV ESI,0.00407000 ; 使用命令[HR ESP]下硬件断点,[F9]运行。
00409706 8DBE 00A0FFFF LEA EDI,DWORD PTR DS:[ESI+FFFFA000]
0040970C 57 PUSH EDI
0040970D 89E5 MOV EBP,ESP
0040970F 8D9C24 80C1FFFF LEA EBX,DWORD PTR SS:[ESP-3E80]
00409716 31C0 XOR EAX,EAX
00409718 50 PUSH EAX
00409719 39DC CMP ESP,EBX
0040971B ^ 75 FB JNZ SHORT 0.00409718
0040971D 46 INC ESI
0040971E 46 INC ESI
0040971F 53 PUSH EBX
00409720 68 43770000 PUSH 7743
00409725 57 PUSH EDI
00409726 83C3 04 ADD EBX,4
0
上一篇:没有了
下一篇:没有了
下一篇:没有了


