首页
社区
课程
招聘
[原创]分享用C语言写ShellCode的实现源码
发表于: 2013-6-10 13:13 23900

[原创]分享用C语言写ShellCode的实现源码

2013-6-10 13:13
23900
每次来逛看雪网,都是抱着一种想法:最近大牛们有没有新的、有创意的编程技术又贴出来与大家分享,我就是来论坛上学习的。前几天看到好几个帖子都是谈论 ShellCode 的,有一个特点就是:壳的源程序要么是用汇编语言写出来的,要么是C语言镶入很多汇编写的,而加壳程序才用C语言写的。我不是不喜欢汇编语言,只是想起刚开始写ShellCode的时候也是用汇编来实现,现在回想起来太繁琐了,对于一个入门者的我,可是耗费很大的精力和时间去学,到头来程序功能多起来后,好多汇编程序不容易维护和再利用,多得一团糟,最后没有办法直接丢弃。因为看帖子时实在情不自禁就唠了几句心里话,现在想想以个人业余编程爱好者的资格,其实我也只能是学习,不该出大口气。 但是来看雪关索取,不分享资料不是我想要的为人。这两天整理简化了以前刚开始用C语言写的ShellCode 源码,贴出来与大家分享,不足之处,欢迎大牛们给以批评指教。 这是我在看雪论坛发的第一个分享程序源码的帖子,因为个人表达能力有限,帖子上对源码我只做简单说明。加壳程序写的很乱,所以整理程序时我没有添加多少注释。

附件 ExeShellCode.rar 实现了一个节名为ExeShell的PE节,用PE工具都可以在ExeShellCode.exe里查看到,它是壳源程序。加壳程序源码在附件UpExeShellCode.rar里,它负责实现给目标文件末尾加一个PE节并把这个名为ExeShell的PE节移植到目标EXE文件上。附件TEST.rar是对几个系统小工具的测试加壳,都是XP系统的,Win7下的有一些会有问题,但是很容易可以解决。也许脱壳的牛牛们再也找不到比这个壳更简单就可以脱掉的壳了,但是我这里只是来做分享的,不是来体现脱壳的难度的,我只想说:学写ShellCode用C语言应该比汇编更容易,应该被认可和支持,软件壳不应该很神秘,学编程我们更应该去理解和探索程序运行的本质 - - 世上本无壳!

刚开始用c语言写ShellCode,我习惯用也推荐用VC++6.0中文版的编译器。对于编译UpExeShellCode.rar里的源码,用过VC++6.0的人应该不用我说明什么,工程配置直接就是Debug配置。而对于ExeShellCode.rar里的源码,必须用Release配置编译,你可以随便创建个控制台项目,然后把ExeShellCode.rar里的所有h文件和cpp文件添加到工程项目,然后移除Debug配置只用Release配置编译即可。

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 5
支持
分享
最新回复 (21)
雪    币: 144
活跃值: (46)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
2
看看 应该不错。。。
2013-6-10 14:25
0
雪    币: 222
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
膜拜...
2013-6-10 14:48
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
4
不错,感谢分享

而且还让我知道了为什么我的感染代码会出问题。

因为没有考虑对IMAGE_DATA_DIRECTORY进行相应的清除操作。

但是还是要说。。
你这是写壳的。。而不是写shell code的
虽然行为上都是在一个目标程序中插入代码,但是壳对稳定性健壮性要求更高。

而一般在漏洞中可利用的shell code对最终代码的体积要求更严格一些,可以说在写针对漏洞的Shell Code时,用高级语言来写是不合适甚至做不到的(除非内联asm),因为有一点很重要,大部分时间需要你去精确控制某些关键指令的地址。

不跟你再关于用什么语言写Shell Code更好这个问题做探讨了,就像CSDN里面你说一句C比C++好就能让一堆程序员一上午不工作在论坛打口水仗一样。

认为好的就继续坚持研究下去,挖掘出更多优势。

楼主加油。
2013-6-10 14:49
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
5
IMAGE_DATA_DIRECTORY进行相应的清除操作在在《PE权威指南》里好像没有提得多详细,只是需要自己尝试修改,并且各个系统PE加载器理应不尽相同。

我的代码你在测试过程中如果发现有什么问题,希望你能提出来。

CSDN我好长时间没有去了,不知道账号是否被踢。
2013-6-10 14:54
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
6
不错,感谢分享

而且还让我知道了为什么我的感染代码会出问题。

因为没有考虑对IMAGE_DATA_DIRECTORY进行相应的清除操作。

但是还是要说。。
你这是写壳的。。而不是写shell code的
虽然行为上都是在一个目标程序中插入代码,但是壳对稳定性健壮性要求更高。

而一般在漏洞中可利用的shell code对最终代码的体积要求更严格一些,可以说在写针对漏洞的Shell Code时,用高级语言来写是不合适甚至做不到的(除非内联asm),因为有一点很重要,大部分时间需要你去精确控制某些关键指令的地址。

不跟你再关于用什么语言写Shell Code更好这个问题做探讨了,就像CSDN里面你说一句C比C++好就能让一堆程序员一上午不工作在论坛打口水仗一样。

认为好的就继续坚持研究下去,挖掘出更多优势。

楼主加油。
2013-6-10 15:01
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
7
其实类似的代码,我在Win7驱动程序里HOOK执行,对内核API函数地址进行整个内核空间的内核API重新加载都没有出问题。如果你要发现我这个程序有什么地方出问题,请你提出来,以求加以进步。
2013-6-10 15:22
0
雪    币: 1042
活跃值: (470)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
感谢楼主,最近正想写类似这种功能的shellcode或者壳。
2013-6-10 16:47
0
雪    币: 27
活跃值: (90)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
linziqingl兄的帖子终于出来了,
端午节期间一直在忙碌,今晚才看到你的帖子,明天好好学习C语言写的Shellcode

2013-6-12 23:13
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
10
有什么创意的想法或实现就回个,私下信息也可以。
2013-6-13 11:46
0
雪    币: 215
活跃值: (90)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
11
你可以用c写出功能编译,再用OD提取修正,再导入c中,这个方法用于shellcode也很方便。
2013-6-13 13:02
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
12
愿闻其详,你是否可以开个详细实现的帖子?或愿贴个操作样本步骤?也可私下信息说明操作样本步骤?因为你说的这个我还没有做过,现在也还不会做。
2013-6-13 15:09
0
雪    币: 215
活跃值: (90)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
一个蠕虫的测试ShellCode
http://hi.baidu.com/hcper/item/d9f9826253e94093c5d24972

用OD以及EditPlus构造提取ShellCode
http://hi.baidu.com/hcper/item/1b23dff106fcf50dc6dc4570
2013-6-14 10:31
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
14
EditPlus有010 Editor方便?
2013-6-14 10:48
0
雪    币: 215
活跃值: (90)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
没用过010,现在工具太多,我只用记事本和这个。
2013-6-14 12:07
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
nice man!!!!!!!!!!!!!!
2013-6-14 13:27
0
雪    币: 48
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
先收藏~~  拜谢分享
2013-6-15 16:14
0
雪    币: 208
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
感谢你的分享,不过在64位下 就完全失效了,所有的都有问题了
2013-6-17 06:08
0
雪    币: 348
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
Emeditor也有列选功能。
2013-6-17 09:27
0
雪    币: 267
活跃值: (438)
能力值: ( LV9,RANK:190 )
在线值:
发帖
回帖
粉丝
20
我只有32位的Win XP 和 32位的 Win7 系统,64位的我没有啊!64位的系统我可没有用过,仁兄如果可以,给我发个64位的系统用用看啊?不胜感激!
2013-6-17 12:48
0
雪    币: 512
活跃值: (3465)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
感谢分享,了解下!
2013-6-18 00:14
0
雪    币: 206
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
按着这个模板来写
2017-7-14 11:23
0
游客
登录 | 注册 方可回帖
返回
//