五:insanity
首先利用下载附件,使用EXEinfo PE查看文件类型 为32位
利用IDA打开,找到主函数 同时Shift+F12
我们就此可以推测这就是flag
六:python-trade
我们利用软件打开为一堆乱码
反编码得到:
import base64 #Base64是一种任意二进制到字符串的编码方法,.base64生成的编码都是ascii码。
base64编码或解码都返回的是字节,需要手动转换成字符
def encode(message): #在python中encode指编码
s = ''
for i in message: #i依次表示message中的一个元素,遍历完所有元素循环结束。
x = ord(i) ^ 32 #以i为参数,返回其对应的 ASCII 数值,再与32进行异或运算
x = x + 16
s += chr(x) #chr()函数是输入一个整数【0,255】返回其对应的ascii符号
return base64.b64encode(s)
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
flag = '' #空格
print 'Input flag:'
flag = raw_input() #raw_input()函数会将所有输入的数据一律都转换为字符串格式.
if encode(flag) == correct:
print 'correct' #将flag加密后得到的值等于corret,则输出“corret(正确)”
else:
print 'wrong'
分析代码可得,加密后的flag等于corret,那么我们将corret进行解密,就能得到flag。而corret的每一个字符通过与32异或、加16、base64加密后得到XINkVmtUI1MgXWBZXCFeKY+AaXNt。那么解密时就进行逆向操作,即将corret进行 base64 解密,再将得到的字符串中的每一个字符进行减 16、与32异或的运算。
即flag为 nctf{d3c0mpil1n9_PyC} 。
import base64
correct = 'XlNkVmtUI1MgXWBZXCFeKY+AaXNt'
temp=base64.b64decode(correct)
flag=''
for i in temp:
i=i-16
i=i^32
flag +=chr(i)
print(flag)
七:re1
首先利用下载附件,使用EXEinfo PE查看文件类型为32位
利用IDA打开,同时Shift+F12找到如图
双击如下,可惜不正确哦:
继续跟踪
F5反编码
可以发现v4与flag有关
查看xmword_413E34
R转换16进制数
A合并后出现
八:Hello, CTF
首先利用下载附件,使用EXEinfo PE查看文件类型为32位
利用IDA打开,找到主函数,F5查看伪代码
第一部分是我们需要的flag,第二部分则是将我们输入的字符串转化为16进制,然后再将其转化为字符串储存在str中,第三部分则是判断输入的字符串转换之后是否和flag一样。
首先,可以看到先是将字符串复制到v13的位置,
然后,后面对输入进行了判断,输入的字符串不能大于17
接着,将字符串以十六进制输出,然后,再将得到的十六进制字符添加到v10
最后,进行比较,看输入的字符串是否和v10的字符串相等,如果相等,则得到真确的flag
a437261636b4d65转化为CrackMeJustForFun,也就是我们所需要的flag