du11jk 发表于 2022-3-14 13:42

OEP入口查找和基本壳的识别

# 入口点的查找:

>VC6特点:入口点代码是固定的代码,入口调用的API也是相同的,其中有的push地址不同程序可能不同;区段有四个也是固定的.text、.rdata、.data和.rsrc。
特征:固定调用API
GetVersion;GetCommandLineA;GetStartupInfoA


>VS特点:入口点只有两行代码,一个CALL后直接JMP,第一个CALL进去后调用的API也是相同的;区段相对于VC6多了一个.reloc。
特征:call + jmp指令
API:GetSystemTimeAsFlieTime;GetCurrentThreadId;GetCurrentProcessId;QueryPerformanceCounter


# 脱壳基本方法

1.单步跟踪

2.平衡堆栈

​        OEP的第一条指令是`pushad`,作用一般是保存寄存器环境,将8各通用寄存器压入堆栈;单步执行程序,指令`pushad`执行,堆栈变化,此时在栈顶(ESP)设置硬件断点;
​        运行,程序在`popad`附近停止,表示已经处在壳代码末尾,继续单步到一个较大的`jmp`跳转,目标应该是原始OEP。
​        观察代码是否确是原始OEP,可以参照上文不同情况入口点特征做判断。

步骤:

1.查找原始OEP

​        确定原始程序代码的位置

2.dump内存到文件

​        内存中被还原的代码和数据抓取下来,重新保存成一个文件

3.修复文件

​        修复IAT,对从内存中转储到本地的文件进行修复

# 参考

https://www.anquanke.com/post/id/99750
https://www.52pojie.cn/forum-68-1.html
https://www.52pojie.cn/thread-234739-1-1.html
https://zhuanlan.zhihu.com/p/34263050
https://www.cnblogs.com/iBinary/p/7764483.html

liuyilin999 发表于 2022-3-14 15:41

这个是一般情况

sopc 发表于 2022-3-20 13:10

新手学习,表示感谢

Danx 发表于 2022-6-26 16:01

学习一下,非常感谢

lin007 发表于 2022-7-7 18:58

谢谢楼主科普

lishaoyi 发表于 2022-7-24 09:12

88M的程序,一脱就7M了,咋回事

lantian899 发表于 2022-7-28 19:35

啥是入口点?

hao9ii 发表于 2022-11-27 22:09

我测试了一下,UPX4.0加的壳,ESP定律好像搞不定,找不到正确的OEP
页: [1]
查看完整版本: OEP入口查找和基本壳的识别