woyaodaili 发表于 2011-3-28 10:41

根据堆栈和寄存器判断被偷了OEP

搜索了下论坛,好象没发现有人说怎么判断偷OEP.我是新手,在其他地方看见有这东西
就转了过来,需要的自己看下吧~

OD载入时的堆栈跟到达OEP时的堆栈,两者是一致的吧.
如果发现两者不一样,那应该被偷了
我看了2个OEP被偷的例子,
如OD加载时的堆栈是
0013FFC4      7C816FE7RETURN to kernel32.7C816FE7
0013FFC8      7C930041RETURN to ntdll.7C930041 from ntdll.7C930092
0013FFCC      00560778
0013FFD0      7FFD6000
0013FFD4      8054B6ED
0013FFD8      0013FFC8
0013FFDC      88A23020
0013FFE0      FFFFFFFFEnd of SEH chain
0013FFE4      7C839AF0SE handler
0013FFE8      7C816FF0kernel32.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      7C816FE7RETURN to kernel32.7C816FE7
0013FFC8      7C930041RETURN to ntdll.7C930041 from ntdll.7C930092
0013FFCC      00560778
0013FFD0      7FFD6000
0013FFD4      8054B6ED
0013FFD8      0013FFC8
0013FFDC      88A23020
0013FFE0      FFFFFFFFEnd of SEH chain
0013FFE4      7C839AF0SE handler
0013FFE8      7C816FF0kernel32.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已经执行过去了

wg66 发表于 2011-3-28 11:12

ljm1215 发表于 2011-3-28 11:34

谢谢楼猪,学习学习……

zhangcan850718 发表于 2011-3-28 16:27

谢谢楼主分享宝贵经验,学习了!

羡小b 发表于 2011-3-28 16:53

哦哦。学习了。谢谢楼主。。。。

iceface 发表于 2011-3-30 17:11

sunhai0975 发表于 2011-3-30 20:30

我是新手,学习了 感谢分享

wanwanle 发表于 2011-3-30 22:46

偶也来看看鲁猪的新方法

Emil 发表于 2011-3-30 22:50

那有没有找到被偷的oep的快速方法呢?

woyaodaili 发表于 2011-3-31 09:09

丶纯情小强 发表于 2011-3-30 22:50 static/image/common/back.gif
那有没有找到被偷的oep的快速方法呢?

这个我也不知道~~
页: [1] 2
查看完整版本: 根据堆栈和寄存器判断被偷了OEP