1.ASCII编码:
(American Standard Code for Information Interchange·美国标准信息交换代码)是由美国国家标准学会(American National Standard Institute , ANSI )制定的。
被国际标准化组织( ISO)定为国际标准,称为ISO 646标准。
A、0~31及127(共33个)是控制字符或通信专用字符(其余为可显示字符)
其中48~57为0到9十个阿拉伯数字,65~90为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
数字的ASCII码 < 大写字母的ASCII码 < 小写字母的ASCII码
所谓奇偶校验,是指在代码传送过程中用来检验是否出现错误的一种方法,一般分奇校验和偶校验两种。
奇校验规定:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7添1;
偶校验规定:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7添1。
2.Base64/32/16编码:
base64、base32、base16可以分别编码转化8位字节为6位、5位、4位。16,32,64分别表示用多少个字符来编码。
Base64编码要求把3个8位字节转化为4个6位的字节,之后在6位的前面补两个0,形成8位一个字节的形式,6位2进制能表示的最大数是2的6次方是64,这也是为什么是64个字符(A-Z,a-z,0-9,+,/这64个编码字符,=号不属于编码字符,而是填充字符)的原因
Base64常用于在通常处理文本数据的场合,表示、传输、存储一些二进制数据。是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法。包括MIME的email,email via MIME,在XML中存储复杂数据。
Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。
2进制(binary): 01110011 00110001 00110011
6个分为一组(4组) 011100110011000100110011
然后才有后面的 011100 110011 000100 110011
科学计算器输入 00011100 00110011 00000100 00110011
base64就是用6位,2的6次幂就是64,所以就是Base64。同理Base32就是5位,Base16就是4位。
base32中就是用5个bit位表示8bit位的256个ascii字符。取其中的最小公约数,则8个base32字符表示出5个ascii字符。
base16也差不多, 4个base16字符表示出1个ascii字符。
1.字符“bhst”取ASCII码之后,对其转换成二进制得到“1100010,1101000,1110011,1110100,”共四个字节,28个bit的二进制串。注:因为base32是属于传输8bit字节代码的编码方式,所以这里对“bhst”字符串对应的二进制最高位加0变成每组8个bit。组成32个bit的二进制串。
2.以5个bit为一组对“bhst”字符串对应的二进制串进行切分。得到“01100,01001,10100,00111,00110,11101,00000”7个字节的“bhst”二进制串。注:每组的二进制串不足5个用0补充。
3.计算每组二进制串所对应的十进制,然后参考标准Base32编码表,找出所对应的编码字符,组合成密文。
1、对密文中的编码字符(对照标准Base32编码表)找出所对应的十进制编码值。分别为: 8 28 0 6 30 0 0。
2、把十进制的编码值转换成二进制,不足5个bit用0补充。得到:01000,11100,00000,00110,11110,00000,00000
3、组合每组的二进制串,并以8个bit为一组进行切分。得到:01000111,00000000,01101111,00000000,00000000
4、还原每组二进制串得到明文的ASCII码71 0 111 0 0,还原成字符为Go。
3、base16也差不多, 4个base16字符表示出1个ascii字符
3.shellcode编码
Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限。
shellcode编码:\x54\x68\x65,其中54、68、65为T、h、e的ASCII编码转换为二进制,再转换为16进制数。
源文本: The quick brown fox jumps over the lazy dog
#!shell\x54\x68\x65\x7f\x71\x75\x69\x63\x6b\x7f\x62\x72\x6f\x77\x6e\x7f\x66\x6f\x78\x7f\x6a\x75\x6d\x70\x73\x7f\x6f\x76\x65\x72\x7f\x74\x68\x65\x7f\x6c\x61\x7a\x79\x7f\x64\x6f\x67
https://blog.csdn.net/maotoula/article/details/18502679详解
shellcode没有被编码,如果shellcode中存在NULL、函数名也有可能被检测到,所以有必要对shellcode进行编码。
#!/usr/bin/env python
import os
s=''
data = bytes(open('d:\\1.txt','rb').read(1000))
for ch in data:
s+='\\'+hex(ord(ch)^0x34)[1:]
print len(s),s
_asm{ add eax,0x16 ;此偏移是解密代码长度 xor ecx,ecx decrypt: movsx bl,byte ptr[eax+ecx] xor bl,0x34mov [eax+ecx],bl inc ecx cmp bl,0x90 jne decrypt}
"\x83\xc0\x16\x33\xc9\x66\xf\xbe\x1c\x8\x80\xf3\x34\x88\x1c\x8\x41\x80\xfb\x90\x75\xef" "\xc8\x5c\x5e\x3e\xc\x2a\x5c\x57\xbd\xe5\x7b\x5c\x6\x40\xa5\x38\xbf\xc0\xb9\x4a\xc0\x7" "\xef\x83\x30\x1f\xd7\x52\x8f\x7\x6\x67\x5c\x41\x47\x51\x46\x60\x7\xe6\x50\xbf\x6e\x4" "\xbf\x7f\x38\xbf\x7d\x28\xbf\x3d\xbf\x5d\x3c\x99\x9\x5e\x3e\xc\x2a\x41\x31\xa1\xcb\x63" "\xcc\xa1\x54\xbf\x71\x8\xbf\x78\x31\x4c\x37\xf9\xbf\x6d\x14\x37\xe9\x7\xcb\x73\xbf\x0" "\x8f\x37\xc1\xad\x3b\x8a\x32\xe\xf0\x40\x3c\xf5\xfe\x33\x37\xe4\x72\xdf\xc5\xf\x60" "\x10\x28\x41\xd0\xbf\x6d\x10\x37\xe9\x52\xbf\x8\x4f\xbf\x6d\x28\x37\xe9\x37\x18\x8f" "\xa1\x6b\x9f\x63\x55\x9\x5e\x3e\xc\x2a\x41\x9d\x7\xef\x67\x5c\x43\x51\x47\x40\x5c\x52" "\x55\x5d\x58\xbf\xf0\x67\x64\x64\x67\xcb\x63\xc8\x67\xcb\x63\xcc\xa4\xa4";
_asm{ lea eax,shellcode push eax ret }return 0;
4.Quoted-printable编码
它是多用途互联网邮件扩展(MIME) 一种实现方式。有时候我们可以邮件头里面能够看到这样的编码;
#!shell =E6=95=8F=E6=8D=B7=E7=9A=84=E6=A3=95=E8=89=B2=E7=8B=90=E7=8B=B8=E8=B7=B3=E8 =BF=87=E4=BA=86=E6=87=92=E6=83=B0=E7=9A=84=E7=8B=97
编码解码 链接
5.XXencode编码:
XXencode将输入文本以每三个字节为单位进行编码。如果最后剩下的资料少于三个字节,不够的部份用零补齐。这三个字节共有24个Bit,以6bit为单位分为4个组,每个组以十进制来表示所出现的数值只会落在0到63之间。以所对应值的位置字符代替。它所选择的可打印字符是:+-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,一共64个字符。跟base64打印字符相比,就是UUencode多一个“-” 字符,少一个”/” 字符。
源文本: The quick brown fox jumps over the lazy dog
编码后: hJ4VZ653pOKBf647mPrRi64NjS0-eRKpkQm-jRaJm65FcNG-gMLdt64FjNkc+
编码解码 链接
6.UUencode编码:
UUencode是一种二进制到文字的编码,最早在unix邮件系统中使用,全称:Unix-to-Unix encoding,UUencode将输入文本以每三个字节为单位进行编码,如果最后剩下的资料少于三个字节,不够的部份用零补齐。三个字节共有24个Bit,以6-bit为单位分为4个组,每个组以十进制来表示所出现的字节的数值。这个数值只会落在0到63之间。然后将每个数加上32,所产生的结果刚好落在ASCII字符集中可打印字符(32-空白…95-底线)的范围之中。
源文本: The quick brown fox jumps over the lazy dog
编码后: M5&AE('%U:6-K(&)R;W=N(&9O>"!J=6UP<R!O=F5R('1H92!L87IY(&1O9PH*
编码解码 链接
7.URL编码:
url编码又叫百分号编码,是统一资源定位(URL)编码方式。URL地址(常说网址)规定了常用地数字,字母可以直接使用,另外一批作为特殊用户字符也可以直接用(/,:@等),剩下的其它所有字符必须通过%xx编码处理。 现在已经成为一种规范了,基本所有程序语言都有这种编码,如js:有encodeURI、encodeURIComponent,PHP有 urlencode、urldecode等。编码方法很简单,在该字节ascii码的的16进制字符前面加%. 如 空格字符,ascii码是32,对应16进制是'20',那么urlencode编码结果是:%20。
源文本: The quick brown fox jumps over the lazy dog
#!shell %54%68%65%20%71%75%69%63%6b%20%62%72%6f%77%6e%20%66%6f%78%20%6a%75%6d%70%73%20%6f%76%65%72%20%74%68%65%20%6c%61%7a%79%20%64%6f%67
编码解码 链接
8.Unicode编码:
\U+ [Hex]: \U+0054\U+0068\U+0065
编码解码 链接
9.Escape/Unescape编码
Escape/Unescape加密解码/编码解码,又叫%u编码,采用UTF-16BE模式, Escape编码/加密,就是字符对应UTF-16 16进制表示方式前面加%u。
Unescape解码/解密,就是去掉"%u"后,将16进制字符还原后,由utf-16转码到自己目标字符。如:字符“中”,UTF-16BE是:“6d93”,因此Escape是“%u6d93”。
10.HTML实体编码:
经常我们会使用到一些特殊字符在WEB页面上的引用方式,比如空格我们通常使用“ ”,其实所有的字符都具有自己的HTML实体编码对应字符;
完整编码手册 参考
11.敲击码
敲击码(Tap code)是一种以非常简单的方式对文本信息进行编码的方法。因该编码对信息通过使用一系列的点击声音来编码而命名,敲击码是基于5×5方格波利比奥斯方阵来实现的,不同点是是用K字母被整合到C中。
#!shell 1 2 3 4 5 1 A B C/K D E 2 F G H I J 3 L M N O P 4 Q R S T U 5 V W X Y Z
12.莫尔斯电码:
摩尔斯电码(Morse Code)是由美国人萨缪尔·摩尔斯在1836年发明的一种时通时断的且通过不同的排列顺序来表达不同英文字母、数字和标点符号的信号代码,摩尔斯电码主要由以下5种它的代码组成:
#!shellA .- N -. . .-.-.- + .-.-. 1 .----B -... O --- , --..-- _ ..--.- 2 ..---C -.-. P .--. : ---... $ ...-..- 3 ...-D -.. Q --.- " .-..-. & .-... 4 ....-E . R .-. ' .----. / -..-. 5 .....F ..-. S ... ! -.-.-- 6 -....G --. T - ? ..--.. 7 --...H .... U ..- @ .--.-. 8 ---..I .. V ...- - -....- 9 ----.J .--- W .-- ; -.-.-. 0 -----K -.- X -..- ( -.--.L .-.. Y -.-- ) -.--.-M -- Z --.. = -...-
源文本: THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
#!shell- .... . / --.- ..- .. -.-. -.- / -... .-. --- .-- -. / ..-. --- -..- / .--- ..- -- .--. ... / --- ...- . .-. / - .... . / .-.. .- --.. -.-- / -.. --- --.
在线编码解码 传送门
摩尔斯电码除了能对字母数字编码以外还对一些标点符号,非英语字符进行了编码,而且还有一些特定意义的组合称为特殊符号,比如 ·-·-·-·-·- 表达的意思是调用信号,表示“我有消息发送”。
13.培根密码
14.MD5加密
分为:16位和32位的,由 0~9,A~F 组成,0x表示的十六进制数。
15.当铺密码
eg:口 —— 0 ; 中 —— 2 ;大 —— 5 ;井 —— 8 :有几笔出头,就代表几。
17.栅栏密码
23.Hex:
它是计算机中数据的一种表示方法,由0-9,A-F组 成,字母不区分大小写。
1.压缩文件伪加密:(改了文件的二进制中某个数,出现伪加密)
伪加密:文件二进制中, 两个数,第一个是偶数,第二个是奇数;
http://www.ab126.com/goju/1711.html
http://news.mydrivers.com/1/190/190926.htm
Ook编码:http://tool.bugku.com/brainfuck/
16进制转ASCII码http://www.ab126.com/goju/1711.html
莫斯密码http://www.zhongguosou.com/zonghe/moErSiCodeConverter.aspx
社会主义编码https://sym233.github.io/core-values-encoder/
rabbit编码(兔子编码)https://www.sojson.com/encrypt_rabbit.html