DASCTF&BJDCTF 3rd 部分writeup

Re

blink

把jle条件给patch了,这样就会显示所有x
在这里插入图片描述
选好时机,截图
在这里插入图片描述
用stegsolve留下灰度
在这里插入图片描述
然后隔远一点,用微信扫一扫,运气好就能扫出来了(逃)

ViQinere

import string
# FQD{GfjuJ5UbLrWjZjpvErXkiAZzlvO0xTa!cwnLLAsy3B0iEvEy}
key = 'zyxwvutsrqponmlkjihgfedcba'
key2 = 'TaQini'
flag = ''#BJD{test} FQD{gizt}
ans = 'FQD{GfjuJ5UbLrWjZjpvErXkiAZzlvO0xTa!cwnLLAsy3B0iEvEy}'

def check(s):
	#print s
	num = ord(s)
	if num > 0x60 and num <= 0x7a:
		ret = num - 0x61
		#print "check", ret
		return ret
	if num <= 0x40 or num > 0x5a:
		#print "check", num
		return num
	#print "check", ((num-0x41) ^ 0xFFFFFF80)-0x100000000
	return ((num-0x41) ^ 0xFFFFFF80)-0x100000000

key_pos = 0
for i in range(len(ans)):
	for t_flag in  string.printable:
		t_key_pos = key_pos
		tmp = check(t_flag)
		#print tmp

		if tmp==ord(t_flag):
			if t_flag == ans[i]:
				flag += t_flag
				print flag
				break
			continue

		tmp2 = check(key2[t_key_pos&5])
		t_key_pos += 1
		#print tmp2
	
		if tmp >= 0:
			pos = (tmp2&0x7f)+tmp
			if ans[i] == key[pos%26]:
				flag += t_flag
				print flag
				key_pos = t_key_pos
				break
		else:
			pos = (tmp2&0x7f)+128+tmp
			if ans[i] == chr(ord(key[pos%26])-0x20):
				flag += t_flag
				print flag
				key_pos = t_key_pos
				break

print flag
	

MiscVm

程序总体逻辑如下:
在这里插入图片描述

change1:把输入括号内的前16和后16部分交换
change2:有两张映射表,进行两次映射
vm:按照操作码的具体操作

这里开始是第一张表
在这里插入图片描述
这里开始是第二张表
在这里插入图片描述

当时做题时还把虚拟机每一步人工翻译了一下,现在回想起来感觉有点多余

3 input[4]*=10
6 input[4] /= 10
5 input[4] += 1 input[4] *= 4 input[4]/4 - 1
4 input[4] ^= 0xa tmp = 16*input[4] >> 31 >>28 input[4]+= 16*input[4] &0xf
15 
11 input[5] pass
1 input[5]*2 % 256 input[5]=16*(input[5]/2)
7 input[6] = ~input[6] input[6]+128
9 
5 input[7] pass
3 
6
10 input[7]*4
9 
5 input[8] pass
4 input[8] ^ 0xa tmp = 16*input[8] >> 31 >>28 input[8]+= 16*input[8] &0xf
11  input[9] pass
1 input[9]*2 % 256 input[9]=16*(input[9]/2)
6 
3  
7 input[10] = ~input[10] input[10]+128
9 
10 input[11]*4
9
5 input[12] pass
4 input[12] ^ 0xa tmp = 16*input[12] >> 31 >>28 input[12]+= 16*input[12] &0xf
14 
1 input[13]*2 % 256 input[13]=16*(input[13]/2)
7 input[14] = ~input[14] input[14]+128
9 
10 input[15]*4
9
4 input[16] ^ 0xa tmp = 16*input[16] >> 31 >>28 input[16]+= 16*input[16] &0xf
5 input[17] pass
3
6
1 input[17]*2 % 256 input[17]=16*(input[17]/2)
5 input[18] pass
3
6
7 input[18] = ~input[18] input[18]+128
9 
10 input[19]*4
9
36 
3 input[20] pass
6
36
4 input[20] ^ 0xa tmp = 16*input[20] >> 31 >>28 input[20]+= 16*input[20] &0xf
1 input[21]*2 % 256 input[21]=16*(input[21]/2)
5 input[22] pass
7 input[22] = ~input[22] input[22]+128
9
3 input[23] pass
6
5
10 input[23]*4
9
4 input[24] ^ 0xa tmp = 16*input[24] >> 31 >>
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值