攻防世界ctf-1000click/crypt/happyctf
一、1000click
这题ida完发现有一千多个函数,本来以为会很难,结果实际上很简单。
首先进入ida,我的思路是,这么多函数显然直接分析代码有点困难了。然后就shift+F12,找字符串,我第一感觉是先找flag,搜索一下,放弃了
然后打开程序
显然点击1000次也是不现实的,没准1000次之后也没有flag,但是发现,check之后会有提示,如下
他有一个error的报错信息,然后我就想着去ida里面搜一下,发现位置,点进去
发现对应函数,进入
然后如下
发现判断函数,然后发现是判断与text比较,点进去text,发现一个flag,然后试了一下,发现对了,就结束了
小结
这题也算是给我一个新的经验了,对待程序类的题目,先根据程序里面的提示,去ida里面搜,直接看最后判断逻辑,没准就做出来了
二、crypt
这题,属实是折磨到我了。最开始我看就是对输入字符串进行一顿操作然后判断一下,这我熟悉啊,直接开始用python写脚本,后面发现越写越不对劲。先是拖进ida,找到main如下
很容易能发现sub140001120与sub140001140是关键函数,点进去发现如下
发现256这个数字,结合crypt这个标题,容易想到rc4这个算法,然后这个算法是对称加密算法(参考ctf-wiki)也就是有加密前或者加密后的字符串和key都可以解出对应的明文/密文
发现是rc4加密算法之后就简单了,根据上面main函数的最后部分,先得到加密的密文,然后找一个rc4解密脚本,就结束了,下面是我在ctf-wiki上找到的脚本,还挺好用的
1 | import base64 |
运行完就是flag:flag{nice_to_meet_you}
小结
这题主要的步骤应该是分析出是rc4加密算法,剩下的直接用脚本就行了
三、happyctf
这题做起来一点也不happy,刚下载附件的时候发现附带了一个pdb文件,对于从来没用过这个文件的我来说就直接战略性忽略了。但是后面才发现不带它直接分析是真滴折磨。完全不知道是干什么的。看了半天也不知道怎么做。最后加上了pdb,一下子就明朗了不少。至少知道了哪些函数是官方函数,是在干什么。
下面是主要思路,点进main如下
先是判断长度,需要长度为24才可以继续判断
这里很容易看明白,就是对输入逐字符进行操作,点进具体操作如下
就是将每个字符都与0x14异或一下,并push_back到v里面,也就是存入v,然后返回main
上面是关键部分,先将字符串存入key,然后也是逐字符进行操作,但是操作对象是v,也就是上面异或之后的字符,进行判断,而这里如果操作函数返回0则会错误,所以要返回1,点进操作函数
这里就是将key里面的字符与v9比较,不等则返回0,相等返回1. 而v9就是上面异或之后的字符
总结来说,就是将我们的输入异或0x14之后,与key比较,不相等则错误。也就是将key逐字符异或0x14就得到了flag,脚本如下:
1 | x = list("rxusoCqxw{yqK`{KZqag{r`i") |
四、总结
这上面三道题都对我来说有一定难度,但收获还是不小的。总结下来有下面几点:
-
gui类的题目,可以从中找到一些提示语句,然后直接去ida里面搜索对应语句,找到对应函数,直接进入核心判断逻辑语句
-
RC4的加解密题目,要关注256这个数字,如果有的话就要怀疑是不是RC4,是的话直接用已有的解密脚本做题
-
如果附件带pdb一定要用,不然会很痛苦