-
-
[求助]EP到底是不是Exe本身代码的入口?
-
发表于:
2008-12-15 09:51
5311
-
运行一个Exe的时候,会先根据IAT表加载相应的DLL,并且用GetProcAddress得到API的真实地址。也就是说Exe运行后,DLL的EP将是第一个被调用的地方,而Exe本身的EP应该是最后被调用的,但它是Exe本身代码的入口。
最近遇到一个ExeCryptor壳,此壳被OD加载后,还没有运行到EP,就直接异常了,异常原因是调用了Lock:int3,无法继续运行到EP。用LordPE查看了一下IAT,只有kernel32.dll和user32.dll,应该不是DLL作怪。
然后我尝试把入口点改为int3或者Sleep或者MessageBoxA,然后直接运行,发现程序运行起来直接退出。尝试用UE仅仅把Exe的最后一个字节改成01,程序也运行不起来,应该是有自校验。但是以前遇到的自检验,也都是进了EP以后再在Exe自己的代码里面作校验,但是这个壳根本就没有进EP。
最后我在Exe运行起来以后,用LordPE把它dump出来,IAT不需要修复就已经是正确的了!?用OD加载dump后的Exe,顺利断在EP处,只是继续运行下去得不到正确的结果罢了……
为什么这个壳在进入EP前,就可以作手脚?是不是进入EP前还是执行了其他Exe本身的代码?这段代码的入口需要怎么去查找呢?
[课程]Linux pwn 探索篇!