一:game
首先利用下载附件,使用EXEinfo PE查看文件类型 为32位
利用IDA打开,同时Shift+F12
找到flag,双击,利用F5查看伪代码
分析得。在最后的for循环中函数进行了两次异或运算( a^=b等价于a = a^b,其中^是位异或运算如果a、b两个值不相同,则异或结果为1。. 如果a、b两个值相同,异或结果为0),可以分别看做a[i]^b[i] 和a[i]^0x13u。
a=[18,64,98,5,2,4,6,3,6,48,49,65,32,12,48,65,31,78,62,
32,49,32,1,57,96,3,21,9,4,62,3,5,4,1,2,3,44,65,78,32,
16,97,54,16,44,52,32,64,89,45,32,65,15,34,18,16,0]
b=[123,32,18,98,119,108,65,41,124,80,125,38,124,111,74,
49,83,108,94,108,84,6,96,83,44,121,104,110,32,95,117,
101,99,123,127,119,96,48,107,71,92,29,81,107,90,85,64,
12,43,76,86,13,114,1,117,126,0]
flag=''
for i in range(57):
a[i]^=b[i]
a[i]^=0x13
flag+=chr(a[i])
i+=1
print(flag)
得到答案zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}
二:open-source
解题思路:
first != 0xcafe代表我们需要输入0xcafe,反之程序就会直接输出"you are wrong, sorry.\n" 所以first = 0xcafe=51966
“||”逻辑或,特点是两边同时为假则整体为假,不难得出second=25
strcmp函数是用来判断是否相等的 相等strcmp返回0,退出if条件,即argv[3]=“h4cky0u”,strlen()函数用来计算所需数字符串的长度,长度为7.
得到答案c0ffee
三:simple-unpack
首先利用下载附件,使用EXEinfo PE查看文件类型
不难发现文件存在一个upx壳,所以我们接下来去壳我们可以再次检验
利用IDA并找到主函数点击flag或空格
答案一眼所知
四:logmein
首先利用下载附件,使用EXEinfo PE查看文件类型
利用IDA并找到主函数同时Shift+F12![](https://i-blog.csdnimg.cn/blog_migrate/ab7fe7b2b65ff43d759081402bb44163.png)
双击进入该地址,并找寻比对flag相应的函数,进行“X”跟进函数
利用F5查看反代码好像用处不大,我们继续跟进主函数利用F5查看伪代码
我们阅读可知,s就是我们所需要的flag。我们观察两个if语句
第一个if,大于v8的长度错误
第二个if,小于等于错误
双击sub_4007C0,我们可以发现:
所以第一个if,大于v8的长度错误
第二个if,小于等于错误
正确的flag即s[i] = (char)(*((_BYTE *)&v7 + i % v6) ^ v8[i])
strcpy函数复制后者至前者
v8= ":\"AL_RT^L*.?+6/46"
v7 = 'ebmarah';(反转致字符形式)
a = ":\"AL_RT^L*.?+6/46"
b = "harambe"
c = 7
flag = ''
for i in range(0,len(a)):
flag += chr(ord(b[i%c]) ^ord(a[i]))
print(flag)
利用python反编码
得到答案RC3-2016-XORISGUD