查看原文
其他

抛砖引玉之gcc生成可可携带字符串的shellcode

malokch 看雪学院 2019-05-27

原理:


通过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

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存