1.open-source
下载附件后,看到他是.c文件。用相应的软件打开,我这里是用的Geany。打开后如下图
发现经过三个判断后经过最后的hash便是我们要找的flag,其中的first、second、strlen(argv[3])我们可以通过上面的三个if来写脚本得到
1 first = 0xcafe 2 second = 25 3 th = 'h4cky0u' 4 flag = hex(first * 31337 + (second % 17)*11 + len(th) - 1615810207) 5 print(flag)
得到flag:c0ffee
2.insanity
这是一个比较简单的题了。查壳以后,用ida打开,f5反编译
最后输出了strs,双击它
发现flag就在里面。flag: 9447{This_is_a_flag}
3.python-trade
这是一个.pyc的文件,我们需要把它先反编译成为.py文件,可以使用在线工具,简单使用。
这下就比较简单了,我们输入的flag经过encode函数后与correct进行比较,对则通过,所以我们输入correct的内容通过函数得到的就是flag。
所以写脚本
import base64 correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt' c = base64.b64decode(correct) flag = '' for i in c: x = (i - 16) ^ 32 flag += chr(x) print(flag)
当然,其中用到了base64加密解密的内容,不熟悉的可以去百度一下。
4.Hello, CTF
先查壳
发现无壳,而且是c++文件,拖进ida后f5
分析后发现,它有这重要的几步
1.把一串字符赋给v13
2.要求输入的字符不超过17(0x11),
3.以十六进制输出,并赋给v10
4.用v10与v13比较,相同则成功
所以将v13的字符串转化成十六进制得到flag:CrackMeJustForFun
5.simple-unpack
这个题目说是加了壳的,而且是elf文件。没办法手动脱壳,所以我尝试了一下用winHex搜索了一下flag(ctrl+f),发现
复制粘贴后删掉乱码后flag:flag{Upx_1s_n0t_a_d3liv3r_c0mp4ny}
当然有运气成分,实在是条件不允许。。。
6.logmein
下载附件后先查壳,发现没有壳,而且是elf文件,不管他,直接拖进ida里f5
分析知道它将输入的字符串与v7[i%v6]^v8[i]进行比较,其中v8是字符串,而v7是一串数字而且是LL型,也就是长长整型,需要转换成十六进制在转换成字符。
但是这里有点小知识,v7是以小端序储存数据的,即低位字节存入低地址,高位字节存入高地址,所以正确的字符串应该反过来,即v7 = ‘harambe’
分析清楚了就写脚本
v8 = ':\"AL_RT^L*.?+6/46' v7 = 'harambe' flag = '' for i in range(len(v8)): c = ord(v7[i%7])^ord(v8[i]) flag += chr(c) print(flag)
得到flag:RC3-2016-XORISGUD
7.game
这道题挺有意思的,开始我试着玩了一下,,直接1,2,3,4,5...8就成功了,自己都有点懵。
但还是尝试着用逆向的方法做了下
这道题已经很明显了,输入数字后判断是否为1-8.然后使所有的图形亮起来就可以得到了。
那我们拖入od找到判断图形是否会亮的的语句把跳转直接转到输出flag的地方就可以了。
先智能搜索找到开始输入数字的地方
双击,开始找何时判断图形是否亮。。在其中看到一个cls清屏的地方,在哪里设置断点,运行后随便输入一个值,然后f8单步进入,一步一步会发现判断是在清屏之前,也就是下面这些jnz
在上面找到
这句话的地址,然后把上面第一个jnz改成 jmp 这个地址,开始运行,随便输入一个值就会出现flag
当然,我这里也显示调试错误,但是flag已经出现,无伤大雅。
flag:zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
8.getit
拖入ida查看代码后发现
首先给v5赋初值,并根据v5与1的与运算给v3赋值,然后计算s[(signed int)v5] + v3的值并存入t[v5+10]中,然后写入flag.txt文件中
要注意关键代码
LODWORD(v5) = 0; while ( (signed int)v5 < strlen(s) ) { if ( v5 & 1 ) v3 = 1; else v3 = -1; *(&t + (signed int)v5 + 10) = s[(signed int)v5] + v3; LODWORD(v5) = v5 + 1; }
所以我们再看s,t中存放的数据
s很明确,t这里要注意一下,是0x53+harifCTF{????????????????????????????????}
那么写脚本
s='c61b68366edeb7bdce3c6820314b7498' t1='SharifCTF{????????????????????????????????}' t = [] for x in t1: t.append(x) v6=0 for i in range(len(s)): if v6&1: v3=1 else: v3=-1 t[v6+10]=chr(ord(s[v6])+v3) v6=v6+1 flag='' for x in t: flag+=x print (flag)
得到flag:SharifCTF{b70c59275fcfa8aebf2d5911223c6589}
9.re1
这道题就比较简单了,拖入od,智能搜索,发现flag就在第一行、
flang:DUTCTF{We1c0met0DUTCTF}
好了今天就到这里了,明天再见!