首页
社区
课程
招聘
[原创]开源一个ShellCode生成框架
发表于: 2019-5-25 13:42 22928

[原创]开源一个ShellCode生成框架

2019-5-25 13:42
22928

现阶段,shellcode编写门槛高,大多需要有较深的汇编功底,而Metersploit上的Shellcode开源生成框架,功能单一,扩展性差,大多只能在demo中测试使用,难以在实战中发挥作用。

我的这个版本用纯C语言实现了Windows平台下自己的Shellcode生成器,能在实战中根据现实情况,自动生成所需功能的Shellcode。

整个项目大致如下:后面会讲解每一个文件的作用

首先来说一下自己的这个项目的设置,本项目使用VS2013编译

我的这个框架分为两个部分,一个是ShellCode的生成部分,还有一个是ShellCode部分

之所以采用这样的文件命名的方式是为了方便计算ShellCoede的大小。文件的编译顺序就是编译后的exe函数的排列顺序。具体来说这个项目的文件编译顺序是0.entry.cpp->a.start.cpp->b.work.cpp->z.end.cpp(main.cpp是另外一个工程),那么代码段中的函数排列顺序也会和文件的编译顺序一致 下面说一下每个文件的作用

首先我在a.start.cpp中放了一个ShellCodeStart函数,用于标记ShellCode的开始位置

然后在z.end中放了一个ShellCodeEnd函数,用来标记ShellCode的结束位置,然后将真正的ShellCode放在a和z之间

那么根据文件的编译顺序,只需要用ShellCodeEnd函数的位置减去ShellCodeStart函数的位置,就能得到ShellCode的大小

首先来说明ShellCode的生成部分,这个部分在0.entry.cpp中,同时将入口点修改为EntryMain,也就是说这是整个工程的main函数

这个ShellCode生成函数会计算ShellCode的大小,然后将ShellCode写到一个二进制文件,可以省去在OD中提取ShellCode的步骤

真正的ShellCode代码存放在a.start中的ShellCodeEntry函数里

首先我定义了一个结构体Functions,这个结构体存放所有需要用到的函数指针

接着通过计算哈希的方式获取到需要的函数地址并将所需要的模块加载进来

接着调用MessageBox函数
!

另外我还写了一个ShellCodeLoader用于测试写好的ShellCode,代码相对来说比较简单

就是将ShellCode读取到内存然后执行

如果你所编写的ShellCode没有文件,当双击ShellCodeLoader时,就会执行生成的ShellCode.bin文件

如果执行成功,说明ShellCode没有问题

在编写好ShellCode之后点击ShellCodeFrame.exe会生成ShellCode.bin,然后用二进制文件打开ShellCode.bin,复制所有代码即可

我的这个框架并只写了一个示例的MessageBox函数,具体扩展的步骤如下:

在api.h中定义所需要的函数指针,并将函数指针存放到结构体

在hash.h中定义需要用的到函数的哈希值

在b.work的Initfunctions函数中获取函数指针和加载需要的模块

在ShellCodeEntry中调用函数

《Windows平台高效Shellcode编程技术实战》

PIC_BINDSHELL(Github):
https://github.com/mattifestation/PIC_Bindshell

https://github.com/TonyChen56/ShellCodeFrame

 
 
 
 
 
 

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 11
支持
分享
最新回复 (18)
雪    币: 1055
活跃值: (412)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
赞一个
2019-5-25 15:15
0
雪    币: 9662
活跃值: (4588)
能力值: ( LV15,RANK:800 )
在线值:
发帖
回帖
粉丝
3
TK 2014 年就开源过一个了:https://github.com/tombkeeper/Shellcode_Template_in_C
2019-5-25 17:15
0
雪    币: 30
活跃值: (735)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
不错, 注释的很好
2019-5-25 22:26
0
雪    币: 2938
活跃值: (18)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
5
谢谢分享!
2019-5-26 21:04
0
雪    币: 918
活跃值: (1875)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
之前写了个基于脚本语言的shellcode生成器,写了1/2了没时间给放下了,有空捡起来写完开源了
2019-5-27 11:01
0
雪    币: 1725
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
2019-5-28 20:57
0
雪    币: 109
活跃值: (314)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢分享! 好东西啊 学习学习
2019-5-30 00:01
0
雪    币: 58
活跃值: (1130)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
厉害
2019-5-30 22:22
0
雪    币: 1134
活跃值: (2711)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
阿里嘎多
2019-6-3 02:05
0
雪    币: 6052
活跃值: (12569)
能力值: ( LV12,RANK:312 )
在线值:
发帖
回帖
粉丝
11
有兴趣的也可以学习一下shellcode框架编写及学习
看雪:
https://bbs.pediy.com/thread-249267.htm 
freebuf:
https://www.freebuf.com/fevents/194308.html
51cto
https://edu.51cto.com/course/17712.html

最后于 2019-6-6 15:09 被一半人生编辑 ,原因:
2019-6-6 15:05
0
雪    币: 47
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
sss66666
2019-12-16 20:50
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
项目里写成了mian.cpp hhh
2020-11-24 15:24
0
雪    币: 589
活跃值: (205)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
厉害
2020-12-6 21:53
0
雪    币: 128
活跃值: (679)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
老哥你这个ShellCode支持X64的嘛
2020-12-6 23:22
0
雪    币: 199
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16

如果shellcode运行时连loadlabrary和getprocessaddr的地址都不知道的话,怎么开始呢?

最后于 2021-1-25 16:08 被Otoboku编辑 ,原因:
2021-1-25 15:25
0
雪    币: 4673
活跃值: (3189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
这个框架关键的一笔记带过,32和64位程序的loadlabrary和getprocessaddr怎么获取也没有提及。
2022-1-4 11:50
0
雪    币: 6
活跃值: (556)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
请教下c++生成代码的时候是按顺序生成的吗?按这个逻辑,完全可以把程序写成一个shellcode直接写入内存来执行,连修复工作都不用了。。。。
2022-2-12 05:08
0
雪    币: 3819
活跃值: (3588)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
直接写个内存加载DLL的shellcode就行了 
2022-2-12 14:52
0
游客
登录 | 注册 方可回帖
返回
//