CTF 逆向中通常出现的加密算法包括 base64、TEA、AES、RC4、MD5 等。
base64:Base64 是一种基于 64 个可打印字符来表示二进制数据的表示方法。转换的时候,将 3 字节的数据,先后放入一个 24 位的缓冲区中,先来的字节占高位。数据不足 3 字节的话,于缓冲器中剩下的比特用 0 补足。每次取出 6 比特,按照其值选择ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/中的字符作为编码后的输出,直到全部输入数据转换完成。
通常而言 Base64 的识别特征为索引表,当我们能找到ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/这样索引表,再经过简单的分析基本就能判定是 Base64 编码。
tea:在密码学中,微型加密算法(Tiny Encryption Algorithm,TEA)是一种易于描述和执行的块密码,通常只需要很少的代码就可实现。
参考代码:
#include<stdint.h>voidencrypt(uint32_t*v,uint32_t*k){uint32_tv0=v[0],v1=v[1],sum=0,i;/* set up */uint32_tdelta=0x9e3779b9;/* a key schedule constant */uint32_tk0=k[0],k1=k[1],k2=k[2],k3=k[3];/* cache key */for(i=0;i<32;i++){/* basic cycle start */sum+=delta;v0+=((v1<<4)+k0)^(v1+sum)^((v1>>5)+k1);v1+=((v0<<4)+k2)^(v0+sum)^((v0>>5)+k3);}/* end cycle */v[0]=v0;v[1]=v1;}voiddecrypt(uint32_t*v,uint32_t*k){uint32_tv0=v[0],v1=v[1],sum=0xC6EF3720,i;/* set up */uint32_tdelta=0x9e3779b9;/* a key schedule constant */uint32_tk0=k[0],k1=k[1],k2=k[2],k3=k[3];/* cache key */for(i=0;i<32;i++){/* basic cycle start */v1-=((v0<<4)+k2)^(v0+sum)^((v0>>5)+k3);v0-=((v1<<4)+k0)^(v1+sum)^((v1>>5)+k1);sum-=delta;}/* end cycle */v[0]=v0;v[1]=v1;}
在 Tea 算法中其最主要的识别特征就是 拥有一个 image number :0x9e3779b9
RC4:在密码学中,RC4(来自 Rivest Cipher 4 的缩写)是一种流加密算法,密钥长度可变。它加解密使用相同的密钥,因此也属于对称加密算法。RC4 是有线等效加密(WEP)中采用的加密算法,也曾经是TLS可采用的算法之一。
md5:MD5 消息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个 128 位(16字节)的散列值(hash value),用于确保信息传输完整一致。其鲜明的特征是:
h0=0x67452301;h1=0xefcdab89;h2=0x98badcfe;h3=0x10325476;