2019年全国大学生网络安全邀请赛暨第五届上海市大学生网络安全大赛

做出了两道Misc==

签到

题干

解题过程

题干提示一直注册成功,如果注册失败也许会出现flag。

下载下来是包含010editor.exe的一堆文件。



打开010editor.exe,想到跟注册有关,于是进入Tools->Register



在弹出的license随便输入用户名和密码



果然,显示注册成功。



想把010editor.exe拖入ollydbg分析,一直不能成功打开,百度查了会儿问题,最后发现好像是因为ollydbg不能分析64位文件



把010editor.exe拖入x64dbg,搜索字符串“Password accepted”



向下滑动滚轮,在附近找到flag的字符串

Unlimited Base64 Works

解题过程

1.分离图片

下载下来是一个.avi视频,用potplayer打开观看,发现是每帧显示一个字符。

用脚本将视频逐帧分离(脚本由李sin提供)

import cv2
import os
#要提取视频的文件名,隐藏后缀
sourceFileName='ubw'
#在这里把后缀接上
video_path = os.path.join("", "", sourceFileName+'.avi')
times=0
#提取视频的频率,每帧提取一个
frameFrequency=1
#输出图片到当前目录vedio文件夹下
outPutDirName='vedio/'+sourceFileName+'/'
if not os.path.exists(outPutDirName):
#如果文件目录不存在则创建目录
os.makedirs(outPutDirName)
camera = cv2.VideoCapture(video_path)
while(True):
times+=1
res, image = camera.read()
if(not res):
print('not res , not image')
break
if(times%frameFrequency==0):
cv2.imwrite(outPutDirName + str(times)+'.jpg', image)
print(outPutDirName + str(times)+'.jpg')
print('图片提取结束')
camera.release()

2.人工识别,初得文本

然后很多人分工,一人负责几百张图片,人工将图片转为字符串。

在我做完我的部分时发现另一边已经得到所有的字符了...S老师使用百度云的人工智能以及自己审阅一遍后给我们提供了所有的字符文本。

在人工识别转化过程中,发现难以区分大写的I和小写的l,于是决定先统一记为I。

然后写一个脚本,识别出文本中所有I的位置(脚本再次由李sin提供)

但是对照这些位置的图片依次比对发现,并不能完全对应,有些位置的图片上的字符并非是I或l,于是我们怀疑S老师给的文本有问题,使用二分法对关键位置的图片比对修改,然后运行脚本再跑出一组位置,这样重复了七八次,终于使所有位置与含I或l的图片对应并得到了正确的文本。

3.火眼金睛,妙分Il

接下来就是将I和l区分了。共有68个I或l,如果全排列去做显然是不行的。我将图片放到最大分析发现,这些位置的字符只有两种样子,一种偏瘦(左侧有竖阴影),一种偏胖(右侧有竖阴影)



很明显,其中一种是I,另一种是l。

于是统计两种图片的位置,记录下来



然后李sin又写了个脚本,分别输出其中一组位置为I或为l,另一组位置反之的两种情况。

a='所有文本'
c=0
b=0
d=[86,156,206,242,248,447,519,548,886,888,895,896,900,920,946,1072,1137,1145,1174,1184,1370,1376,1426,1530,1535,1648,1719,1753,1772,1809,1827,1963]
f=[130,144,183,321,361,399,474,500,501,511,521,609,649,659,774,821,866,913,918,1026,1099,1107,1118,1359,1363,1435,1467,1490,1670,1787,1824,1850,1857,1901,2132,2135]
e=''
for i in a:
b+=1
if(b in f):#f中的I改为l
# if(b in d):#d中的l改为I
i='l'
e+=i
print(e)

将得到的两种文本在线base64解码为图片,发现都失败





如果在chrome浏览器做,会发现得到的图片是透明的,说明确实是PNG文件,但信息损坏。

4.人工再检,正确文本

我们不禁怀疑,一开始S老师给出的文本中有错误。虽然经过几小时的检错后,我们已经将I和l的位置都审查结束,但在其他位置仍有可能存在错误。于是我们小组3人分工,一人负责900张左右的图片,对整个文本进行系统的再次检查(眼要瞎了...)



果然,发现存在五六处大小写错误,于是我们终于得到了最终的正确文本(I和l都设为I)

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

将这个文本带入之前脚本的字符串变量a,再跑两次脚本,得到两组文本

然后在网站上在线分别将两组文本base64转图片(注意加上“data:image/png;base64,”的前缀),其中一个文本转为图片后得到flag

感想

拿了个三血嘿嘿//

2019年上海市大学生网络安全大赛两道misc WriteUp的更多相关文章

  1. Writeup:第五届上海市大学生网络安全大赛-Web

    目录 Writeup:第五届上海市大学生网络安全大赛-Web 一.Decade 无参数函数RCE(./..) 二.Easysql 三.Babyt5 二次编码绕过strpos Description: ...

  2. 2019 上海市大学生网络安全大赛 RE部分WP

    这次比赛就做了这一道逆向题,看到队友的WP,下面的对v10的加密方式为RC4,从我提取的v4数组就能够察觉出这是CR4了,自己傻乎乎的用OD调试,跟踪数据半天才做出来,还是见得的少了... ...下面 ...

  3. 2019全国大学生信息安全大赛两道web

    简单小结 菜鸟第一次打国赛,这次题目质量很高,学到了许多姿势. Web Justsoso 打开题目,源代码出存在提示: 使用LFI读取index.php与hint.php http://d4dc224 ...

  4. 第三届上海市大学生网络安全大赛 流量分析 WriteUp

    题目链接: https://pan.baidu.com/s/1Utfq8W-NS4AfI0xG-HqSbA 提取码: 9wqs 解题思路: 打开流量包后,按照协议进行分类,发现了存在以下几种协议类型: ...

  5. 第三届上海市大学生网络安全大赛wp&学习

    wp 0x00 p200 先分析了程序关键的数据结构 分析程序逻辑,在free堆块的时候没有清空指针,造成悬挂指针,并且程序中给了system('/bin/sh'),可以利用uaf 脚本如下: 1.先 ...

  6. 【LOJ】#3034. 「JOISC 2019 Day2」两道料理

    LOJ#3034. 「JOISC 2019 Day2」两道料理 找出最大的\(y_{i}\)使得\(sumA_{i} + sumB_{y_i} \leq S_{i}\) 和最大的\(x_{j}\)使得 ...

  7. 『ACM C++』Virtual Judge | 两道基础题 - The Architect Omar && Malek and Summer Semester

    这几天一直在宿舍跑PY模型,学校的ACM寒假集训我也没去成,来学校的时候已经18号了,突然加进去也就上一天然后排位赛了,没学什么就去打怕是要被虐成渣,今天开学前一天,看到最后有一场大的排位赛,就上去试 ...

  8. 2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解

    2019年湖南省大学生计算机程序设计竞赛 (HNCPC2019) 简要题解 update10.01 突然发现叉姐把这场的题传到牛客上了,现在大家可以有地方提交了呢. 不知道该干什么所以就来水一篇题解 ...

  9. ACM/ICPC 之 欧拉回路两道(POJ1300-POJ1386)

    两道有关欧拉回路的例题 POJ1300-Door Man //判定是否存在从某点到0点的欧拉回路 //Time:0Ms Memory:116K #include<iostream> #in ...

随机推荐

  1. Ubuntu 16.04 ssh协议连接root管理员用户

    首先先给自己的Ubuntu 创建一个root密码.毕竟登陆的时候都是用户登陆的. 在 命令行中输入  sudo passwd // 设置root密码 password for func : //输入用 ...

  2. python 练习题:将列表中的大写字母转换成小写

    将列表中的大写字母转换成小写如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,L1 = ['Hello', 'World', 18, 'Apple', None]请修改列 ...

  3. Natasha V1.3.6.0 的升级日志

    开源库满足于个人,而完善于大众. Natasha 自稳定版发布之后,众多老铁参与增强改进,感谢如下老铁的反馈: 1. 异常搜集 在 wenjq0911 建议下,添加了异常捕获,现 Natasha 的编 ...

  4. 完美转发(perfect forwarding)、universal reference、引用折叠(collasping)

    首先要分清: C++里的值只有两种值:左值.右值.—— 其本质应该是内存中存储的值/instance分两种:一种是持久的,一种是“短暂的” 也只有两种引用: 左值引用.右值引用. ——引用,就是这个内 ...

  5. python 排序 桶排序

    算法思想: 桶排序将数组分到有限数量的桶里.然后每个桶里再分别排序(使用任何算法) 当要倍排序的数组内的数值时均匀分配的时候,桶排序使用线性时间O(n) 步骤: 根据最大值.最小值.桶内数据范围设定一 ...

  6. iOS 上传appstore 一直卡在正在通过 App Store 进行鉴定(转)

    原帖地址:https://www.jianshu.com/p/d28714f3ef74 手动操作一下执行xcode包里面的命令行操作: (1)找到前往>应用程序里面的xcode (2)显示包内容 ...

  7. notepad++ 设置运行python脚本

    按F5 在输入框中输入: cmd /k python “$(FULL_CURRENT_PATH)” &PAUSE & EXIT python路径必须在环境变量中. 否则需要输入完整的p ...

  8. Java实现Redis的消息订阅和发布

    1.  首先需要一个消息监听器类 package com.sogou.baike.testimport.testSubscribe; import redis.clients.jedis.JedisP ...

  9. HDU5126 stars(cdq分治)

    传送门 题意: 先有两种操作,插入和查询,插入操作则插入一个点\((x,y,z)\),查询操作给出两个点\((x_1,y_1,z_1),(x_2,y_2,z_2)\),回答满足\(x_1\leq x\ ...

  10. Rxjava学习笔记

    1.使用Observable.range(int start, int count)创建一个发射特定整数序列的Observable,第一个参数为起始值,第二个为发送的个数,如果为0则不发送,负数则抛异 ...