一些术语的备忘录
区块的对齐值
有两种对齐值,一种用于磁盘文件内,另一种用于内存中。
在PE文件头里,FileAlignment定义了磁盘区块的对齐值。200h,512
SectionAlignment定义了内存中区块的对齐值。1000h,4K
应用程序加载映射示意图
外壳加载示意图:
寻找OEP
OEP是程序的原始入口点,一个正常的程序只有EP,只有入口点被修改的程序(加壳等),才会拥有OEP。
根据跨段指令寻找OEP:手动跟踪
用内存访问断点寻找OEP
外壳先将压缩的代码解压并释放到对应的区块上,处理完毕再跳转到代码段执行。
按“ALT+M”组合键打开内存模块,对代码段(.text)按F2设置内存访问断点。
![](https://img-blog.csdnimg.cn/627373a699d5411382e40daa030672e1.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA6Iqx57q16YWS,size_20,color_FFFFFF,t_70,g_se,x_16)
根据栈平衡原理寻找OEP
在编写加壳软件时,必须保证外壳初始化的现场环境〔各寄存器值)与原程序的现场环境是相同
加壳程序在初始化时保存各寄存器的值,待外壳执行完毕恢复各寄存器的内容,最后跳转到原程序执行。