CTF中常见的编码,代码混淆及加、解密

其实刚开始我对编码与加密的概念区分的不是很是清楚,一度觉得加密就是对信息进行编码,这是一种错误的观点。编码是将数据信息转化成一种固定格式的编码信息,而加密是为了保证信息传输的安全性,二者仍是有区别的。接下来就给你们讲讲编码与加密、解密。
一,编码
编码是为了方便不一样系统间的信息传输,将数据转化成固定格式的信息,经过编码能够获得原始信息。常见的编码咱们都已经很熟悉了,好比ASCII编码、URL编码、HTML实体编码以及Base编码等。
1,ASCII编码
ASCII编码大体能够分做三部分组成:
第一部分是:ASCII非打印控制字符(参详ASCII码表中0-31);
第二部分是:ASCII打印字符,也就是CTF中经常使用到的转换;
第三部分是:扩展ASCII打印字符(详见 ASCII码表 二)。
例:easy—101 97 115 121php

(ASCII表——来自百度百科)html

(ASCII码表 二)
2,URL编码
又叫百分号编码,是统一资源定位编码方式。URL 地址(常说网址) 规定了经常使用地数字,字母能够直接使用,另一批做为特殊用户字符也能够直接用(/,:@等),剩下的其它全部字符必须经过%xx 编码处理。编码方法很简单,在该字节 ascii 码的的 16 进制字符前面加%. 如空格字符,ascii 码是 32,对应16 进制是’20′,那么 urlencode 编码结果是:%20。
例:https://baike.baidu.com/item/ABC
URL转码: %68%74%74%70%73%3A%2F%2F%62%61%69%6B%65%2E%62%61%69%64%75%2E%63%6F%6D%2F%69%74%65%6D%2F%41%42%43
3,HTML实体编码
一些字符在 HTML 中是预留的,拥有特殊的含义,好比小于号‘<’用于定义 HTML 标签的开始。若是咱们但愿浏览器正确地显示这些字符,咱们必须在 HTML 源码中插入字符实体。用一个编号写入HTML代码中来代替一个字符,在使用浏览器访问网页时会将这个编号解析还原为字符以供阅读。算法

(来自http://www.w3school.com.cn/ht...
例:easy——easy
4,Base编码
Base家族主要有Base1六、Base3二、Base64。Base64由大小写字母和数字,+/组成(=号用做填充字符),Base32则是只有大写字母和234567。其中Base64/32是网络上最多见的用于传输8Bit字节代码的编码方式之一。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的惟一标识符(通常为128-bit的UUID)编码为一个字符串,用做HTTP表单和HTTP GET URL中的参数。Base64编码保证了二进制数据的安全。编程

例:Base64:easy—ZWFzeQ==
(Base64的代码实现:https://baike.baidu.com/item/...
五、Unicode编码
Unicode编码有如下四种编码方式:
源文本:The
[Hex]:The
[Decimal]:The
U [Hex]:U0054U0068U0065
U+ [Hex]:U+0054U+0068U+0065
六、莫尔斯电码(Morse Code)
摩尔斯电码(又译为摩斯密码,Morse code)是一种时通时断的信号代码,经过不一样的排列顺序来表达不一样的英文字母、数字和标点符号。是早期的数字化通讯形式,可是它不一样于现代只使用零和一两种状态的二进制代码,它的代码包括五种:点、划、点和划之间的停顿、每一个字符之间短的停顿、每一个词之间中等的停顿以及句子之间长的停顿。
除此以外,经常使用的编码方式还有敲击码(Tap code)等。编码在电子计算机、电视、遥控和通信等方面普遍使用。编码是信息从一种形式或格式转换为另外一种形式的过程;解码,是编码的逆过程。
2、常见的代码混淆
代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,可是难于阅读和理解的形式的行为。代码混淆能够用于程序源代码,也能够用于程序编译而成的中间代码。执行代码混淆的程序被称做代码混淆器。目前已经存在许多种功能各异的代码混淆器。经常使用的代码混淆有jsfuck、brainfuck,Vbscript.encode加密等
一、Jsfuck
jsfuck源于一门编程语言brainfuck,其主要的思想就是只使用8种特定的符号来编写代码。而jsfuck也是沿用了这个思想,它可让你只用 6 个字符[ ]( ) ! + 来编写 JavaScript 程序。此外,JSFuck可用于绕过恶意代码检测,且能够被用于跨站脚本攻击。由于缺少原生JavaScript应有的特征,相似JSFuck的JavaScript混淆技术可帮助恶意代码绕过入侵防护系统或内容过滤器。现实中,由于JSFuck中缺乏字母数字字符,且eBay中的内容过滤器曾存在缺陷,使得卖家曾经能够在他们的eBay拍卖页面中嵌入任意JSFuck脚本
例:http://utf-8.jp/public/jsfuck...
二、Brainfuck
Brainfuck是一种极小化的计算机语言,目标是创建一种简单的、能够用最小的编译器来实现的、符合图灵彻底思想的编程语言。BrainFuck 语言只有八种符号,全部的操做都由这八种符号( > < + – . , [ ] )的组合来完成。
例:hello world
+++++ +++++ [->++ +++++ +++<] >++++ .—. +++++ ++..+ ++.
<+ +++++ ++[->----- ---<] >—- —– —– -.<++ +++++ ++[-> ++
+++ ++++< ]>+++ +++.—— –.++ +.— —.- —– –.<
在线解密工具: https://www.splitbrain.org/se...
三、Vbscript.encode加密
VBScript.encode是针对asp代码进行的一种加密混淆操做。
样题: http://ctf5.shiyanbar.com:8080/aspencode/
在线工具:http://adophper.com/encode.html
四、Jjencode
jjencode 将 JS 代码转换成只有符号的字符串,相似于 rrencode,介绍的,aaencode 能够将 JS 代码转换成经常使用的网络表情,也就是咱们说的颜文字 js 加密。
例: http://utf-8.jp/public/aaenco...
3、加密
密码学是研究编制密码和破译密码的技术科学。研究密码变化的客观规律,应用于编制密码以保守通讯秘密的,称为编码学;应用于破译密码以获取通讯情报的,称为破译学,总称密码学。主要分为古典加密算法和现代密码学。
1,古典加密算法
古典密码算法曾经被普遍应用,大都比较简单,使用手工和机械操做来实现加密和解密。它的主要对象是文字信息,利用密码算法实现文字信息的加密和解密。古典密码编码方法归根结底主要有两种,即置换和代换。比较经典的有凯撒密码、栅栏密码、培根密码、仿射密码和维吉尼亚密码等。
(1)凯撒密码
是一种最简单且最广为人知的加密技术。它是一种替换加密的技术,明文中的全部字母按照按顺序进行 n 个字符错位转换后被替换成密文。
例:ABCDE(偏移量为3)—DEFGH
(2)栅栏密码
把要加密的明文分红N个一组,而后把每组的第1个字连起来,造成一段无规律的话即为栅栏密码。
例:明 文:The quick brown fox jumps over the lazy dog
去空格:Thequickbrownfoxjumpsoverthelazydog
分 组:Th eq ui ck br ow nf ox ju mp so ve rt he la zy do g
密 文:Teucbonojmsvrhlzdghqikrwfxupoeteayo
(3)培根密码
又名倍康尼密码(英语:Bacon’s cipher)是由法兰西斯·培根发明的一种隐写术。是一种替换密码,每一个明文字母被一个由5字符组成的序列替换。最初的加密方式就是由‘A’和’B'组成序列替换明文浏览器

例:明文:THE DOG
密文:baabb aabbb aabaa aaabb abbba aabba
(4)仿射密码
仿射密码(Affine Cipher)是一种单表代换密码,字母表中的每一个字母相应的值使用一个简单的数学函数映射到对应的数值,再把对应数值转换成字母。每个字母都是经过函数(ax + b)mod m加密,其中B是位移量,为了保证仿射密码的可逆性,a和m须要知足gcd(a , m)=1,通常m为设置为26。安全

(5)维吉尼亚密码
维吉尼亚密码(又译维热纳尔密码)是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。以其简单易用而著称,同时初学者一般难以破解,于是又被称为“不可破译的密码”。这也让不少人使用维吉尼亚密码来加密的目的就是为了将其破解。网络

例:明文:THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG
密钥(循环使用,密钥越长相对破解难度越大):CULTURE
加密过程:若是第一行为明文字母,第一列为密钥字母,那么明文字母’T'列和密钥字母’C'行的交点就是密文字母’V',以此类推。
密文:VBP JOZGM VCHQE JQR UNGGW QPPK NYI NUKR XFK
解密网站:https://www.qqxiuzi.cn/bianma...
2,现代密码学
现代密码学研究信息从发端到收端的安全传输和安全存储,核心是密码编码学和密码分析学。1949年香农发表《保密系统的通讯理论》标志着现代密码学的真正开始(第一次质的飞跃)。1976年,Diffie和Hellman发表《密码学的新方向》,标志着公钥密码体制的诞生(第二次质的飞跃)。
现代密码学根据功能分为三类:
①、对称加密算法:DES,AES,RC4等。
②、公钥密码算法:RSA等
③、HASH函数:md5,sha1
(1),对称加密算法
在对称加密算法中,数据发信方将原始数据和加密密钥一块儿通过特殊加密算法处理后,使其变成复杂的加密密文发送出去,收信方须要使用加密用过的密钥及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在大多数的对称算法中,加密密钥和解密密钥是相同的,因此也称这种加密算法为秘密密钥算法或单密钥算法。它要求发送方和接收方在安全通讯以前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人均可以对他们发送或接收的消息解密,因此密钥的保密性对通讯的安全性相当重要。特色是算法公开、计算量小、加密速度快、加密效率高。
对称加密的分类:流加密与分组加密数据结构

  • 流加密每次加密数据流的一位(bit)或者一个字节(byte)。如RC4。
  • 分组加密(一般也成为块加密)是将明文进行分组,加密算法对每一个分组分别加密,一般明文分组和加密后获得的密文分组等长。典型的分组大小是64bit或128bit。如DES,3DES,AES。

(2),HASH算法
可直接音译为“哈希”,通常翻译为“散列”把任意长度的输入(又叫作预映射, pre-image),经过散列算法变换成固定长度的输出,该输出就是散列值。它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的作法。顾名思义,该数据结构能够理解为一个线性表,可是其中的元素不是紧密排列的,而是可能存在空隙。
常见HASH算法主要有MD五、SHA-1等。主要用于文件校验,数字签名,鉴权协议。另外这里还有一篇利用Hash碰撞而产生DOS攻击的案例,有兴趣的能够阅读一下:http://www.cnblogs.com/rush/a...
(其实把hash算法当成是一种加密算法,这是不许确的,咱们知道加密老是相对于解密而言的,没有解密何谈加密呢,HASH的设计以没法解为目的的。而且若是咱们不附加一个随机的salt值,HASH口令是很容易被字典攻击入侵的)
(3),RSA算法
RSA加密算法是一种非对称加密算法。在公开密钥加密和电子商业中RSA被普遍使用,是现今使用最普遍的公钥密码算法。和其它加密过程同样,对RSA来讲分配公钥的过程是很是重要的。分配公钥的过程必须可以抵挡中间人攻击。假设Eve交给Bob一个公钥,并使Bob相信这是Alice的公钥,而且她能够截下Alice和Bob之间的信息传递,那么她能够将她本身的公钥传给Bob,Bob觉得这是Alice的公钥。Eve能够将全部Bob传递给Alice的消息截下来,将这个消息用她本身的密钥解密,读这个消息,而后将这个消息再用Alice的公钥加密后传给Alice。理论上Alice和Bob都不会发现Eve在偷听他们的消息。今天人们通常用可靠的第三方机构签发证书来防止这样的攻击。根据密钥的使用方法,能够将密码分为对称密码和公钥密码。
对称密码:加密和解密使用同一种密钥的方式
公钥密码:加密和解密使用不一样的密码的方式,所以公钥密码一般也称为非对称密码。
RSA的加密过程可使用一个通式来表达
密文=明文^E mod N
也就是说RSA加密是对明文的E次方后除以N后求余数的过程。
从通式可知,只要知道E和N任何人均可以进行RSA加密了,因此说E、N是RSA加密的密钥,即E和N的组合就是公钥,用(E,N)来表示公钥。
RSA的解密一样可使用一个通式来表达
明文=密文^D mod N
即对密文进行D次方后除以N的余数就是明文,因此D和N的组合就是私钥,私钥=(D,N)编程语言

RSA常见攻击方式
①、利用rsa加密流程求参数
②、分解N求私钥
• 若是n的大小小于256bit,那么咱们经过本地工具便可爆破成功。
• 若是n在768bit或者更高,能够尝试使用一些在线的n分解网站,这些网站会存储一些已经分解成功的n,好比:http://factordb.com
• 若是有多个n,能够尝试用求公约数的方式来求解两个N共同的素因子p,进而求解q
• 在p,q的取值差别过大,或者p,q的取值过于相近的时候,Format方法与Pollard rho方法均可以很快将n分解成功。此类分解方法有一个开源项目yafu将其自动化实现了,不论n的大小,只要p和q存在相差过大或者过近时,均可以经过yafu很快地分解成功。
③、共模攻击
若是在RSA的使用中使用了相同的模n对相同的明文m进行了加密,那么就能够在不分解n的状况下还原出明文m的值。
http://www.bystudent.com/?p=236 ide

密码学在信息技术高速发展的当代具备很重要的意义,发展范围广且深。本文在写做过程当中参考了许多资料,在此一并表示感谢。同时对于文章中涉及的知识只是粗略地简要介绍,若有不当之处还请指正。网上对密码学还有不少的资料,你们有兴趣的能够看一下。此外,文章中提到的各类解码及解密方式均可在这个网站中找到相应的工具(http://ctf.ssleye.com/

如下列出对于密码学学习颇有帮助的参考资料
密码学 – 维基百科,自由的百科全书
https://zh.wikipedia.org/zh-m...
CTF中那些脑洞大开的编码和加密 – DaBan – 博客园
https://www.cnblogs.com/daban...
代码混淆的重要性
https://www.jdon.com/50072
密码学起源——由「凯撒加密」到「一次一密」
https://baijiahao.baidu.com/s...
《现代密码学》 – WittPeng – 博客园
https://www.cnblogs.com/WittP...
http://archive.keyllo.com/L-...—原理与协议.pdf
http://archive.keyllo.com/L-%...

80%94%E5%8E%9F%E7%90%86%E4%B8%8E%E5%8D%8F%E8%AE%AE.pdf

做者:CanMengBlog
来源:CSDN
原文:https://blog.csdn.net/weixin_... 版权声明:本文为博主原创文章,转载请附上博文连接!

相关文章
相关标签/搜索