• 标 题:loader找OEP的原理 (757字
  • 作 者:fs0
  • 时 间:2002-4-6 16:39:15
  • 链 接:http://bbs.pediy.com

loader通过读取被加壳程序startup时的Ebp, Esp, [Esp]值跟 
该程序运行到一定地址时Ebp, Esp, [Esp]的值比较,若相等则认为该地址就是OEP。目前只对Asprotect 1.2x有效。 

那么我们应该在哪里停下被加壳程序去读值,而该地址又不是OEP的上一或下一地址呢。 
Windows 有一API VirtualProtectEx,用来设置内存空间的某些属性,在NT下可以设上 
PAGE_GUARD属性,若程序读、写、执行设了PAGE_GUARD属性的内存,就会产生一 
STATUS_GUARD_PAGE_VIOLATION的异常,我们就可以利用该特性,给被加密了的程序代码 
空间(我只是简单的把第一个Section认为是代码段)加上PAGE_GUARD属性,要是被加壳 
程序运行该保护段的代码,而且Ebp, Esp, [Esp]跟startup时的值相等则认为该地址就是OEP。 

理论上该方法可以应用到其他大多数的加壳方法上,Armadillo当然是例外(: 
那么为什么该loader不能用在Aspack、upx、PECompact....上?现在什么都懒了,懒啊!! 

--------------------------------------------------------------------------------
标 题:“普通程序执行前ebp指向哪里”这个问题比较专业,我也不太清楚... (334字)
发信人:fs0
时 间:2002-4-7 21:23:50
阅读次数:42
详细信息:

“普通程序执行前ebp指向哪里”这个问题比较专业,我也不太清楚。 
在不能十分肯定破坏被加壳程序的ebp和esp对程序有什么影响前,我想通用的加壳软件并不会贸然行事, 
至少现时大多数加壳软件到达OEP时会恢复ebp, esp的值,之后的事由加壳软件的作者去想吧。 
我用的是调试的方法,也初步想了一下如何反被检测到的方法,得等见到有加壳程序反调试后再加上去。