• 标 题:瞎侃:发现OEP的一个思路。 (749字)
  • 作 者:ljtt
  • 时 间:2004-02-11 22:03:08
  • 链 接:http://bbs.pediy.com

我们都知道冲击波发现OEP的原理是,利用一些编程语言编译的程序的开始的一段代码是相对固定的,其中包括了GetCommandLineA、GetModuleHandle、GetVersion这几个函数的调用,这样在这几个函数进行拦截,通过对比拦截后的地址附近的代码特征可以发现OEP。

但是目前的壳通过把这些函数的结果提前在壳中取出来,当程序调用这些函数时,不再通过API调用这些函数,这样避开了拦载这些函数得到OEP的方法。

通过比较壳隐藏的这些函数,可以发现象GetCommandLineA、GetEnvironmentStringsW这样的函数,返回的是一个指针,在程序中会对这个指针指向的内容进行读,如果拦截对这些函数的调用,返回一个无效指针,这样当程序读数据时,会发生异常,这样异常地址就在程序OEP的附近了。

当然如果壳在提前在调用这些API时加个防范(实际试探一下地址是否可读),那么这个想法也没有用了。

瞎侃一下了。走人。。