攻防世界 MISC-pcap1

下载题目附件得到一个pcap文件,使用wireshark打开

全是tcp数据包,使用过滤语法搜索哪个数据包中包含flag关键字

将该数据包保存为py文件

选择原始数据,然后点击另存为

得到一个python文件,打开,里面是一段加密逻辑和加密后的数据

import string
import random
from base64 import b64encode, b64decode

FLAG = 'flag{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}'

enc_ciphers = ['rot13', 'b64e', 'caesar']
# dec_ciphers = ['rot13', 'b64d', 'caesard']

def rot13(s):
	_rot13 = string.maketrans( 
    	"ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", 
    	"NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")
	return string.translate(s, _rot13)

def b64e(s):
	return b64encode(s)

def caesar(plaintext, shift=3):
    alphabet = string.ascii_lowercase
    shifted_alphabet = alphabet[shift:] + alphabet[:shift]
    table = string.maketrans(alphabet, shifted_alphabet)
    return plaintext.translate(table)

def encode(pt, cnt=50):
	tmp = '2{}'.format(b64encode(pt))
	for cnt in xrange(cnt):
		c = random.choice(enc_ciphers)
		i = enc_ciphers.index(c) + 1
		_tmp = globals()[c](tmp)
		tmp = '{}{}'.format(i, _tmp)

	return tmp

if __name__ == '__main__':
	print encode(FLAG, cnt=?) #这一块有一段加密后的数据,太长就不展示了

代码定义了三个加密方法,然后传入要加密的数据和要加密的次数后,每次加密在加密列表中随机挑选一个加密加密方法进行加密,并在加密结果字符串前加上当前加密方法在列表中的索引值+1

逆向

import string
import random
from base64 import b64encode, b64decode

FLAG = 'flag{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}'

enc_ciphers = ['rot13', 'b64e', 'caesar']
# dec_ciphers = ['rot13', 'b64d', 'caesard']

def rot13(s):
	_rot13 = string.maketrans( 
    	"ABCDEFGHIJKLMabcdefghijklmNOPQRSTUVWXYZnopqrstuvwxyz", 
    	"NOPQRSTUVWXYZnopqrstuvwxyzABCDEFGHIJKLMabcdefghijklm")
	return string.translate(s, _rot13)

def caesard(plaintext, shift=-3):
    alphabet = string.ascii_lowercase
    shifted_alphabet = alphabet[shift:] + alphabet[:shift]
    table = string.maketrans(alphabet, shifted_alphabet)
    return plaintext.translate(table)

def decode(pt,cnt=61):
	for i in xrange(cnt):
		c = pt[0]
		if c == '1':
			pt = rot13(pt[1:])
		if c == '2':
			pt = b64decode(pt[1:])
		if c == '3':
			pt = caesard(pt[1:])
	print pt

if __name__ == '__main__':
	x = '加密数据'
	decode(x)

加密数据填入之前文件里的加密数据

rot13加密函数本身也是解密函数,直接放在这里就行了base64就直接使用模块中的解密方法,凯撒密码,由于这里都是固定偏移3位,直接将偏移改为-3即可

然后解密相同的次数,根据每次要解密的数据第一位数字判断要用的解密方法即可

解密得到flag    flag{li0ns_and_tig3rs_4nd_b34rs_0h_mi}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值