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点击内存 成功修改
载入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修改成功
