关闭

C语言执行shellcode的五种方法

2746人阅读 评论(2) 收藏 举报

//C语言执行shellcode的五种方法

#include <windows.h>
#include <stdio.h>

//data段可读写
#pragma comment(linker, "/section:.data,RWE") 
//不显示窗口
#pragma comment(linker,"/subsystem:\"windows\" /entry:\"mainCRTStartup\"")
#pragma comment(linker, "/INCREMENTAL:NO") 


//一段打开Windows计算器(calc.exe)的shellcode   
unsigned char shellcode_calc[] =
"\xb8\x82\x0a\x8d\x38\xd9\xc6\xd9\x74\x24\xf4\x5a\x29\xc9\xb1\x23"
"\x31\x42\x12\x83\xea\xfc\x03\xc0\x04\x6f\xcd\x38\xf0\x2b\x2e\xc0"
"\x01\x3f\x6b\xfc\x8a\x43\x71\x84\x8d\x54\xf2\x3b\x96\x21\x5a\xe3"
"\xa7\xde\x2c\x68\x93\xab\xae\x80\xed\x6b\x29\xf0\x8a\xac\x3e\x0f"
"\x52\xe6\xb2\x0e\x96\x1c\x38\x2b\x42\xc7\xc5\x3e\x8f\x8c\x99\xe4"
"\x4e\x78\x43\x6f\x5c\x35\x07\x30\x41\xc8\xfc\x45\x65\x41\x03\xb2"
"\x1f\x09\x20\x40\xe3\x83\xe8\x2c\x68\xa3\xd8\x29\xae\x5c\x15\xba"
"\x6f\x91\xae\xcc\x73\x04\x3b\x44\x84\xbd\x35\x1f\x14\xf1\x46\x1f"
"\x15\x79\x2e\x23\x4a\x4c\x59\x3b\x22\x27\x5d\x38\x0a\x4c\xce\x56"
"\xf5\x6b\x0c\xd5\x61\x14\x2f\x93\x7c\x73\x2f\x44\xe3\x1a\xa3\xe9"
"\xe4";

unsigned char shellcode[] =
"\xd9\xeb\x9b\xd9\x74\x24\xf4\x31\xd2\xb2\x77\x31\xc9\x64\x8b"
"\x71\x30\x8b\x76\x0c\x8b\x76\x1c\x8b\x46\x08\x8b\x7e\x20\x8b"
"\x36\x38\x4f\x18\x75\xf3\x59\x01\xd1\xff\xe1\x60\x8b\x6c\x24"
"\x24\x8b\x45\x3c\x8b\x54\x28\x78\x01\xea\x8b\x4a\x18\x8b\x5a"
"\x20\x01\xeb\xe3\x34\x49\x8b\x34\x8b\x01\xee\x31\xff\x31\xc0"
"\xfc\xac\x84\xc0\x74\x07\xc1\xcf\x0d\x01\xc7\xeb\xf4\x3b\x7c"
"\x24\x28\x75\xe1\x8b\x5a\x24\x01\xeb\x66\x8b\x0c\x4b\x8b\x5a"
"\x1c\x01\xeb\x8b\x04\x8b\x01\xe8\x89\x44\x24\x1c\x61\xc3\xb2"
"\x08\x29\xd4\x89\xe5\x89\xc2\x68\x8e\x4e\x0e\xec\x52\xe8\x9f"
"\xff\xff\xff\x89\x45\x04\xbb\x7e\xd8\xe2\x73\x87\x1c\x24\x52"
"\xe8\x8e\xff\xff\xff\x89\x45\x08\x68\x6c\x6c\x20\x41\x68\x33"
"\x32\x2e\x64\x68\x75\x73\x65\x72\x88\x5c\x24\x0a\x89\xe6\x56"
"\xff\x55\x04\x89\xc2\x50\xbb\xa8\xa2\x4d\xbc\x87\x1c\x24\x52"
"\xe8\x61\xff\xff\xff\x68\x6f\x78\x58\x20\x68\x61\x67\x65\x42"
"\x68\x4d\x65\x73\x73\x31\xdb\x88\x5c\x24\x0a\x89\xe3\x68\x58"
"\x20\x20\x20\x68\x4d\x53\x46\x21\x68\x72\x6f\x6d\x20\x68\x6f"
"\x2c\x20\x66\x68\x48\x65\x6c\x6c\x31\xc9\x88\x4c\x24\x10\x89"
"\xe1\x31\xd2\x52\x53\x51\x52\xff\xd0\x31\xc0\x50\xff\x55\x08";

typedef void (__stdcall *CODE) ();


//http://rshell.blog.163.com/blog/static/41619170201110302937361/

//第一种方法   
void RunShellCode_1()
{

	PVOID p = NULL;
	if ((p = VirtualAlloc(NULL, sizeof(shellcode), MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE)) == NULL)
		MessageBoxA(NULL, "申请内存失败", "提醒", MB_OK);
	if (!(memcpy(p, shellcode, sizeof(shellcode))))
		MessageBoxA(NULL, "写内存失败", "提醒", MB_OK);

	CODE code =(CODE)p;

	code();

}

//第二种方法   
void RunShellCode_2()
{
	((void(*)(void))&shellcode)();
}

//第三种方法
void RunShellCode_3()
{
	__asm
	{
		lea eax, shellcode;
		jmp eax;
	}
}

//第四种方法   
void RunShellCode_4()
{
	__asm
	{
		mov eax, offset shellcode;
		jmp eax;
	}
}

//第五种方法   
void RunShellCode_5()
{
	__asm
	{
		mov eax, offset shellcode;
		_emit 0xFF;
		_emit 0xE0;
	}
}

void main()
{
	//RunShellCode_1();
	//RunShellCode_2();
	//RunShellCode_3();
	//RunShellCode_4();
	RunShellCode_5();
}

2
0
查看评论

C语言执行shellcode的五种方法

//C语言执行shellcode的五种方法 #include #include //data段可读写 #pragma comment(linker, "/section:.data,RWE") ...
  • MickeyMouse1928
  • MickeyMouse1928
  • 2017-05-03 19:59
  • 724

Shellcode的原理及编写

1.shellcode原理
  • maotoula
  • maotoula
  • 2014-01-19 17:11
  • 29472

在内存中读取函数的ShellCode并执行

在内存中读取函数的ShellCode并执行 下面是一个例子,实现的效果是将fun1函数的十六进制读取出来,在内存中将str1的地址改成str2,分配一块内存,将改好的函数的ShellCode写入并执行。
  • SysProgram
  • SysProgram
  • 2013-12-28 01:46
  • 2785

使用C编译器编写shellcode

http://segmentfault.com/a/1190000000375591 背景 有时候程序员们需要写一段独立于位置操作的代码,可当作一段数据写到其他进程或者网络中去。该类型代码在它诞生之初就被称为shellcode,在软件中黑客们以此获取到shell权限。方法就是通过这样或那样的恶...
  • sgzwiz
  • sgzwiz
  • 2014-01-03 17:24
  • 998

学习写一个shellcode

一个简单的shellcode 最近对安全技术比较感兴趣,买了本灰帽黑客来看,发现书中的代码都是基于32位系统的,不能很好的在自己的X64架构的64位系统(Ubuntu15.10)上实验其代码,考虑到现在已经是64位的时代了,有必要搞懂在64位下如何实现,因此找了些相关的资料研究,终于把看懂的...
  • tmzk_hzau
  • tmzk_hzau
  • 2016-05-16 22:12
  • 537

Shellcode

Shellcode
  • u013761036
  • u013761036
  • 2016-10-18 21:59
  • 1160

在内存中读取函数的ShellCode并执行

在内存中读取函数的ShellCode并执行 下面是一个例子,实现的效果是将fun1函数的十六进制读取出来,在内存中将str1的地址改成str2,分配一块内存,将改好的函数的ShellCode写入并执行。 [cpp] view plain copy ...
  • liujiayu2
  • liujiayu2
  • 2017-10-20 14:19
  • 126

使用C语言编写通用shellcode的程序

/*   使用C语言编写通用shellcode的程序   出处:internet   修改:Hume/冷雨飘心   测试:Win2K SP4 Local   */    #include  ...
  • TYJJXSJ
  • TYJJXSJ
  • 2015-01-29 18:11
  • 815

shellcode转换

#import js_shellcode=('%ud231%u30b2%u8b64%u8b12%u0c52%u528b%u8b1c%u0842%u728b%u8b20%u8012%u0c7e%u7533%u89f2%u03c7%u3c78%u578b%u0178%u8bc2%u207a%u...
  • qq_35519254
  • qq_35519254
  • 2016-10-28 15:53
  • 1106

3个月的SHELLCODE研究成果-一个最简单的Shellcode

坚持到底,永不放弃。我终于写了个小小的SHELLCODE啦。就拿这个星期来说,我日思夜想,为什么我总写不出可以正确执行的SHELLCODE呢,非常郁闷,也整天板着脸想问题,差点吓着小MM同事了。我本来ASSEMBLY基础不是很好,只懂得可怜的几个INSTRUCTIONS,写SHELLCODE时碰到了...
  • i_like_cpp
  • i_like_cpp
  • 2006-10-28 09:54
  • 2239
    个人资料
    • 访问:2220450次
    • 积分:29618
    • 等级:
    • 排名:第206名
    • 原创:785篇
    • 转载:395篇
    • 译文:0篇
    • 评论:245条
    我的技术博客
    最新评论