首页
社区
课程
招聘
[分享]写了个c编译shellcode的模版
发表于: 2014-9-17 23:31 4012

[分享]写了个c编译shellcode的模版

2014-9-17 23:31
4012
shellcode编写早就进入了高级语言时代。在freebuf上看到很多人推崇用delphi写shellcode。用c好像也没神马差别啊???而且我觉得更顺手啊。不知道是不是看到的delphi写shellcode的教程太老了。
估计大神手里都有自己的。。这个是为菜鸟准备的。
思路和部分结构以及代码抄袭Tk大神在github上发的。我基本上只是扩充了一下,64位部分。
https://github.com/tombkeeper/Shellcode_Template_in_C
还有些东西来自之前看的idf翻译的两篇c写shellcode的文章。idf博客和freebuf上都有,很好找这里就偷懒不放链接了。
调了半天编译器的设置也没调整好,就没有写导出shellcode到hex的代码。如果哪天有时间找到合适的编译参数,我再来更新。(记得原来用vs2010很容易就行了。。不知道是不是现在用的vs2013优化太多了。)
不过测试了shellcode函数是能够正确运行的。
shellcodetemplate是模版
calc那个是配合用来从函数名到hash的。

Fix:更新一下解决下面括号里的这个问题。。疏忽了。
(另外,函数内部局部变量的字符数组,我想要的结果是在函数内部生成填充数组的代码。详见idf实验室的那系列翻译文章。目前也没正确生成。)

9月18日更新:
现在这个shellcode模版代码没有太大更新,只是增加了一个输出shellcode到shellcode.bin文件的功能,只是把项目弄到了vs2010环境下,X64,x86。因为vs2013调了参数半天也没搞定,替用户做了太多的优化有时候也不是神马好事??微软你说是吧??。

增加了一个shellcode的测试项目,用来验证shellcode能够在原项目外的环境正确运行。
我一般的用法是用WinHEx打开生成的Shellcode.bin 然后用winhex NX的复制到c源码功能,把shellcode拷贝到shellcodetestproject的相应数组部分。然后就能测试了。

另外我发现。局部字符数组变量初始化的方式,还真是没啥好办法。tk大神的源码是把char 数组改变成DWORD 数组了。可以少写点东西。最后一个DWORD多出来的部分都0.

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 13248
活跃值: (4301)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
存档一份。。
2014-9-18 00:10
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
Delphi有得天独厚的写ShellCode的条件,似乎网上没有Delphi写ShellCode的教程吧~~
很多东西你没有考虑到~  比如WIN64下ShellCode,在本进程可以正常跑,但是提取出来以后换到实战进程各种异常的问题~这些都是需要解决的~

并且在当我看到了下面这坨东西以后,就不准备再往下看了~
char WinExecFuncName[10] = { 'W', 'i', 'n', 'E', 'x', 'e', 'c', '\0' };
        char ExitProcFuncName[20] = { 'E', 'x', 'i', 't', 'P', 'r', 'o', 'c', 'e', 's', 's', '\0' };
        char CmdLine[10] = { 'c', 'a', 'l', 'c', '.', 'e', 'x', 'e', '\0' };
2014-9-18 10:38
0
雪    币: 7
活跃值: (49)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
字符串定义上确实有点麻烦。。本来我以为char abc[]="XXXXXX";这样的能达到效果。结果发现这样的话会有全局变量(编译后的代码是把XXXX这个串分割成几个短的全局字串,再把他们拼起来,应该是编译器的一种优化)。不知道调整一下编译参数会不会有改变。
2014-9-18 12:46
0
雪    币: 24
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
替用户做了太多的优化有时候也不是神马好事。。。。
微软可不希望大众都来写Shellcode.........
2014-9-20 21:24
0
雪    币: 608
活跃值: (648)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
[QUOTE=奓奓;1317493]字符串定义上确实有点麻烦。。本来我以为char abc[]="XXXXXX";这样的能达到效果。结果发现这样的话会有全局变量(编译后的代码是把XXXX这个串分割成几个短的全局字串,再把他们拼起来,应该是编译器的一种优化)。不知道调整一下编译参数会不会有改变。[/QUOTE]

其实,合理使用相关的数据结构可以完全避免掉这些麻烦。
不要搞代码中混数据这种模式,因为一旦你的ShellCode工程变大,编译器再优化一下,鬼知道会出什么BUG~
2014-9-20 21:30
0
游客
登录 | 注册 方可回帖
返回
//