记一次GKCTF之旅

GKCTF游记

昨天吧,去GKCTF玩了一下。题目很有意思,宝可梦也很好玩,我心情非常好,天台的风也很大......

不多说了,把昨天认真看过的几道题记录总结一下。这里特别感谢出题的二进制师傅们,感谢师傅们让我这个二进制彩笔做了一个下午的misc和密码学。

密码学

1.小学生的密码

题目给出的信息如下

e(x)=11x+6(mod 26)

密文:welcylk(flag为base64形式)

这是一个仿射加密。(这题昨天非常艹的就是手算算错,下次记得写脚本,叹气叹气)

仿射加密本质上还是一种单置换密码,置换密码我们最常见的就有凯撒密码。但是凯撒密码是一种移位密码,它实现了一个常数级别的置换(秘钥是区间为[0,26]的一个常数),而仿射密码实现的是一个一次的加密。

看到(mod 26),想到26个字母,这里应该实现的就是26个字母的一个闭环。

仿射函数的运算法则如下:

加密公式:Y=(AX+B)%26

解密公式:X=(A的逆元)*(Y-B)%26

写个脚本。

letter='abcdefghijklmnopqrstuvwxyz'
word='welcylk'
flag=''

a=11
b=6
for i in word:
    for j in range(0,len(letter)):
        if i==letter[(a*j+b)%26]:
            flag+=letter[j]
print(flag)

跑出来答案加个base64加密一下

这里还有另一种脚本,也更一下,下面的脚本直接通过求解逆元来解密仿射密码。

import primefac
import base64
def modinv(a,n):
    return primefac.modinv(a,n)%n

a=11
n=26
d,num,flag=modinv(a,n),0,""
miwen="welcylk"
table="abcdefghijklmnopqrstuvwxyz"
for i in miwen:
    num=d*((ord(i)-97)-6)%26
    flag+=table[num]
flag=base64.b64encode(flag)
print(flag)

2.汉字的秘密

题目是个文件,打开就一堆汉字,当铺密码,解密结果如上所示。

解出来这么个东西,然后,,,

然后题目提示flag{小写字母},出题的小姐姐告诉flag是可读字符串,有“_”字符。

我开始以为这是把里面的小写字母提取出来,是“vk”,我联想到Virink师傅的id了(先自己嘲讽一下自己的脑洞),我以为这就是flag了......

事实证明我错了,这还是一个加密。上面的“v”和“k”是小写的,一个在第五位,一个在最后一位,flag{...}格式,“{”在第五位,“}”在最后一位,那么“EJ>C”对应的一定是“flag”这个字符串。

还是一个置换吧,“E”和“F”的差是,“J”和“L”的差是2,“>"和“A”的差是3,“C”和“g”的差是4。

验证一下,“{”的“v”的差值是5,“}”和“k”的差值是18。

miwen="EJ>CvSHMV7G9R9@?3k"
flag=''

i=0
for a in miwen:
    i+=1
    flag+=chr(ord(a)+i)

print(flag)

 

 写个脚本,跑出:flag{you_are_good}。

逆向

1.check_in

一道逆向题目。出题师傅说在Github上看到的源码。这个项目在b站上其实也可以找得到源码。

这是一个用C语言实现了一个虚拟的电脑,上面有登录系统,看来是需要找到密码了。

我们打开IDA,找到主函数,然后找到登录函数

这个代码段肯定负责密码校验,登录密码肯定在data段,strcmp那里进去看一下

可以看见登录密码应该是“HelloWorld”

假的flag,base64解码

Why don't you try migic brick game.

好嘛,去打砖块,然后就打出这个东西

补充一下,补充一下。

我们最后看到的flag是直接输出了。一般这些直接输出的字符串存储在哪里呢?一般就是在全局数据段以数组的形式存储。那么在rdata段是不是可以直接找到flag呢?

 rdata段可以找到这样一串字符串:

2i9Q8AtFJTfL3ahU2XGuemEqZJ2ensozjg1EjPJwCHy4RY1Nyvn1ZE1bZe
import base58
flag=base58.b58decode("2i9Q8AtFJTfL3ahU2XGuemEqZJ2ensozjg1EjPJwCHy4RY1Nyvn1ZE1bZe")
print(flag)

这样也可以解出flag。

还有一种劫持eip的方法,后面再补充。

写在最后:还有一道宝可梦的虚拟器题目,比较脑洞,就不写了,但是用虚拟器改动汇编代码,修改游戏设置这个我觉得可以再研究一下。PWN题目杀我,后面学习了之后再来写。这次的题目挺有意思的,有时间把其他的题目都补充上来。

我是弱鸡

我是弱鸡

我是弱鸡

重要的事情说三遍。

posted @ 2020-05-25 19:45  Riv4ille  阅读(585)  评论(0编辑  收藏  举报