180218 逆向-脱壳技术(1)

1625-5 王子昂 总结《2018年2月18日》 【连续第506天总结】
A. 脱壳技术(1)
B.

加载过程

壳和病毒在有些方面类似,都需要比源程序代码更早的获得控制权。

  1. 保存入口参数
    初始化时保存各寄存器的值,执行完毕后再恢复各寄存器。通常使用pushad\popad, pushfd\popfd
  2. 获取壳自己所需要使用的API
    一般外壳的输入表中只有GetProcAddress, GetModuleHandle和LoadLibrary这几个API,甚至连这几个API也自己实现而不用导入的方式。
  3. 解密原程序的区块
    将原程序的代码还原,放置在合适的内存位置
  4. 初始化IAT
    IAT的填写本来应该由PE装载器实现。但是由于壳取代了原来的头部构造了输入表,因此PE装载器只是完成了壳的输入表。因此原程序的输入表只好由壳来完成了:将所有导入函数填写在IAT表中
  5. 处理重定位
    对于EXE程序来说,基地址默认情况下都是0x400000,每个程序都会给予单独的虚拟内存,基址一般是不会变的,因此重定位表就不需要了。所以有的壳会干脆把重定位表也删除来精简空间
    但是对于DLL程序,重定位表是必须的。
  6. 跳转到OEP
    恢复原程序的运行
    值得一提的是早期的壳程序和原程序(OEP)所在区块一般不同,因此分界线很明显
    现在越来越多的壳为了应对这一点将OEP的一段代码移动到外壳的部分里,然后再将OEP处的代码删除,从而改动模糊这条分界线

C. 明日计划
脱壳技术

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值