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提供)
然后很多人分工,一人负责几百张图片,人工将图片转为字符串。
在我做完我的部分时发现另一边已经得到所有的字符了...S老师使用百度云的人工智能以及自己审阅一遍后给我们提供了所有的字符文本。
在人工识别转化过程中,发现难以区分大写的I和小写的l,于是决定先统一记为I。
然后写一个脚本,识别出文本中所有I的位置(脚本再次由李sin提供)
但是对照这些位置的图片依次比对发现,并不能完全对应,有些位置的图片上的字符并非是I或l,于是我们怀疑S老师给的文本有问题,使用二分法对关键位置的图片比对修改,然后运行脚本再跑出一组位置,这样重复了七八次,终于使所有位置与含I或l的图片对应并得到了正确的文本。
接下来就是将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)