文章总结: 文档分享了CTF竞赛中五个实用的Python脚本。内容涵盖手机键盘密码解密、LSB隐写术的编解码实现、基于已知特征的MD5哈希爆破、零宽字节隐写解密以及二进制数据转二维码绘制。这些脚本针对密码学、隐写分析和编码转换等常见题型提供了解决方案,具有较高的实战参考价值和可操作性,适合CTF选手作为工具库储备。 综合评分: 70 文章分类: CTF,安全工具,实战经验
MD5补全
import hashlib
# 定义可能的字符集
strs = "1234567890qwertyuiopasdfffghjklzxcvbnm"
# 定义已知的MD5哈希值的前26位和最后一位
q = "e10adc3949ba59abbe56e057f2"
h = "883e"
# 遍历所有可能的四个字符组合
for i1 in strs:
for i2 in strs:
for i3 in strs:
for i4 in strs:
for i5 in strs:
for i6 in strs:
# 组合四个字符
res = i1 + i2 + i3 + i4 + i5 + i6
# 计算MD5哈希值
res_md5 = hashlib.md5(res.encode()).hexdigest()
# 检查哈希值是否符合条件
if res_md5[0:26] == q and res_md5[28:] == h:
# 如果找到匹配,打印MD5哈希值和对应的字符串
print(res_md5)
print(res)
零宽字节隐写解密脚本
#!/usr/bin/python
# -*- coding: utf-8 -*-
import zwsp_steg
decoded = zwsp_steg.decode('ZmxhZ3toYWhhfmZha2VmbGFnIX0=',zwsp_steg.MODE_FULL)
print (decoded)
二进制绘制二维码
import os
import cv2
import time
import argparse
import itertools
import numpy as np
parser = argparse.ArgumentParser()
parser.add_argument('-f', type=str, default=None, required=True,
help='输入文件名称')
parser.add_argument('-size', type=int, default=5,
help='图片放大倍数(默认5倍)')
args = parser.parse_args()
file_path = os.path.join(args.f)
if not os.path.exists("./out"):
os.mkdir("./out")
# read binary txt
with open(file_path, "r") as f:
data = f.read().strip()
def draw_QR(img, reverse=False):
for i, v in enumerate(data[:row*col]):
right_bottom_point = (left_top_point[i][0] + size, left_top_point[i][1] + size)
if not reverse:
cv2.rectangle(img, left_top_point[i], right_bottom_point, color=(
255, 255, 255), thickness=-1) if v == "0" else cv2.rectangle(img, left_top_point[i], right_bottom_point, color=(0, 0, 0), thickness=-1)
else:
cv2.rectangle(img, left_top_point[i], right_bottom_point, color=(0, 0, 0), thickness=-1) if v == "0" else cv2.rectangle(
img, left_top_point[i], right_bottom_point, color=(255, 255, 255), thickness=-1)
return img
if __name__ == '__main__':
# 计算宽高
dic = {X: int(len(data) / X) for X in range(1, len(data)) if len(data) % X == 0}
size = args.size
for row, col in dic.items():
img1, img2 = np.zeros((row * size, col * size, 1)), np.zeros((row * size, col * size, 1))
left_top_point = []
for i, j in itertools.product(range(0, row * size, size), range(0, col * size, size)):
left_top = (j, i)
left_top_point.append(left_top)
cv2.imwrite(f"./out/{col}_{row}.png", draw_QR(img1, reverse=False))
cv2.imwrite(f"./out/{col}_{row}_reverse.png", draw_QR(img2, reverse=True))
print(f"[-] 宽度:{col:6} 高度:{row:6}, 已保存在运行目录out中...")
print("[-] 已经遍历完所有情况, 即将自动关闭!")
time.sleep(0.5)
HASH 补全
import hashlib
import itertools
import string
import tqdm
enc_1 = b'2100'
hash_value = '3a5137149f705e4da1bf6742e62c018e3f7a1784ceebcb0030656a2b42f50b6a'
table = list(string.digits)
for i in tqdm.tqdm(itertools.product(table, repeat=6)):
enc_2 = ''.join(i).encode()
enc = enc_1 + enc_2
if hashlib.sha256(enc).hexdigest() == hash_value:
print(enc_2.decode())
print(b'moectf{' + enc + b'}')
break
好了师傅们,因为时间原因小云先给大家分享这么多需要源文件的师傅后台私信我 每条私信小云都会认真看的
– 另外祝最近正在参加网络安全竞赛和正在比赛的师傅都能取得优异的成绩 –
- END –
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:响应云SRC 响应云SRC 响应云SRC《CTF竞赛中常用的脚本分享》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论