这里是backdoor的逆天解,在群主大人的解析里也有提到,这个代码是对FLAG的所有字符构建了一个置换映射,只需还原出这个置换表即可。但是,如果我们不会用Pytorch,或者电脑安装不了Pytorch,该怎么做这个题目呢?很简单,我们只需要把这个置换表猜出来就好了。(doge)
我们可以看到,pred_flag = '0kRs34Rc2lta!a!!!aggg}t_BaUDyBs!yBVyCBfBMCBhRYVHtt{{{{gu',也就是flag里面是有
!0234BCDHMRUVY_acfghklstuy}{
这28种字符的。接下来我们开始猜测这个置换表:
首先,众所周知,Flag的前10个字符必是ucatflags{,最后一个字符必是},因此,就有了:
0—u k—c R—a s—t 3—f 4—l c—g 2—s l—{ u—}
这已经出来10组对应关系了,还剩18组。然后我们在做了这么多题后,也得到了一个结论,Flag里面经常会使用_这个字符作为单词之间的分隔符,然后我们观察这个pred_flag,这其中最像代替_的字符显然是出现了多次,每两次之间都有一定间隔的B。此外,我们知道原Flag中是有!的,那么大概率倒数第二个字符会是!,注意到pred_flag中倒数第二个字符是g,而g在pred_flag中另一次出现是连着出来了3个,连着3个感叹号很合理,因此我们可以猜测g代表的就是!,于是就有:
B—_ g—!
接下来,注意到pred_flag在其中两个B之间夹了一个s!y,其中s已经确定是代表t了,在frequecy那道题中,我们学习了频率分析法,其中有一个很重要的点,就是the这个词出现的频率会比较高。那么我们可以大胆假设这个s!y就是表示的the,注意到字符表中同时有大写H和小写h,先不妨猜测!表示的是小写h,然后注意到字符表中没有E或者e,但是有3,已知Flag中经常使用3代替e,故猜测y表示的是3,于是就有:
!—h y—3
注意到在连着三个g(!)前面是ta!a!!!a,已知!对应的是h,且在连着的三个g(!)前面大概率会是一个感叹词,那么有h的感叹词很可能会是oh。那么t就对应的是0(因为字符表中没有o),那么为什么后面又有a又有!呢?最有可能的情况就是这是大小写的H混在了一起,之前假设的!对应h,那么a对应的就应该是H,于是就有:
t—0 a—H
我们现在注意到最后一个B(_)和倒数第二个字符u(!)之间有hR(a)YVHt(0)t(0){{{{,结合这道题目的名字叫backdoor,我们可以去猜测h对应B,Y对应C,V对应k,H对应D,{对应R,刚好组成了一个backdoor,十分合理,于是就有:
h—B Y—C V—k H—D {—R
接着注意到在前两个B(_)中间夹了一个a(H)UDy(3),以h开头,e结尾的长度为4个字母的单词第一反应就是have吧,那么D就对应V,但是已经确定了对应a的是R了,U对应的一定不是a,而字符表中又没有A,怎么办呢?结合之前的经验,Flag中常使用4代替A,那么我们就可以假设U对应的是4,于是就有:
U—4 D—V
根据英文中的语法,这个have后面一个词是the,那么这个have就一定不是助动词,那就大概率会是实义动词,前面就应当有个主语。而前面一个单词是}t(0)_,长度为3个字母,中间为o的主语,也就只能是you了,但是现在同时有大写Y和小写y,这个}只出现了这一次,是大写Y的概率会大得多,于是就有:
}—Y _—U
这时注意第三、四个B(_)中间的那个单词V(k)y(3)C,显然是key,于是就有:
C—y
现在已经出来26组对应关系了,还差2组,此时我们的Flag是
ucatflags{0HhHhhhH!!!Y0U_H4V3_th3_k3y_(f)_(M)y_BaCkD00RRRR!}
还差f和M没找到对应了,此时映射的右边也只有2和M没有被对应了,然后我们注意到,如果让M对应M,就组成了单词my,剩下的f夹在key和my backdoor之间,那么f表示2,也就是to,十分合理,于是就有:
M—M f—2
那么我们的Flag就是
ucatflags{0HhHhhhH!!!Y0U_H4V3_th3_k3y_2_My_BaCkD00RRRR!}
提交到网站上是错误的,我们反思一下可能是哪里出现了问题。目前最有可能有问题的就两点,一点是H和h搞反,另一点是Y和y搞反,相比之下显然是H和h搞反概率更大,于是我们将Flag中的H和h全部对调一下,就成了:
ucatflags{0hHhHHHh!!!Y0U_h4V3_tH3_k3y_2_My_BaCkD00RRRR!}
提交到网站上,Correct!