程序1
PEiD载入程序
实际上该程序的壳为 CrypKeySDK
载入od查看
程序一进去的路口点不是常见的push ebp
点击上面窗口的 M查看内存
其中出现出现**have a nice day!**字段
同时首代码的地址为46B6DE对照内存中为输入表中
判断有壳
继续调试
程序jmp到一串代码处代码开头为 55 8B E3为vc经典开头
选择右键分析—分析代码
继续判断是否到达OEP
观察起始地址2471B0对应内存中的代码段
推测应该到达OEP
右键选择Dump该程序
命名程序后再使用PEiD进行查看
得到源程序的编译程序
再用od载入脱壳后程序
载入后直接进入OEP
先将内存中的 have a nice day! 删除
使用LoadPE载入脱壳的程序
将其地址于od中内存显示的对比
然后修改区段
右键选中区段然后删除
保存修改
再次载入od点击内存
成功修改
程序2
载入PEiD
可以看出有一个EZIP的壳
运行程序
载入od
观察到存在很多jmp跳转
查看内存
同时发现有两段text rdata 和 data
开始调试程序
jmp后来到一段类似OEP的段
观察到地址依然在伪造的代码段
判断此处不是OEP
接下来利用堆栈平衡的原理
堆栈平衡 推荐此贴:https://www.52pojie.cn/thread-394116-1-1.html
简单概括一下就是壳的可以当作一个加密函数,函数就会调用栈,根据栈的先进后出,返回到OEP的地址一定会push进去,在该命令下一条push处下断点,就可以在后面清空栈准备返回时停下,而此时下一步就是跳转向OEP
继续调试观察寄存器ESP的值
此处ESP的值发生变化
在右侧右键选择数据窗口跟随
下方出现数据所在位置
在该位置下硬件断点
运行程序
在此处停下,而下一步跳转就为OEP地址
对应内存得到OEP地址
右键dump保存
在LordPE中打开
同时与od中内存对比
更改数据部分
载入od修改成功