搜索了下论坛,好象没发现有人说怎么判断偷OEP.我是新手,在其他地方看见有这东西
就转了过来,需要的自己看下吧~
OD载入时的堆栈跟到达OEP时的堆栈,两者是一致的吧.
如果发现两者不一样,那应该被偷了
我看了2个OEP被偷的例子,
如OD加载时的堆栈是0013FFC4 7C816FE7 RETURN to kernel32.7C816FE7
0013FFC8 7C930041 RETURN to ntdll.7C930041 from ntdll.7C930092
0013FFCC 00560778
0013FFD0 7FFD6000
0013FFD4 8054B6ED
0013FFD8 0013FFC8
0013FFDC 88A23020
0013FFE0 FFFFFFFF End of SEH chain
0013FFE4 7C839AF0 SE handler
0013FFE8 7C816FF0 kernel32.7C816FF0
0013FFEC 00000000
0013FFF0 00000000
0013FFF4 00000000
0013FFF8 004040D1 <ModuleEntryPoint>
0013FFFC 00000000
到达OEP时,堆栈成了0013FFBC 003A3543 /CALL to GetModuleHandleA from 003A353E
0013FFC0 00000000 \pModule = NULL
0013FFC4 7C816FE7 RETURN to kernel32.7C816FE7
0013FFC8 7C930041 RETURN to ntdll.7C930041 from ntdll.7C930092
0013FFCC 00560778
0013FFD0 7FFD6000
0013FFD4 8054B6ED
0013FFD8 0013FFC8
0013FFDC 88A23020
0013FFE0 FFFFFFFF End of SEH chain
0013FFE4 7C839AF0 SE handler
0013FFE8 7C816FF0 kernel32.7C816FF0
0013FFEC 00000000
0013FFF0 00000000
0013FFF4 00000000
0013FFF8 004040D1
0013FFFC 00000000
发现与一开始OD载入时不一致.
所以我猜测如果两者堆栈不一致,那就是被偷了OEP
0013FFBC 003A3543 /CALL to GetModuleHandleA from 003A353E
0013FFC0 00000000 \pModule = NULL
看到这2句就应该意识到可能真正的OEP已经执行过去了
|