加壳实现
2016-01-19 11:45
459 查看
学习了PE文件结构一段时间了,于是想写一个简单的壳更好的掌握所学的内容。
一、加壳思路
加壳软件一般要编写两部分内容(加壳软件和壳软件),目的是把壳软件附加到要保护的可执行文件里面实现一些目的。目前而言壳软件用dll来实现是比较简单的方式,当然也可以用其他的方式。
加壳软件:(只增加一个段的实现方式)
1>加载要被加壳的文件,并分析其PE结构。
2>加载DLL到内存,并分析其PE结构,得到相应的数据。
3>得到DLL导出数据结构ShellInfo的运行地址,并获得偏移地址。
4>判断被加壳的文件是否有足够的空间增加一个段表,是否要扩展ImageHeaders
5>申请足够的空间存放被加壳文件和加壳文件的数据
6>保存被加壳文件的PE结构数据,供壳程序使用
7>重新计算壳文件重定位表中的数据。
8>重新计算新的PE文件的信息,增加一个段表
9>保存文件
壳软件:
1>为了在运行壳程序时不使用重定位表,壳软件在编写时采用自己搜索Kernel32.dll,并得到GetProAddress的地址,然后自己加载所需要的API
2>编写壳程序想要实现的功能
3>模仿Windows加载器,加载被加壳文件的重定位信息和导入表信息
4>从ShellInfo得到被加壳程序的入口点地址,跳转到被加壳程序的入口点。
二、一些思考
1、本来想在壳软件的实现里使用动态重定位技术,如果不用上一篇重定位的文章中的两种方法。可以采用在堆栈中执行代码的技术,将获取当前EIP的代码写到堆栈中,查过资料后大跌眼镜,Windows是带有堆栈保护的,解决办法windows溢出保护原理与绕过方法概览
V2.0(2011/5/9更新)
,本来是用这种方法实现计算编译地址和运行地址差值的,结果这条路也被堵死了,自己的知识储备还是太少,继续思考中。
2、可以将壳软件放到加壳软件的资源里面,这样两个软件就合成了一个软件。
加壳源码 < 一个简单的壳 >
一、加壳思路
加壳软件一般要编写两部分内容(加壳软件和壳软件),目的是把壳软件附加到要保护的可执行文件里面实现一些目的。目前而言壳软件用dll来实现是比较简单的方式,当然也可以用其他的方式。
加壳软件:(只增加一个段的实现方式)
1>加载要被加壳的文件,并分析其PE结构。
2>加载DLL到内存,并分析其PE结构,得到相应的数据。
3>得到DLL导出数据结构ShellInfo的运行地址,并获得偏移地址。
4>判断被加壳的文件是否有足够的空间增加一个段表,是否要扩展ImageHeaders
5>申请足够的空间存放被加壳文件和加壳文件的数据
6>保存被加壳文件的PE结构数据,供壳程序使用
7>重新计算壳文件重定位表中的数据。
8>重新计算新的PE文件的信息,增加一个段表
9>保存文件
壳软件:
1>为了在运行壳程序时不使用重定位表,壳软件在编写时采用自己搜索Kernel32.dll,并得到GetProAddress的地址,然后自己加载所需要的API
2>编写壳程序想要实现的功能
3>模仿Windows加载器,加载被加壳文件的重定位信息和导入表信息
4>从ShellInfo得到被加壳程序的入口点地址,跳转到被加壳程序的入口点。
二、一些思考
1、本来想在壳软件的实现里使用动态重定位技术,如果不用上一篇重定位的文章中的两种方法。可以采用在堆栈中执行代码的技术,将获取当前EIP的代码写到堆栈中,查过资料后大跌眼镜,Windows是带有堆栈保护的,解决办法windows溢出保护原理与绕过方法概览
V2.0(2011/5/9更新)
,本来是用这种方法实现计算编译地址和运行地址差值的,结果这条路也被堵死了,自己的知识储备还是太少,继续思考中。
2、可以将壳软件放到加壳软件的资源里面,这样两个软件就合成了一个软件。
加壳源码 < 一个简单的壳 >
相关文章推荐
- 结合Phalcon看webapp中的MVC构架
- OC笔记一:Objective-C简介
- 15-语言入门-15-6174问题
- 我在CSDN安家了!
- Hibernate 注解配置
- zabbix监控mysql主从
- openswan klips代码分析--(1)初始化流程
- python 协程
- unique_ptr数组笔记
- 如何实现APK的反编译得到APK的源码?
- ios7下面用autolayout报错类似 *** Assertion failure in -[XXX layoutSublayersOfLayer:], /SourceCache/UIKit/U
- windows 创建服务提示失败 5 拒绝 访问拒绝
- Python序列之列表 (list)
- c++ 设计模式1
- http Content-type对照表
- 14-语言入门-14-阶乘因式分解(一)
- linux 与windows文件夹共享实现 smab协议
- hdoj1023 Train Problem II
- java读写文件及保留指定位小数
- 13-语言入门-13-三个数从小到大排序