应用shellcode的简单示例

来源:互联网 发布:重庆宝钻资产管理 知乎 编辑:程序博客网 时间:2024/06/11 04:49

原程序,调用windows计算器:

#include <windows.h>int main(){WinExec("calc.exe",SW_SHOW);return 0;}


用内联汇编代码的方式实现WinExec("calc.exe",SW_SHOW)的功能:

#include <windows.h>int main(){__asm{push ebpmov ebp,espadd esp,-12mov dword ptr [ebp-4],0mov byte ptr [ebp-5],0x65mov byte ptr [ebp-6],0x78mov byte ptr [ebp-7],0x65mov byte ptr [ebp-8],0x2emov byte ptr [ebp-9],0x63mov byte ptr [ebp-10],0x6cmov byte ptr [ebp-11],0x61mov byte ptr [ebp-12],0x63push 5lea eax,dword ptr [ebp-12]push eaxmov eax,0x76542ec9call eaxmov esp,ebppop ebp}return 0;}

把汇编代码对应的机器码定义到shellcode变量,然后在main函数中用汇编代码进行调用:

#include <windows.h>char shellcode[] = "\x55\x8b\xec\x83\xc4\xf4\xc7\x45""\xfc\x00\x00\x00\x00\xc6\x45\xfb""\x65\xc6\x45\xfa\x78\xc6\x45\xf9""\x65\xc6\x45\xf8\x2e\xc6\x45\xf7""\x63\xc6\x45\xf6\x6c\xc6\x45\xf5""\x61\xc6\x45\xf4\x63\x6a\x05\x8d""\x45\xf4\x50\xb8\xc9\x2e\x54\x76""\xff\xd0\x8b\xe5\x5d\xc3";//0x76542ec9是WinExec函数的地址,可能会变。。。int main(){__asm{lea eax,shellcodecall eax}return 0;}


由于生成的程序PE文件的数据段的属性为不可执行,所以需要更改数据段的属性字段,把图示的字段从C0更改为E0,程序变得可执行了。



1 0
原创粉丝点击