首页
社区
课程
招聘
[原创][shellcode框架(二)] 完善shellcode框架
发表于: 2017-3-27 09:37 4765

[原创][shellcode框架(二)] 完善shellcode框架

2017-3-27 09:37
4765

    上篇《[shellcode框架(一)] 认识shellcode,部署shellcode开放框架》我已经介绍了如何去部署shellcode框架。

    这篇文章带领大家完善shellcode的框架。

    一. 部署gethash.c工程

   1. 新建工程,选择win32->win32 console application工程;名字gethash

    2. apploction settings设置面板处,选择empty project

    3. 将gethash.c放入工程目录下,并加入gethash工程

    4. 选中gethash.c属性,设置 c/c++ -> Precompilde Headers -> Precompilded Header为 Not Using Precompiled Headers

    5. 编译

    二. 部署str2intarr.c工程

   1. 新建工程,选择win32->win32 console application工程;名字str2intarr.c

    2. apploction settings设置面板处,选择empty project

    3. 将str2intarr.c放入工程目录下,并加入str2intarr工程

    4. 选中str2intarr.c属性,设置 c/c++ -> Precompilde Headers -> Precompilded Header为 Not Using Precompiled Headers

    5. 编译



    三. 修改shellcode.c工程使之可以dump二进制shellcode文件


    

void DumpShellcode2File(char* szFileName,BYTE* start,int size)
{
	FILE* file ;
	file = fopen(szFileName,"wb+");
	fwrite(start,1,size,file);
	fclose(file);
}
void main(void)
{
    DWORD ShellCodeSize;
    ShellCodeSize = (DWORD)EndSign - (DWORD)ShellCode;
    ShellCodeToHex ( (BYTE *)ShellCode, ShellCodeSize, stdout );
    DumpShellcode2File("c:\\temp\\c.sc",(BYTE*)ShellCode,ShellCodeSize);
    getchar();
    ShellCode();
	
}

     四. 测试shellcode工具

  为了便于测试验证dump生成的shellcode是否正确,开发了这个小工具,代码如下

void main()
{
        FILE* file = 0;
	int iRead = 0;
	HANDLE hFile =CreateFile(argc==2 ? argv[1]:"c:\\temp\\c.sc",GENERIC_WRITE|GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
	if (argc==2)
	{
		printf("%s \r\n",argv[1]);
	}
	fprintf(stdout,"test shellcode ........... \n");
	if (hFile != INVALID_HANDLE_VALUE)
	{
		DWORD dwFileSizeHigh = 0;
		DWORD dwFileSizeLow = GetFileSize(hFile,&dwFileSizeHigh);
		fprintf(stdout,"file size is 0x%x \n",dwFileSizeLow);
		BYTE* lpMem = (BYTE*)VirtualAlloc(NULL,dwFileSizeLow+4,MEM_COMMIT|MEM_RESERVE,PAGE_EXECUTE_READWRITE);
		ZeroMemory(lpMem,dwFileSizeLow+4);
		fprintf(stdout,"Memeroy is 0x%X \n",lpMem);
		if (argc == 2)
		{
			getchar();
		}
		ReadFile(hFile,lpMem,dwFileSizeLow,&dwFileSizeHigh,NULL);
		printf("should read %d ,readed %d byte \n",dwFileSizeLow,dwFileSizeHigh);
		CloseHandle(hFile);
		//getchar();
		_asm{
			call lpMem
		}
		
	}else
	{
		fprintf(stdout,"open file error [0x%x] \n",GetLastError());
	}
}

就是将dump的二进制sheLLcode文件读入可读可写可执行的内存中去,并call这块内存,来执行shellcode。


我这里将两个工具工程做了合并,做了个gui程序便于使用。目前还有很多不足,有意见大家提出,我就改动。这里不开放代码的问题是我用了BCG的mfcUI库,BCG库还学安装怕大家麻烦。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 465
活跃值: (667)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
2
???
2017-3-27 10:29
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
3
ssarg ???
不小i多按了几次空格就提交了
2017-3-27 10:57
0
雪    币: 990
活跃值: (842)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
刚看完lz的第一篇文章、
2017-3-27 13:27
0
雪    币: 69
活跃值: (270)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
msf
5
mihacker 刚看完lz的第一篇文章、
有什么看不明白的地方,我再稍加写的通俗点
2017-3-27 13:28
0
游客
登录 | 注册 方可回帖
返回
//