内存执行断点脱壳寻找OEP
前言:内存执行断点脱壳寻找OEP的笔记
内存执行断点来寻找OEP这种方法不一定准确,只是经验之谈
如果一开始知道OEP的地址话,那么成功脱壳的几率应该百分之百,如果不知道,那自己尝试如下的方法试试看
加载入OD,打开内存窗口观察,发现是UPX的壳
查看内存段中加载的信息
内存映射, 条目 22 地址=00401000 大小=00008000 (32768.) 属主=CRACKME_ 00400000 区段=UPX0 包含=输出表 类型=Imag 01001002 访问=R 初始访问=RWE
内存映射, 条目 23地址=00409000大小=00001000 (4096.) 属主=CRACKME_ 00400000 区段=UPX1 包含=代码 类型=Imag 01001002 访问=R 初始访问=RWE
内存映射, 条目 24地址=0040A000大小=00001000 (4096.) 属主=CRACKME_ 00400000 Section=.rsrc Contains=data,imports,resources 类型=Imag 01001002 访问=R 初始访问=RWE
知道了UPX1是加壳程序的代码段,那么这个程序在运行的时候肯定不会把自己的加壳程序的UPX1代码段的内存作为解密的存储位置来写入,那么值得怀疑的区段就只有.rsrc段和UPX0段,那么直接给UPX0下内存执行断点,原因是UPX1区段解密完会在别的区段进行写入解密完之后的代码,所以当别的区段进行内存执行的时候,也就是解密的完毕时候的代码
内存执行断点之后,那么直接F9运行,就会来到OEP的位置,也就是真正程序要开始准备执行的地方