Rot加密and逆序函数(废话版)

[弱口令安全实验室2022招新赛]EasyBase

考点一览

Base64、rot18、逆序函数

Base家族:

Base64:大写字母(A-Z),小写字母(a-z),数字(0-9)以及+/;

Base32:只有大写字母(A-Z)和数字234567;

Base16:是16进制,范围是数字(0-9),字母(ABCDEF);

Rot家族:

ROT5:只对数字进行编码,用当前数字往前数的第5个数字替换当前数字。

ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母。

ROT18:将ROT5和ROT13组合在一起。

逆序函数

strrev()—头文件为“string.h”

认真解题

拿到这个easybase,就知道那肯定有base哇!base多少呢?我也不知道。然后就是固定操作查壳:无壳 64bit
习惯性F5。哦莫!看到了“the 18 palm attacks to defeat dragons!”这是“降龙十八掌”(疯狂暗示,可惜我没懂)。
后面就是一堆汇编语言,看不懂怎么办?(看不懂就点击左上的叉叉[狗头])还能咋办,先看看字符串吧[shift+F12]
看见了这个东东:“=DzMuO8MmgaomuGA9Rmpj5lAkAwZgxQplNGYhOwAi6lAmywZlqGZ7LQB7pGs”
(有点眼熟,不确定,再看一眼,这个‘=’!好像反过来的base呀,结合标题,那就是base啦)
我们再往下看:
“ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/”(我们知道这是base64呀)
当我们对“=DzMu[Tab补全]”交叉引用[control+X]再反汇编[F5],可以看见一堆汇编语言。
显然,我看不懂汇编语言,但我发现了一个特别的函数:
file
度娘一下:这是头文件“string.h”下的库函数‘strrev’,作用是将字符串逆序。它在154行和204行分别出现了一次,这意味逆序很有可能要进行两次。
首先,“=DzMu[Tab补全]”肯定是要逆一次滴,逆序代码如下:

`int main ()
{
    char a[10000];
	gets(a);
	strrev(a);
	puts(a);
	return 0;
}`

可以得到:“sGp7BQL7ZGqlZwymAl6iAwOhYGNlpQxgZwAkAl5jpmR9AGumoagmM8OuMzD=”
把它丢到‘随波逐流’进行解码:
file
普通的人可以发现解码结果和原来一样,聪明的人可以通过上面暗示的‘降龙十八掌’联想到是不是rot18的解码结果[可惜我不是聪明的人呜呜呜呜]。不过山人自有妙计!
首先,看到它说的解码结果和原密码一模一样,我emo了,只能回去重新看代码了(学长提示:ida中很多干扰代码,不是所有代码都有用的!)
根据我的不多的经验之谈,‘Str1’一般都是有东西滴,看见了一个这个东东:
file
然后这个‘sub_140001300’可以点开,就点开看看:
omg!很乱不能理解!但是V13是被V5复制来的,所以进去找V13,对应到这个三个地方:
file
file
file
由这三个V13可以知道分别是对0-9、A-Z、a-z有对应的转换,因此此处为rot18!
知道是rot18之后,再把我们前面逆序过的“sGp7[Tab补全]”再带入‘随波逐流’,看到它的rot18解码:
“fTc2ODY2MTdyMjlzNy1vNjBuLTAycDktMjNxNy0wczE4NThzbntzZ3BhZmQ=”
对“fTc2[Tab补全]”再来解密一次:
file
得到解密结果:
“}7686617r29s7-o60n-02p9-23q7-0s1858sn{sgpafd”
这一看就知道它又倒过来了,而且前面提到了要逆序第二次。
结果为:
“dfapgs{ns8581s0-7q32-9p20-n06o-7s92r7166867}”
发现这个东东,它的开头不是我们需要的‘qsnctf’,所以我们再次rot18解密,得到:
qsnctf{af3036f5-2d87-4c75-a51b-2f47e2611312}
这就是最后答案。
综上所述:我们先进行逆序,再rot18,再rot18,再base64,再逆序,再rot18.

问答环节

Q1:做题需要看懂全部代码吗?
A1:不需要哇!找到关键函数就行啦~

预告一下

二叉树真的要来啦~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值