学习IDA的使用,寻找flag之旅
- first blood_reverse_1
拉入查壳工具可以看到64位,拖入IDA
从字符串入手,找到形式神似flag的一串字符,双击进入汇编页面
找到该字符串地址,双击进入包含它的函数
F5反汇编,查看伪代码
即可得到flag为{hello world}
- reverse_2
查壳发现是64位,拖入IDA,找到main函数,反汇编得到如下伪代码
flag中有几个字符会被替换形成正确的flag,然而,,,空悲切!
- reverse_3
32位未加壳
发现main函数,双击进入,反汇编
flag肯定就在这,奈何C和python不扎实,空悲切!
- Mysterious
32位无壳,这个拖入IDA后,既没main函数,在字符串里也找不到与flag相关的语句,就没什么头绪了
base64编解码原理
- base64是什么?
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法。Base64编码是从二进制到字符的过程,可用于在HTTP环境下传递较长的标识信息。采用Base64编码具有不可读性,需要解码后才能阅读。 - base64编码原理
(1)将给定的字符串按相应的转码表转换成对应的字符编码
(2)将获得该字符编码转换成二进制码
(3)对获得的二进制码进行分组操作
第一步:由高到低每3个字节(8位二进制)分为一组,一共24个二进制位
第二步:将这个24个二进制位分成4组,每个组有6个二进制位
第三步:在每个组前面加两个0,这样每个组就又变成了8位,即每个组一个字节,4个组就是4个字节了
第四步:在Base64的转码表找到每个字节对应的符号,这个符号就是Base64的编码值
字节不足3位时,处理方法如下:
(a)两个字节时,将这二个字节的一共16个二进制位按照上面的规则,转成三组,最后一组除了前面加两个0以外,后面也要加两个0。这样得到一个三位的Base64编码值,再在末尾补上一个“=”号。
(b)一个字节时:将这一个字节的8个二进制位,按照上面的规则转成两组,最后一组除了前面加二个0以外,后面再加4个0。这样得到一个二位的Base64编码值,再在末尾补上两个“=”号。 - base64解码原理
解码原理就是编码原理的逆过程
(1)将给定的字符串按Base64的转码表转换成对应的字符编码,如果
(2)将获得该字符编码转换成二进制码
(3)对获得的二进制码进行分组操作
第一步:由高到低位每4个字节分为一组,一共32个字节
第二步:将这个32个二进制位分成4组,每个组有8个二进制位
第三步:删去每个组前面的两个0,这样每个组就变成了6位,合并之后是24个二进制位,分成三个组,即每个组一个字节,形成3个字节
第四步:在相应的转码表找到每个字节对应的符号,这个符号就是未编码的值
字节不足4位,即base64编码值末尾含“=”号时,处理方法如下:
(a)字节为3位时,将24个二进制位按上面的规则,分成3组,前两组删去每个组前面的两个0,最后一组除删去前两个0外,同时删去末尾两个0,合并之后再分成两组,每组一个字节,形成两个字节
(b)字节为2位时,将16个二进制位按上面的规则,分成2组,第一组删去前面的两个0,第二组除删去前两个0外,同时删去末尾4个0,合并之后形成一个字节 - python实现base64编码
def base(string)