应用shellcode的简单示例

原程序,调用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 ebp
		mov ebp,esp
		add esp,-12
		mov dword ptr [ebp-4],0
		mov byte ptr [ebp-5],0x65
		mov byte ptr [ebp-6],0x78
		mov byte ptr [ebp-7],0x65
		mov byte ptr [ebp-8],0x2e
		mov byte ptr [ebp-9],0x63
		mov byte ptr [ebp-10],0x6c
		mov byte ptr [ebp-11],0x61
		mov byte ptr [ebp-12],0x63
		push 5
		lea eax,dword ptr [ebp-12]
		push eax
		mov eax,0x76542ec9
		call eax
		mov esp,ebp
		pop 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,shellcode
		call eax
	}
	return 0;
}


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



  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值