逆向之手工加壳
试验工具: LordPE、010Editor、OD
试验程序是vs2017编译的控制台程序,开始加壳。
一、添加区段
使用LordPE打开程序, 添加区段,新区段就是我们的壳
找到NewSec区段,右键编辑,添加0x200字节大小,随后点击保存。保存后可以运行下,发现运行不起来。
使用010Editor打开,找到最后,按Ctrl+Shift+i 添加0x200个字节大小。保存之后,点击程序发现可以正常运行了。
二、修改入口点(OEP)
同样用LordPE打开,首先记录原始的入口点,我这程序是0x1144C。
新添加的区段的RVA地址是0x23000,可以从上上上面的图片查询。将入口点直接更改为23000,然后点击保存。此时运行程序会崩溃。
三、OD修改跳转的原始入口点
现在的目的是要让程序能正常运行起来,原理就是从壳代码跳转到原始的入口点
由于win7以后的系统和程序都使用了随机基址,不能用jmp 直接跳转到一个固定的值
这里需要用到GetPC 技术,也就是获取到当前EIP数据的技术。这里使用 call 下一条指令;pop eax。 这样eax就保存了当前运行代码的基址
修改代码后,打个补丁,然后程序就运行起来了。
虽然壳代码只是一个跳转到OEP的功能,但至少这也是个壳。
如果对加壳有兴趣,可以看一下我写的加壳基础篇和高级篇
基础篇:https://blog.csdn.net/qq_31507523/article/details/89438410
高级篇:https://blog.csdn.net/qq_31507523/article/details/89678830