本帖最后由 Abuei 于 2020-7-21 20:00 编辑
题目链接:https://www.xuenixiang.com/ctfexercise-competition-124.html
首先科普什么是base58 Base58的码表:123456789abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ 9位数字以及去掉了英文字母容易造成混淆的字母(0:数字零,O:大写O,I:大写i,l:小写L)所组成 编码流程: ① 将所要编码的字符串转为ASCII码(ASCII码实际上也就是256进制的数) 例如将”ABD”转为 65 66 68 ② 然后再将256进制转为10进制数,65*256*256+66*256+68=4276804 ③ 最后将十进制数转为58进制,即模58转化,最后得到21 53 20 0 ④ 根据21 53 20 0查表中所对应的字符得到base58编码的密文:nVm1 解码流程与其编码流程相反 总结,编码就是将所要加密的字符先转256进制,再转10进制再转为58进制,最后查码表;解码就是查码表得到58进制,再转10进制最后再转256进制最后通过ascii码表转为字符。
首先查壳,发现没有加壳
西湖论剑预选赛_2019 _Reverse_Testre
拖入到IDA静态分析,来到主函数
西湖论剑预选赛_2019 _Reverse_Testre
经过分析,第一个箭头所指向的函数内容大致意思是输入字符串 来到第二个箭头所指向的函数
西湖论剑预选赛_2019 _Reverse_Testre
根据意思,s应该是经过某种加密操作后的字符串,后面的D9 cS9N 等等应该就是密文了,密文应该是D9cS9N9iHjMLTdA8YSMRMp(仔细看s后面加了数字,如s+2),通过分析可以知道s被v11所赋值的,所以主要看v11,这里的过程还被加入了其他变量的操作来混淆,主要看有关v11的加密操作过程即可
西湖论剑预选赛_2019 _Reverse_Testre
(这里引用别人的图)
根据上面base58的原理,所以这里的算法为base58的加密过程 将字符串D9cS9N9iHjMLTdA8YSMRMp进行解密即可 得到flag{base58_is_boring}
西湖论剑预选赛_2019 _Reverse_Testre
虚心求教,对于静态分析的过程也不是很明白,毕竟加了好多混淆的代码。
|