2019_西湖论剑_预选赛

Base58的码表:123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ

9位数字以及去掉了英文字母容易造成混淆的字母(0:数字零,O:大写O,I:大写i,l:小写L)所组成

编码流程:

① 将所要编码的字符串转为ASCII码(ASCII码实际上也就是256进制的数)

例如将”ABD”转为 65 66 68

② 然后再将256进制转为10进制数,65256256+66*256+68=4276804

③ 最后将十进制数转为58进制,即模58转化,最后得到21 53 20 0

④ 根据21 53 20 0查表中所对应的字符得到base58编码的密文:nVm1

解码流程与其编码流程相反

总结,编码就是将所要加密的字符先转256进制,再转10进制再转为58进制,最后查码表;解码就是查码表得到58进制,再转10进制最后再转256进制最后通过ascii码表转为字符。

查壳,无壳,64位文件。

拖入ida查看主函数

经过分析,sub_400D00函数内容大致意思是输入字符串

查看sub_400700函数

根据意思,s应该是经过某种加密操作后的字符串,后面的D9 cS9N 等等应该就是密文了,密文应该是D9cS9N9iHjMLTdA8YSMRMp(仔细看s后面加了数字,如s+2),通过分析可以知道s被v11所赋值的,所以主要看v11,这里的过程还被加入了其他变量的操作来混淆,主要看有关v11的加密操作过程即可

根据上面base58的原理,所以这里的算法为base58的加密过程

将字符串D9cS9N9iHjMLTdA8YSMRMp进行解密即可

得到flag{base58_is_boring}