忽然心血来潮想来脱壳了,想起以前那款半路放弃的pecompact2.55的壳。从网上下了个pecompact2.70,对记事本加壳。加壳后,od载入,到达入口
Code
01001000 > B8 24BA0101 mov eax, 0101BA24
01001005 50 push eax
01001006 64:FF35 0000000>push dword ptr fs:[0]
0100100D 64:8925 0000000>mov dword ptr fs:[0], esp
01001014 33C0 xor eax, eax
01001016 8908 mov dword ptr [eax], ecx
01001018 50 push eax
上来就设置seh,开始以为要转向0101ba24,在0101ba24处设个断点,竟然没有调用到, 01001016处触发异常,
Code
7C90E480 8B1C24 mov ebx, dword ptr [esp]
7C90E483 51 push ecx
7C90E484 53 push ebx
7C90E485 E8 E6C40100 call 7C92A970
7C90E48A 0AC0 or al, al
7C90E48C 74 0C je short 7C90E49A
7C90E48E 5B pop ebx
7C90E48F 59 pop ecx
7C90E490 6A 00 push 0
7C90E492 51 push ecx
7C90E493 E8 C6EBFFFF call ZwContinue
7C90E498 EB 0B jmp short 7C90E4A5
7C90E49A 5B pop ebx
7C90E49B 59 pop ecx
7C90E49C 6A 00 push 0
7C90E49E 51 push ecx
7C90E49F 53 push ebx
7C90E4A0 E8 09F5FFFF call ZwRaiseException
跟踪至call ZwContinue处,程序跑飞,呵呵,系统函数,竟然跑飞,我再运行,在这里F7跟进,
7C90D05E > B8 20000000 mov eax, 20
7C90D063 BA 0003FE7F mov edx, 7FFE0300
7C90D068 FF12 call dword ptr [edx]
7C90D06A C2 0800 retn 8
跑到7c90d063处,提示KiFastSystemCall,再运行,又飞,上网查ZwContinue的用法,得知进入ZwContinue后,[[esp+4]+B8]处是转向的地址,这个函数我以前在不少书上看到过了,不过看过也没用,用到时记不住,相当于白看了。事非经过记不住啊。查知该处的值为0100739d,这个转移可不小,看样子应该到了OEP了,不过什么程序入口点长成这个样子,记得C程序第一句一般都是push ebp
Code
0100739D 6A 70 push 70
0100739F 68 98180001 push 01001898
010073A4 E8 BF010000 call 01007568
010073A9 33DB xor ebx, ebx
010073AB 53 push ebx
不理他接着跟,越下看越怀疑,怎么开始初始化C运行库了,打住暂停,DUMP出来再说,保存。运行,一切正常。查壳,VC 7.0 Over。