千里冰封 发表于 2016-12-26 09:54

脱壳之ESP定律寻找OEP

本帖最后由 千里冰封 于 2016-12-28 10:21 编辑

有矛就有盾,逆向不费劲。【吾爱汇编论坛】

static/image/hrline/2.gif
【以下为技术转载】

壳的加载过程:

首先是保存现场 ==》获取壳程序自己所需要的函数 ==》解密数据 ==》初始化IAT ==》跳到OEP ==》进行脱壳、修复

加壳的程序首先会初始化所有寄存器的值,在外壳执行完毕后,会恢复各个寄存器的内容,再跳到OEP去执行程序!
通常加壳程序会用pushad / pushfd进行保存现场,用popad / popfd来恢复现场。

一般外壳的输入表有GetMoudleHandleA、GetProcAddress和LoadLibrary这几个API函数!

壳会保护被加壳程序的区块的数据和代码,会加密被加壳程序的各个区块,在程序执行时,外壳会对这些被加密的数据进行解密,从而能够让被加密的程序可以正常运行!壳会按照被加密的区块的顺序进行解密,把解密的区块的数据按照区块的定义放在合适的内存位置!

程序在加壳的时候,加壳程序自己构造了一个输入表,并把PE头中的输入表的指针指向了自己构造了的输入表,所以,PE装载器会对自己建立的输入表进行了填写,那么原来的IAT是通过PE装载器来实现的,可是现在就只能依靠外壳来填写PE输入表,外壳只需要对新输入表结构从头到尾扫描一遍,对每个DLL的引入的所有函数重新获取地址,并填写IAT!

外壳的执行完毕后,会跳到原来的程序的入口点,即Original Entry Point,也可以称作OEP!当一般加密强度不是很大的壳,会在壳的末尾有一个大的跨段,跳向OEP,类似一个壳与程序入口点的“分界线”

有的加密壳会把程序的入口点挪到壳段,并把这段代码给清除掉,就是我们称作的“Stolen Code”,这样壳与程序就部分彼此,加大了对脱壳的难度。(当然,我们可以把清除掉的OEP补回来!然后再进行脱壳!有的壳可能会利用虚拟机将入口出给VM掉,都是需要我们手动修复的!)

static/image/hrline/2.gif

static/image/hrline/1.gif
ESP定律寻找OEP在线视频:**** Hidden Message *****如果觉得有帮助,请甩起评分,评分是系统赠送的,免费的{:5_187:}



tianzhiya 发表于 2016-12-26 10:47

多谢楼主分享, 学习了!

千里冰封 发表于 2016-12-26 11:07

多谢鲨鱼老大的支持,标题已改好@Shark恒

lihui0520 发表于 2016-12-26 13:57

新手理论学习中 ,非常感谢哦

千里冰封 发表于 2016-12-26 14:01

tianzhiya 发表于 2016-12-26 10:47
多谢楼主分享, 学习了!

有帮助就好{:5_116:}

千里冰封 发表于 2016-12-26 14:04

lihui0520 发表于 2016-12-26 13:57
新手理论学习中 ,非常感谢哦

大家都是新手,相互学习{:5_124:}

xpj_user01 发表于 2016-12-26 20:43

来学习了{:6_225:}

frank3706 发表于 2016-12-26 21:15

感谢分享!下来学习学习!!

音无 发表于 2016-12-27 14:22

沉迷学习无法自拔

千里冰封 发表于 2016-12-27 21:21

我觉得视频 教程,直接放上视频连接,比较好,下载速度太慢了{:5_187:}
页: [1] 2 3 4 5 6 7 8 9 10
查看完整版本: 脱壳之ESP定律寻找OEP