base64:
base64是一种编解码技术,编码时,把原数据以ascii码形式转换为二进制顺序排列,然后按照6个bit为一个间隔重新划分,这些重新划分出来的数据有对应的base64编码表,将它们按照编码表翻译后就得到了base64编码形式的数据了。
如果原数据不能正好划分,就在待转换数据结尾补0。
编码对照表:
例题1:
做完发现,这个是buuctf的reverse3(
无壳,而且是32位程序。
用IDApro打开,F5转成c语言,一眼看到下面的right flag:
先找到Str2,是这样一串数据:
再往上看,sub_411375把输入存到Str里,第27行又把Str存到v2里了。
最后,Dest经过如下转换,就进行了开头第一眼看到的与str2比较的操作。
既然流程搞清楚了,直接反着来就行,把Str2里的数据转换成最初的数据,
然后经过base64解码得到答案:
flag{i_l0ve_you}
例题2:
查壳发现无壳,64位。
先看一下字符串:
通过“The flag is right!!!”找到了主函数:
本来对c++就半懂不懂的,这一大串属实给我看迷糊了,猪脑过载了半天。
大概过程就是输入的字符串经过运算最后存入result,和rightFight中的内容进行比较。
中间唯一和result有关的就是base64Encode函数,打开看一看:
点开unk_489084看一下:
看到了这段字符串,
所以这题是把编码表改变了,
用这段字符串替换原编码表得出结果:
flag{Special_Base64_By_Lich}