首页
社区
课程
招聘
[旧帖] [原创]写外壳加密总结及要注意的问题,希望对以后的人有帮助 0.00雪花
2012-5-14 10:21 2315

[旧帖] [原创]写外壳加密总结及要注意的问题,希望对以后的人有帮助 0.00雪花

2012-5-14 10:21
2315
本段文字只是对前一段时间编写外壳加密的一些总结,里边不会出现任何代码,只是一些思路以及注意事项,希望这段文字对你会有一些帮助。

加壳软件编写的步骤:
对于我来说,以前没有写过外壳之类的软件,所以一下要对PE文件进行很多处理是很痛苦的,所以一开始我是这样做的:

1. 了解PE文件结构
2. 尝试为PE文件增加一个区段(只是简单的显示一个MESSAGEBOX)
3. 尝试增加对PE文件的处理,比如,压缩等等......
4. 在外壳代码中增加一些自己需要的功能

写壳过程中遇到的问题:
1. 如何处理输入表
将输入表复制到外壳中,并修正文件头。然后自己修复原来的输入表。如果你没有对PE文件进行压缩或者加密处理,就不必这么麻烦,你所做的只需要为PE增加一个区段而已。

2. 对TLS的处理
这对DELPHI程序比较重要,我的程序也没有对含有TLS_CALLBACK函数的进行处理,只是简单的修正了一些TLS,没有管TLS_CALLBACK函数(你可以自己处理)。在处理TLS段的时候我发现无论我如何处理它,运行起来都是错误的,后来才发现,在我的PE是压缩过程的,所以TLS指向的数据都是压缩后的数据,并不是原始的数据,所以,如果你使用了压缩PE文件的功能,一定要注意保存正确的数据,这样你才能对TLS进行处理。

3. 对DLL的处理
我的程序没有对DLL进行压缩,所以,没有处理重定位数据。一定要注意堆栈平衡。如果你的外壳程序调用了msvcrt.dll中的函数(比如: memcpy, strcmp......),请注意,一定要在call 之后恢复堆栈,我的做法是传出了几个参数,我就POP几次,比如:
push eax
push ebx
call memcpyAddr
pop edx
pop edx
这样做是因为我发现调用这一类函数时,我的外壳程序会有问题,但是当POP之后,程序就正常了,后来查了一些资料,原来你调用标准的API之后,它会自动处理对准,但是调用msvcrt.dll里边的函数则不会。

4. 参考资料,这个比较重要,呵呵呵...... 我是看看雪的 软件加密技术内幕,上边有加壳软件的实例代码,看过之后才了解其中的原理,虽然书中的代码对一些PE不能正确处理,但是对学习它的基本原理还有很好的,我也是参考书中的程序并做了一些修改。

5. 我的程序也只是实现了基本的一些功能而已,没有都那么高深,能写出一个可以运行的加壳程序对于一个初学者是一个莫大的鼓舞,无论这个功能是多么简单,千万不要一开始就看很复杂的东西,这样会对自己打击很大(当然,如果你很聪明,那就除外了,呵呵......)。写一个基本的外壳加密程序所需要的东西,基本上在书中和论坛中都能找的到。

以上只是个人写壳的一些感悟,如果有不正确的地方,还望指出,如果这篇文件能对你有一点点的启发,那也是我莫大的欣慰......

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞3
打赏
分享
最新回复 (2)
雪    币: 29410
活跃值: (18710)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
kanxue 8 2012-5-14 10:52
2
0
欢迎你的加入,邀请码己短信你
雪    币: 65
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
chenjinyi 2012-5-14 16:34
3
0
谢谢,已经收到
游客
登录 | 注册 方可回帖
返回