数信杯北区半决赛WP
Misc
字2.0
论文题,从网上一搜就行,找到stegosaurus chinese text论文即可
我用的Steganography in Chinese text | Semantic Scholar
Steganography in Chinese text | Request PDF (researchgate.net)
之后让GPT读论文,自己手动复制出来文本,想让GPT写OCR有问题
text = """
我与父親不相见已二年余了,我最不能忘記的是他的背影。那年冬天,祖
母死了,父亲的差使也交卸了,正是禍不单行的日子,我从北京到徐州,
打算跟着父親奔丧回家。到徐州見着父亲,看见滿院狼藉的东西,又想起
祖母,不禁簌簌地流下眼泪。父亲說,「事已如此,不必难過,好在天无
绝人之路!」
回家變卖典質,父亲還了亏空;又借钱辦了丧事。這些日子,家中光
景很是惨淡,一半为了丧事,一半爲了父亲賦闲。丧事完毕,父親要到南
京谋事,我也要回北京念书,我們便同行。
到南京时,有朋友约去游逛,勾留了一日;第二日上午便須渡江到浦
口,下午上車北去。父亲因为事忙,本已说定不送我,叫旅館里一個熟识
的茶房陪我同去。他再三囑咐茶房,甚是仔细。但他終于不放心,怕茶房
不妥帖;颇躊躇了一會。其实我那年已二十岁,北京已来往過兩三次,是
没有甚么要紧的了。他躊躇了一会,終于決定還是自己送我去。我两三回
劝他不必去;他只说,「不要緊,他们去不好!”
我們过了江,進了车站。我买票,他忙着照看行李。行李太多了,得
向腳夫行些小費,才可过去。他便又忙着和他们讲價錢。我那时真是聪明
过分,總觉他說话不大漂亮,非自己插嘴不可。但他终於講定了价钱;就
送我上车。他給我揀定了靠车门的一张椅子;我將他給我做的紫毛大衣铺
好坐位。他嘱我路上小心,夜里警醒些,不要受涼。又嘱託茶房好好照应
我。我心里暗笑他的迂;他们只認得錢,托他们直是白托!而且我這样大
年紀的人,難道还不能料理自己麼?唉,我现在想想,那时真是太聰明
了!
我說道,“爸爸,你走吧。」他望車外看了看,说,“我买幾個橘子
去。你就在此地,不要走动。”我看那邊月臺的栅栏外有几個賣东西的等
着顧客。走到那边月臺,须穿过鐵道,須跳下去又爬上去。父亲是一个胖
子,走过去自然要費事些。我本來要去的,他不肯,只好让他去。我看见
他戴着黑布小帽,穿着黑布大马褂,深青布棉袍,蹣跚地走到铁道边,慢
慢探身下去,尚不大難。可是他穿過鐵道,要爬上那边月台,就不容易
了。他用两手攀着上面,兩脚再向上缩;他肥胖的身子向左微傾,显出努
力的樣子。這时我看见他的背影,我的泪很快地流下來了。我趕紧拭干了
泪,怕他看見,也怕別人看见。我再向外看时,他已抱了朱红的橘子望回
走了。過铁道时,他先將橘子散放在地上,自己慢慢爬下,再抱起橘子
走。到這邊时,我赶紧去攙他。他和我走到车上,将橘子一股腦兒放在我
的皮大衣上。於是扑扑衣上的泥土,心里很輕松似的,过一會说,「我走
了;到那邊来信!”我望着他走出去。他走了几步,回過頭看见我,
说,「进去吧,裏边没人。」等他的背影混入来來往往的人裏,再找不着
了,我便進来坐下,我的眼泪又来了。
近幾年來,父亲和我都是东奔西走,家中光景是一日不如一日。他少
年出外謀生,獨力支持,做了许多大事。那知老境却如此颓唐!他觸目伤
懷,自然情不能自已。情郁于中,自然要发之於外;家庭琐屑便往往觸他
之怒。他待我渐渐不同往日。但最近兩年的不見,他终於忘却我的不好,
只是惦記着我,惦记着我的儿子。我北來後,他写了一信给我,信中说
道,「我身体平安,惟膀子疼痛利害,舉箸提笔,诸多不便,大约大去之
期不遠矣。”我读到此处,在晶瑩的泪光中,又看見那肥胖的,青布棉
袍,黑布马褂的背影。唉!我不知何时再能与他相见!
"""
import zhconv
# 同义词字典,根据论文的思路,每个同义词组代表2个bit的信息
synonym_dict = [
["好", "优", "佳"], # 同义词组,表示2 bit信息
["快", "迅速", "敏捷"], # 同义词组,表示2 bit信息
["大", "巨大", "庞大"] # 同义词组,表示2 bit信息
]
def from_binary(binary_str):
"""将二进制字符串转换为文本"""
chars = [binary_str[i:i + 8] for i in range(0, len(binary_str), 8)]
return ''.join(chr(int(char, 2)) for char in chars)
def find_synonym_group(word, synonym_dict):
"""查找词所属的同义词组"""
for group in synonym_dict:
if word in group:
return group
return None
def extract_stego_message(stego_text, synonym_dict):
"""
从隐写文本中提取隐藏的二进制信息
1. 繁简体转换检测
2. 同义词替换提取信息
"""
carrier_chars = list(stego_text) # 将隐写文本逐字符拆分
binary_message = ''
count = 0 # 用来记录简体字的计数,配合繁简体嵌入策略
# 遍历每个字符
for char in carrier_chars:
if zhconv.convert(char, 'zh-hans') != char: # 检测繁体字
# 遇到繁体字,提取信息
binary_message += format(count, '02b') # 使用之前的策略,繁体字隐含信息
count = 0 # 计数器重置
elif zhconv.convert(char, 'zh-hant') != char: # 检测简体字
count += 1 # 简体字,继续计数,用于嵌入信息
# 同义词替换部分,根据词组提取隐藏的比特信息
sentences = stego_text.split("。") # 将文本拆分成句子
for sentence in sentences:
words = sentence.split() # 分词处理句子
for word in words:
synonym_group = find_synonym_group(word, synonym_dict)
if synonym_group:
# 找到同义词组,提取该词在组中的索引位置
index = synonym_group.index(word)
binary_message += format(index, '02b') # 每个同义词组携带2个bit信息
# 将提取出的二进制信息转换为原始文本信息
return from_binary(binary_message)
# 提取隐藏信息
extracted_message = extract_stego_message(text, synonym_dict)
print("解密后的信息:", extracted_message)
Pixel
下载附件一个png,
开头提示CBC 4MS=>SM4
下面有密文data
之后修改文件头,发现是LSB
得到key
之后找iv
zsteg发现有hex,猜测iv
ez_sign
下载附件爆破一下密码
123456
得到3个附件
第一个图片就是第一段flag
第二段流量
找到system(check)
第三段
把zip直接xor
信息收集表
直接提交邮件就可以
水印攻击_北区
添加噪声到单个像素,为整幅图像添加噪声,调整图像亮度,调整图像对比度,应用高斯模糊滤镜,处理图像的主函数,然后直接写脚本
from PIL import Image, ImageFilter, ImageEnhance
import random
def add_noise_to_pixel(pixel, noise_level=2):
"""对单个像素添加噪声"""
rand = random.randint(-noise_level, noise_level)
r, g, b = pixel
return (max(0, min(255, r + rand)),
max(0, min(255, g + rand)),
max(0, min(255, b + rand)))
def add_noise(image, noise_level=2):
"""为整幅图像添加轻微噪声"""
pixels = image.load()
width, height = image.size
for x in range(width):
for y in range(height):
pixels[x, y] = add_noise_to_pixel(pixels[x, y], noise_level)
return image
def adjust_brightness(image, brightness=1.02):
"""调整图像亮度"""
enhancer = ImageEnhance.Brightness(image)
return enhancer.enhance(brightness)
def adjust_contrast(image, contrast=1.02):
"""调整图像对比度"""
enhancer = ImageEnhance.Contrast(image)
return enhancer.enhance(contrast)
def apply_blur(image, radius=0.5):
"""为图像应用高斯模糊"""
return image.filter(ImageFilter.GaussianBlur(radius))
def process_image(input_path, output_path):
"""执行图像处理操作并保存结果"""
# 打开图像
image = Image.open(input_path)
# 执行一系列处理操作
image = add_noise(image)
image = adjust_brightness(image)
image = adjust_contrast(image)
image = apply_blur(image)
# 保存处理后的图像
image.save(output_path, "PNG")
# 使用示例
if __name__ == "__main__":
process_image('input.png', 'result.png')
签到寄语
还以为是web
其实就是随便说几个话,拿到gift.png
利用Releases · sz3/cfc (github.com)
下载到手机,扫描即可
Re
easy-decode
就是一个aes,一开始以为有SMC,尝试debug找key
后来仔细看了一下,这里memmove main 0x7D0
其实就是把main函数0x7D0的数据copy下来作为key,然后再转md5
直接cyber解密即可
取证
secret_1
Rstudio直接找secret,然后uncomply6反编译即可
secret_2
逆向即可
def decode(png):
flag = "flag{eba771fd-2b03-418f-b11a-60f1141c99ee}"
lens = len(flag)
with open(png, "rb") as f:
pic_bytes = f.read()
print(len(pic_bytes))
output_bytes = bytearray()
for i in range(0, len(pic_bytes)):
output_bytes.append(pic_bytes[i] ^ ord(flag[i * 2 % lens]))
with open("decrypted_" + png, "wb") as f:
f.write(output_bytes)
print(f"dec_{png}")
decode("flaggg.png")
secret_3
上面解密得到的flag.png末尾有zip,有密码,一开始考虑明文攻击
后面搞不出来,看剪切板发现有密码解密得到flag
history_1
iehistory发现有ipynb
提取出来就是flag
history_2
提取出来就是flag
0 条评论
可输入 255 字