首页
社区
课程
招聘
[原创]windows下shellcode提取模板的实现
发表于: 2018-6-29 13:35 15553

[原创]windows下shellcode提取模板的实现

2018-6-29 13:35
15553

Windows下的Shellcode一般用于在极小的空间内完成一些基本而重要的工作

除此之外也有别的好处,比如说代码加密以及代码隐藏

编写shellcode比起正常的编写代码来说算是件较为费事的工作,基本上来说需要协调较多东西。模板的意义在于做到将正常代码复制到模板中就可以生成可以直接Call的shellcode。

因为用汇编撰写shellcode比较麻烦。如果用C语言来撰写,则比较好。特别,对于类似病毒这种,远线程注入这种,如果能够用C语言来写,会方便很多。

后来一段时间我都用C语言来写,避开全局变量的调用,一遍又一遍的写K32寻址去加载需要的函数。后来觉得如果以这样的方式去转化一两个函数的代码能应付得过来,但是如果是转化几千行的整个项目的代码,这样的做的话需要花费时间太多。

所以将提取shellcode的方法写成模板,并尽可能加上C++特征。


以下是需要提取的代码的入口:

其他看附件,代码结构还算清晰,暂时用模板提取了一个2000多行代码的小项目,总的来说还是挺爽的,项目本身shellcode保存为任意形式,启用他的exe去掉DEF保护后调用直接call

模板极大方便了提取shellcode的工作,并且能够支持全局变量。这样实现了转化甚至于一整个项目的代码,作用的话,依旧是代码加密以及隐藏,以及非常灵活的调用。



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

上传的附件:
收藏
免费 2
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/06/29
最新回复 (20)
雪    币: 3738
活跃值: (3872)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
感谢分享!
2018-6-29 13:48
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
3
感兴趣的小伙伴加群讨论讨论~~183746493~~路漫漫其修远兮
2018-6-29 14:04
0
雪    币: 775
活跃值: (3420)
能力值: ( LV7,RANK:140 )
在线值:
发帖
回帖
粉丝
4
使用类进行包裹模拟全局变量,这样做是否可以避免重定位?我看你代码里似乎不需要做重定位修正
2018-6-29 14:51
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
yeyeshun 使用类进行包裹模拟全局变量,这样做是否可以避免重定位?我看你代码里似乎不需要做重定位修正
不需要~都是属于类变量啊~总得算下来还是局部变量~只不过将整个需要提取的项目包裹在一个类里,把这个类看做项目文件就好哈哈哈~
2018-6-29 14:57
0
雪    币: 50
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
感谢分享!
2018-6-29 15:52
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
学习了,居然忘了还有这种方法去除全局变量导致的重定位.
在类中,是这样访问类的变量的.
首先是,将类指针给ecx
然后,通过ecx加变量偏移,进行寻址,...
最后于 2018-6-29 17:33 被zaimongli编辑 ,原因: ..
2018-6-29 17:32
0
雪    币: 18
活跃值: (1059)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
8
先顶一下,厉害。
说下建议
这个太复杂,看我写那个注入的例子,直接编译为exe,然后使用7z模板的右键解压功能直接提取出来的exe区段就是shellcode。
最后于 2018-6-29 18:43 被猪会被杀掉编辑 ,原因:
2018-6-29 18:40
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
9
猪会被杀掉 先顶一下,厉害。说下建议这个太复杂,看我写那个注入的例子,直接编译为exe,然后使用7z模板的右键解压功能直接提取出来的exe区段就是shellcode。
好的大佬~我去研究研究
2018-6-29 20:48
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
感谢分享!我去研究研究 哈哈哈
2018-7-5 23:45
0
雪    币: 45
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
普通代码shellcode化并不是只有全局变量这个坑...
1.字符串,需要处理
2.switch 需要改成 if else 结构,有些代码写的太骚,根本没法改
3.结构体不能用 struct a = { 0 } 这样的方式初始化(里面不能是0)
4.其他待发现的...
2018-7-20 09:48
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
12
zyla 普通代码shellcode化并不是只有全局变量这个坑... 1.字符串,需要处理 2.switch 需要改成 if else 结构,有些代码写的太骚,根本没法改 3.结构体不能用 struct ...
我后期再改进改进,shellcode与C++的结合,路数还是不少,自己用自己模板都发现好多坑
2018-7-22 18:03
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
13
我一直在用c直接dump shellcode ,全局变量我利用了peb中的某个不常用的位置存放全局变量列表;
2018-9-6 09:07
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
14
看你的代码取shellcode大小直接用 (int)mmLoaderSCEnd - (int)mmLoaderSCStart; 你能保证项目大时,mmLoaderSCEnd就绝对位于类的最下面位置(最高位置),mmLoaderSCStart位于类最上(最低位置)吗? 这中间会不会有其他无关代码;像创建线程这种要获取绝对地址的操作如何解决;
2018-9-6 09:18
0
雪    币: 3738
活跃值: (3872)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
楼上点出的问题在实际应用中我也遇见了。
2018-9-6 10:55
0
雪    币: 381
活跃值: (58)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
16
msf 看你的代码取shellcode大小直接用 (int)mmLoaderSCEnd - (int)mmLoaderSCStart; 你能保证项目大时,mmLoaderSCEnd就绝对位于类的最下面位置(最 ...
不会……我最大的弄了26kb的shellcode……我觉得够大了
2018-9-8 01:54
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
17
告诉你些经验:
1. 放弃使用内敛汇编,可以直接利用编译器 将shellcode在x86和x64之间快速切换生成,(实在没办法的地方可以领_WIN64宏来区分加入汇编)
2. 可以利用vs /MAP":map.txt" /ORDER:@"funs.txt"  的办法将 所需的函数紧密的链接到文件中(内存中也紧密排列)这样就可以准确的获取shellcode起始位置和大小。
2018-9-11 09:16
0
雪    币: 46
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
在吗?为什么winhttp库在debug下调用获取地址成功,但是在RUN_EXE模式下有的函数能提取成功,有的失败?
最后于 2019-6-5 09:51 被seaworlds编辑 ,原因:
2019-5-29 09:15
0
雪    币: 226
活跃值: (537)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
猪会被杀掉 先顶一下,厉害。说下建议这个太复杂,看我写那个注入的例子,直接编译为exe,然后使用7z模板的右键解压功能直接提取出来的exe区段就是shellcode。
找不到你的注入例子,给个连接
2019-6-28 02:46
0
雪    币: 25
活跃值: (506)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
mark一下
2019-9-9 14:21
0
雪    币: 4709
活跃值: (1575)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
21
最近学这个,mark一下
2020-4-13 22:19
0
游客
登录 | 注册 方可回帖
返回
//