VB程序的OEP的特征,一般都是push一个数据到堆栈,然后进行CALL,而这个CALL调用的系统的dll文件,这个是重点要考的
那么就会有一个思路:当加壳完,最后来到OEP处,程序运行会调用系统DLL,那么我们是不是只要给系统的DLL下内存断点,当访问的时候就是不是会让OD捕获异常,使其断下点呢?
1、把一个UPX壳的VB加载OD中,EP为如下,这里选择用特殊OD来调试VB,原因是这个OD只有当内存访问断点处才会被断点下来,其他OD就算设置了内存断点,一访问就会直接断下,不适合用于脱壳
2、发现找到系统的DLL,对其代码段进行内存访问断点,原因上面已经讲过了
3、进行F9,然后成功的断在了系统DLL的领空上
来到dll的领空,我们可以返回到程序的领空,在堆栈窗口进行反汇编窗口跟随,那么肯定是dll call调用的下一行,那么上去两行则是我们的OEP,成功找到!