首页
社区
课程
招聘
[原创]二进制加壳原理与实现
发表于: 2019-1-22 11:52 32015

[原创]二进制加壳原理与实现

2019-1-22 11:52
32015

软件加壳的目的是为了防止外部程序对软件进行静态反汇编分析或者动态分析达到对软件保护的目的。壳子的种类很多,大体种类分2种二进制壳和指令壳,二进制壳不改变硬编码的含义,指令壳则改变了原有硬编码的含义。 本篇文章介绍二进制壳的加壳的一种思路及实现。

加壳流程如下图所示:


(1)将待加壳程序全部进行加密,加密可以采用任何方式;(2)在壳子程序中新增一个节,大小为待加壳程序的大小+解壳程序的大小;(3)将解壳程序拷贝到1位置,加密后的待加壳程序拷贝到2位置;(4)修改壳子程序的OEP到新增节的位置。(5)存盘壳子程序。

这里的壳子程序可以是任意程序,只提供了外壳。壳子程序是任意的,新增节后的位置也是变化的,所以解壳程序一定是shell程序。

2,解壳程序

打开壳子程序的时候,程序会从OEP开始启动,执行的是解壳程序:(1)读取加密后的待加壳程序2;(2)解密得到原来的程序;(3)以挂起的方式创建进程,创建的进程是壳子程序进程,这里要注意的是以挂起的方式创建的进程,没有加载任何模块。(4)获取新创建的进程的Contex环境,(5)卸载外壳程序,卸载掉原来壳子程序imageBase开始到程序内存镜像这部分空间的数据,此时只有空间,而内部的内存处于没有使用状态。(6)在创建的进程内部在待加壳程序的imageBase处申请内存空间,大小是待加壳程序的imageBase。(7)将待加壳程序拉伸,复制到刚刚申请到的imageBase处,此时,在壳子的空间内部,已经偷天换日编程了待加壳的程序了。(8)修改外壳Contex的imagebase=待加壳的imagebase,OEP=待加壳程序的OEP了。(9)恢复外壳程序的主线程。(10)主线程启动后,解壳结束,壳子内部运行的是待加壳程序。好一个偷天换日。

整个解壳程序都需要使用shellCode的方式来写,编译后,抠出硬编码存储成字节数组,所以拷贝的解壳程序就是这个字节数组。

3,加壳代码


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2019-1-22 15:01 被毕达哥拉斯编辑 ,原因: 修改图片
收藏
免费 11
支持
分享
最新回复 (13)
雪    币: 47147
活跃值: (20415)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
2
图片显示不出来,建议重帖一下图。
2019-1-22 14:24
0
雪    币: 2149
活跃值: (3211)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
3
支持发码,话说怎么就发到移动板块了呢,多支持我的加壳脱壳板块哦
2019-1-22 15:25
0
雪    币: 14488
活跃值: (17488)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
4
xiaohang 支持发码,话说怎么就发到移动板块了呢,多支持我的加壳脱壳板块哦[em_1]
试图科比??
2019-1-22 16:40
0
雪    币: 6112
活跃值: (1212)
能力值: (RANK:30 )
在线值:
发帖
回帖
粉丝
5
感谢分享!
2019-1-23 15:57
0
雪    币: 199
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享!
2019-1-24 16:12
0
雪    币: 1385
活跃值: (22)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
這種方法反向破解起來不要太容易了吧?而且如果整個程序全部加密的話,資源等其他非代碼段的處理都會有問題。
最后于 2019-1-25 10:47 被DLDLIS编辑 ,原因:
2019-1-25 10:45
0
雪    币: 1808
活跃值: (578)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
8
这只是最简单的框架,还不涉及各种表的移动,压缩壳等等
2019-1-25 10:56
0
雪    币: 164
活跃值: (104)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
毕达哥拉斯 这只是最简单的框架,还不涉及各种表的移动,压缩壳等等
可以直接引用的 不用一个一个截图的
2019-1-25 11:52
0
雪    币: 1808
活跃值: (578)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
10
冰雪冬樱 可以直接引用的 不用一个一个截图的
2019-1-25 11:59
0
雪    币: 26398
活跃值: (63257)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
11
哈哈,有点6
2019-1-25 15:08
0
雪    币: 183
活跃值: (2427)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
能不能把全部的源码发下
2019-6-9 16:02
0
雪    币: 183
活跃值: (2427)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
你为什么中间加壳的时候多加一个0x2000
2019-6-9 22:14
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
请问可不可以发一下全部的源码?
2021-11-15 17:29
0
游客
登录 | 注册 方可回帖
返回
//