抛砖引玉之gcc生成可可携带字符串的shellcode
原理:
通过linker script实现自定义section链接,将代码段和只读数据段链接到一起,生成一个dll,再用objcopy生成binary。
要求:
windows10,装上debian或者ubuntu应用;
也可以直接用linux mingw-w64(gcc for windows gcc的一个发行版,用于编译出exe dll sys等)。
步骤:
1,在linux shell中运行以下命令安装mingw-w64。
1,在linux shell中运行以下命令安装mingw-w64
2,解压附件,并在shell中cd到附件目录,执行以下命令编译。
make all
3,运行例子。
./exec.exe
效果:
shellcode的hexdump:
附件:
entry_x86_64.S 入口汇编代码,用于获取PEB,并调用c代码。编译得出entry.o。链接的时候此文件需要放在前面,这样使代码放在shellcode头部。其中用到的偏移量随着各个操作系统版本的不同也有所变化,需要注意。
sc.c shellcode的c代码部分,这里只拿kernel32.dll的handle,并进一步得到其他相关的数据。然后调用MessageBoxA。需要注意的是,c代码部分不能有全局变量,否则会出错。
winapi.h windows的一些api的声明。
sc.lds 链接脚本,将text代码段和rdata只读数据段直接拼接在一起。传入到ld命令。
exec.c shellcode的测试程序,allocate一处读写执行的内存,拷贝shellcode到此内存,然后直接调用。
Makefile 编译脚本。
后记:
这里只是介绍gcc生成shellcode,其中有些细节也是可以展开的但是时间有限这里就不展开了,况且论坛里已经有帖子讨论相关的内容了。另外关于编译脚本,不懂Makefile的也要进行一定的学习才能基于本例继续开发。
这个例子也是从我另一个弄着自己玩的pubg项目里抽取出来的,别的部分是黑科技,就不放出来了。
- End -
看雪ID:malokch
https://bbs.pediy.com/user-453009.htm
本文由看雪论坛 malokch 原创
转载请注明来自看雪社区
热门图书推荐:
热门技术文章推荐:
公众号ID:ikanxue
官方微博:看雪安全
商务合作:wsc@kanxue.com