脱壳基础知识入门
2007-01-14 20:15:39 来源:WEB开发网核心提示: 第六课寻找OEP一般的压缩壳,如Aspack等都有专用的脱壳机,脱壳基础知识入门(8),而加密壳(如ASProtect,Armadillo)一般很少有脱壳机,必须手工脱壳,方法是开个DOS窗口,用命令upxnotepad.exe,手工脱壳一般情况是分三步:一是查找程序的真正入口点(OEP)
第六课寻找OEP
一般的压缩壳,如Aspack等都有专用的脱壳机 。而加密壳(如ASProtect,Armadillo)一般很少有脱壳机,必须手工脱壳。手工脱壳一般情况是分三步:一是查找程序的真正入口点(OEP);二是抓取内存映像文件;三是输入表重建。(当然现在的加密壳复杂些,要考虑更多的东西)
OEP是OriginalEntryPoint缩写,即程序加壳前的真正的入口点。
外壳初始化的现场环境(各寄存器值)与原程序的现场环境是相同的。加壳程序初始化时保存各寄存器的值,外壳执行完毕,会恢复各寄存器内容。其代码形式一般如下:
PUSHFD ;将标志寄存器入栈保存
PUSHAD ;pusheax,ecx,edx,ebx,esp,ebp,esi,edi
…… ;外壳代码部分
POPAD ;popedi,esi,ebp,esp,ebx,edx,ecx,eax
POPFD ;恢复标志寄存器
JMPOEP ;
OEP:…… ;解压后的程序原代码
为了讲述方便,本节用UPX加壳的Win98记事本来演示。首先用PEid查看加壳前的记事本:
PEid显示Notepad.exe程序是用MicrosoftVisualC++6.0编译的,接下来用UPX来加壳,方法是开个DOS窗口,用命令upxnotepad.exe。如下图所示:
这时再用PEid查看加壳的文件,PEid会给出如下信息:UPX0.89.6-1.02/1.05-1.24->Markus&Laszlo
更多精彩
赞助商链接