CTF中的逆向题,大多是考察对代码的读写能力以及加密混淆算法的识别能力。能够在一大堆代码里快速识别出经典的加密混淆算法,可以大大提高我们的解题效率
计划从本期开始解析CTF逆向中的常见算法,包括算法的原理、代码、代码特征以及常见应用,先从最常见的base64开始
0x1 base64的原理
对于一串字符,算法要求每三个字符为一组,生成四个字符。如果最后一组字符数不足三个,则用等号补充。具体转换规则如下表所示,三个字符共24位,每6位作为一组计算索引值,再结合base64表查找相应的索引,完成三字符到四字符的转换
base64表如下:
如下表所示,字符不足三个时,最后一个字符低位补0,计算索引,再添加等号
0x2 base64 编程实现:
char *__fastcall base64_encode(char *a1){
int v1; // eax int v2; // eax int v3; // eax int v4; // eax int v5; // eax int v6; // eax int v8; // [rsp+1Ch] [rbp-54h] int v9; // [rsp+20h] [rbp-50h] int v10; // [rsp+24h] [rbp-4Ch] int v11; // [rsp+24h] [rbp-4Ch] int v12; //