首先用peid查看程序,发现是Vc++5.0[overlay]。查找OEP时用到了很多的办法,以下都是用ollyice载入程序,包括:
1、ESP定律
2、准备用硬件中断,拦截LoadLibrary或GetProcAddress时,在弹出式菜单中“查找―全部模块中的命令”中根本找不到GetProcAddress这个函数,更不可能设硬件中断了。
3、关于一步到达OEP的popad也不存在
4、对于内存跟踪方法,忽略掉所有异常,重载程序并打开内存镜象,在第一个.rsrc下断点。而后运行至断点(如下),接着再打开内存镜象找到了刚才的.rsrc,但却无法找到code,郁闷。。。
中断停在了
7C93280A 8A5D D3 mov bl, byte ptr [ebp-2D]
7C93280D 66:8B50 0C mov dx, word ptr [eax+C] -----》中断停在了这里
7C932811 66:8955 B0 mov word ptr [ebp-50], dx
7C932815 8D70 10 lea esi, dword ptr [eax+10]
7C932818 8975 90 mov dword ptr [ebp-70], esi
7C93281B 8B55 0C mov edx, dword ptr [ebp+C]
7C93281E 66:F742 02 FFFF test word ptr [edx+2], 0FFFF
7C932824 75 11 jnz short 7C932837
5、本想对WaitForDebugEvent进行下断,但很遗憾又失败了。
6、对于我来说,最后一个办法了。忽略所有异常,重载程序准备用记下按SHIFT+F9的次数的办法找查入口点,但不幸的是,在第一次按下SHIFT+F9程序就自动运行了!
在查看代码时发现了PEsPinr的花指令,已通过插件进行了修复填充。尝试了DUMP,修改偏移后也无法显示图标!!!
我想问的是我这个程序究竟是用E语言编写的还是加了壳的,应该如何再次着手?
求教各位看雪老大,感激不尽中。。。
部分代码:
10001159 |. 5F pop edi
1000115A |. 5B pop ebx
1000115B \. C3 retn
1000115C CC int3
1000115D CC int3
1000115E CC int3
1000115F CC int3
10001160 > $ 55 push ebp ---->
载入程序后,停在此处
10001161 . 8BEC mov ebp, esp
10001163 . 6A FF push -1
10001165 . 68 00300010 push 10003000
1000116A . 68 78210010 push 10002178 ; SE 处理程序安装
1000116F . 64:A1 0000000>mov eax, dword ptr fs:[0]
10001175 . 50 push eax
10001176 . 64:8925 00000>mov dword ptr fs:[0], esp
1000117D . 83C4 A8 add esp, -58
10001180 . 53 push ebx
10001181 . 56 push esi
10001182 . 57 push edi
10001183 . 8965 E8 mov dword ptr [ebp-18], esp
10001186 . FF15 D4700010 call dword ptr [<&KERNEL32.GetVersion>; kernel32.GetVersion
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课