技术标签: 笔记
记录一些有意思的题目
下载附件解压出来是个gif文件,仔细观察一下,发现两种色块应该分别代表01。写段Python脚本把数据提取出来
from PIL import Image
# 读取图片
image = Image.open('C:\\Users\\28919\\Desktop\\out.gif')
# 存放分离出的图片的路径
split = 'C:\\Users\\28919\\Desktop\\gif\\'
# 循环读取gif的每一帧
try:
while True:
# 当前位置
current = image.tell()
# 保存图片
image.save(split + str(current) + '.png')
# 移动到下一张
image.seek(current + 1)
except:
pass
# 储存提取出的字符
string = ''
# 直接把2进制转为10进制储存在line里
line = 0
i = 0
# 图片里每一个色块是10×10像素大小,总共24×24个色块
for y in range(24):
for x in range(24):
# 载入一张图片
pix = Image.open(split+str(i)+'.png').convert('RGBA').load()
# 读取色块的颜色值
r, g, b, p = pix[x*10,y*10]
if g == 255:
# 0
line = line << 1
if r == 255 and b == 255:
# 1
line = (line << 1) + 1
i += 1
# 凑够8位就把line转为字符储存在string里
if i%8 == 0:
string += chr(line)
line = 0
print(string)
运行后得到:
o8DlxK+H8wsiXe/ERFpAMaBPiIcj1sHyGOMmQDkK+uXsVZgre5DSXw==hhhhhhhhhhhhhhhh
去掉后面那串无意义的hhhh就应该是个base64加密,但是直接解码出来还是乱码,应该在哪里还有别的东西。把图片丢到Kali里用binwalk命令跑一下:
果然还有东西,用foremost命令提取出来:
得到一张图片:
得到一个密码ctfer2333,用DES解密出来就得到flag了,解密网站:http://tool.chacuo.net/cryptdes
flag{2ce3b416457d4380dc9a6149858f71db}
下载附件解压出来是个流量包,用wireshark打开,追踪TCP流,在第二个流里发现存在一个flag.txt文件
继续往后翻,在第三个流里面发现一个png文件,在下面选择原始数据,保存。
继续翻,在第七个流里面发现一段base64文本,解码后是一个假flag
flag{This is fake flag hahaha}
全都保存出来后得到了这么几个文件:
逐个检查这几张图片,发现在最后一张里存在LSB隐写,用Stegsolve打开文件,一番操作之后flag就出来了
flag{Plate_err_klaus_Mail_Life}
下载得到一张图片,用Stegsolve打开,发现存在LSB隐写,开头为zip的文件头,直接保存用压缩软件打开。
没有任何加密,但解压时提示压缩文件损坏,用010editor看一下,文件尾后面存在无用数据,直接删掉,成功解压。
解压后的文件打开发现是base64加密,解密后能看到是一个png文件。
直接用base64转图片得到flag:
FLAG{LSB_i5_SO_EASY}
下载解压得到一个位置类型的文件,丢到Kali里用file命令跑一下
得知为一个流量包,用Wireshark打开,右键追踪流发现全部是HTTP请求,内容全部是jpg图片,左上角文档里选择导出对象将所有HTTP请求里的东西全部导出来:
发现这张图里有一个二维码
直接解码解不出来,但根据图片上的信息可知为AES加密,密码为CTF,解码网站:http://www.jsons.cn/aesencrypt
解码后是一串数字,但这并不是flag,继续用binwalk分析图片:
发现藏有一个zip文件,foremost分离出来解压得到一张清晰的二维码:
扫码得一句话:
扔下内衣真有一线生机????
交出内裤才有活路!!!!
那么我们的目标就锁定到了这张图上:
然而这张图foremost分离出的压缩包里的二维码和之前那一张一模一样,最后我们发现这一张图片分离出的压缩包存在密码(真就照应题目名呗):
这时我们想到之前得到的那一串数字,输入后成功解压,得到一张不一样的二维码:
外面大的二维码扫描结果和前面的一样,里面那个小二维码扫描后得到:
flag{97d1-0867-2dc1-8926-144c-bc8a-4d4a-3758}
题目里说要提交flag{xxx}内的xxx内容,所以最终的答案就是括号里面的内容(又一个坑)
下载附件得到一个有密码的压缩包,暴力破解之得密码46783,刚好是被加密的压缩包的名字,解压出来的压缩包还是有密码,那么这题就应该是一个压缩包套娃题,题目里让我们检查73168.zip这个文件,直接写Python脚本解之:
import zipfile
name = r"C:\Users\28919\Desktop\f932f55b83fa493ab024390071020088.zip"
while True:
if name == r"C:\Users\28919\Desktop\zip\73168.zip":
print("find")
ts1 = zipfile.ZipFile(name,'r')
# 获取压缩包里第一个文件名并截取前5个字符
passwd = ts1.namelist()[0][0:5]
print(passwd)
ts1.extractall("C:\\Users\\28919\\Desktop\\zip\\",pwd=passwd.encode())
name = "C:\\Users\\28919\\Desktop\\zip\\"+ts1.namelist()[0]
全部解压完有1509个压缩包,然而没有一个是73168,但是我们看到最后解压出的压缩包里是一个wav文件,暴力破解得密码:b0yzz,用Audacity打开切换到频谱图看到flag:
BallsRealBolls
下载解压得到一个wav文件,直接播放发现最后有一段杂音,用Audacity打开切换到频谱图看到有一段flag,然而并不完整
这道题目做法有很多,主要是Audacity的使用,左侧可以在菜单中把采样率改小,或者直接右击左侧频率栏选择缩小,一番操作完成后flag就出来了
RCTF{bmp_file_in_wav}
下载附件得一个exe文件,运行,发现是一个安装程序,继续,发现需要输入密码
由于这是道MISC的题,应该不是逆向分析,我们回到上一步看这个永远没有人会看的许可协议,里面有一句话:
嗯,没错这就是flag
ILOVEREADINGEULAS
下载解压得到一个vmdk文件,解压看到里面有4个txt文件(WinRar可能会报错压缩包损坏)
打开里面只有一句话:flag is not here.
用WinImage打开,右键将4个文件提取出来
再用010Editor打开提取出来的文件,看到全部都是是二进制格式,将数据整合到一起转为字符串就得到flag
# 二进制转换为文本
s = '''01100110011011000110000101100111011110110011010\
001000100010100110101111100110001011011100101111101000\
10000110001011100110110101101111101'''
flag = ''
for i in range(0,len(s),8):
flag += chr(int(s[i:i+8],2))
print(flag)
flag{4DS_1n_D1sk}
下载得到一张png图片,但是实际格式是jpg,用binwalk命令跑一下发现里面有一个zlib文件,再用binwalk分离出来(binwalk会自动将zlib文件解压)
得到的文件是一段Base64,解码后根据文件头可以看出是一个zip文件,但是文件头前两个字符颠倒了
改正后解压发现需要密码,压缩包里的注释告诉我们密码是ZeroDivisionError这个报错信息后面的一句话,用Python写个1/0运行得到后面的文本为:integer division or modulo by zero
解压后对里面的这段文本用 uuencode 解码即可得到flag
G0TE30TY[,C,X.$%&,C@Y,T5".#5%0C%"-#,Y04)&1C8Q-S,Q.49]
CISCN{2388AF2893EB85EB1B439ABFF617319F}
题目有点小问题,最后应该少了一位,这里贴上正确的原文
38708d2a29ff535d9e3f20f85b40df3c3fab465b9a731ce55b54923279e85b4397362be25c54df2020f8465692733ce5535193363dab465b9a732eee41479a2137ab735f933a3cf8125a91730ee4405f9b730eea4013b61a79ff5d138d3638ef12408a312aff535d8b3a38e71252923c2ce54640df3c3fab7f5c8d203ca6515c9b363dab40529b3a36ab515c923e2ce55b509e2730e45c40df3c3fab465b9a7318f35b40df2336fc57418c732de35347df3b38ef12519a3637ab575d9c3a29e357419a3779fe415a913479ce5c5a983e38ab5f529c3b30e55740d1730de35b40df2a30ee5e579a3779e65b5f962738f94b13963d2dee5e5f96343ce55156df2431e2515bd37338e75d5d98732ee2465bdf2731ea4613992136e6125c8b3b3cf912579a302bf242479a3779ca4a5a8c732bea565a907338e556138b3635ee4241963d2dee40138b2138e5415e96202ae25d5d8c7f79fc5340df3430fd575ddf2731ee125090373ce5535e9a730ce746419e7d79df5a5a8c732eea41139c3c37f85b579a213cef125186732eee41479a2137ab61468f213ce65713be3f35e25757df1036e65f5291373cf91277883a3ee34613bb7d79ce5b409a3d31e445568d732de4125b9e253cab50569a3d79a956569c3a2ae24456dd732de41247973679ca5e5f96363dab445a9c2736f94b1df5590de35713ba3d30ec5f52df3e38e85a5a91362aab45568d3679ea12559e3e30e74b13903579fb5d418b323be757139c3a29e35741df3e38e85a5a91362aab455a8b3b79f95d47902179f851419e3e3be757418c7d79cc5d5c9b7336fb57419e2730e555138f2136e857578a213cf81e138f2136fb5741932a79ee5c5590213aee561fdf2436fe5e57df3b38fd571392323dee1247973679fb5e46983136ea4057df1637e2555e9e7334ea515b963d3cab475d9d213cea59529d3f3ca5127b90243cfd5741d37334e44147df3c3fab465b9a731eee405e9e3d79e65b5f962738f94b13993c2be85740d3732aee51419a2779f85741893a3aee41139e3d3dab515a893a35e2535ddf323eee5c5096362aab465b9e2779fe41569b731ce55b54923279ee5f43933c20ee56138f3c36f9125c8f362bea465a913479fb405c9c363dfe40568c7f79ea5c57df3a2dab45528c732de357409a7329e45d41df232be451569b262bee41138b3b38ff1252933f36fc5757df2731ee1276913a3ee6531392323ae35b5d9a2079ff5d139d3679f957459a212aee1f56913430e557568d363dab535d9b732de357139c3a29e357418c732de412519a732bee5357d15953df5a56df143cf95f52917329e747549d3c38f9561e9a222ce242439a3779ce5c5a983e38ab50569c3234ee127d9e2930ab75568d3e38e54b148c7329f95b5d9c3a29ea5e139c2120fb465cd22020f84656927d79c2461388322aab504190383ce5125186732de35713af3c35e2415bdf143ce557419e3f79d8465299357ef81270962331ee4013bd262bee5346df3a37ab76569c3634e95741df6260b8001fdf2430ff5a138b3b3cab535a9b7336ed12758d3637e85a1e8c2629fb5e5a9a3779e25c479a3f35e2555691303cab5f528b362be2535fdf3c3bff535a91363dab5441903e79ea12749a2134ea5c138c2320a51272df3e36e5465bdf313ced5d419a732de3571390262de940569e3879e45413a83c2be75613a8322bab7b7ad37338ff1252df3036e554568d3637e85713973635ef125d9a322bab65528d2038fc1e138b3b3cab625c933a2ae31270962331ee4013bd262bee5346df2031ea40569b7330ff4113ba3d30ec5f52d2312bee5358963d3eab46569c3b37e243469a2079ea5c57df273ce85a5d903f36ec4b13883a2de31247973679cd4056913031ab535d9b731bf95b47962031a512778a2130e555138b3b3cab75568d3e38e5125a912538f85b5c917336ed1263903f38e5561fdf3036f95713af3c35e2415bdf1030fb5a568d731bfe40569e2679fb57418c3c37e5575fdf243cf957139a2538e847528b363da71245963279d95d5e9e3d30ea1e138b3c79cd405291303cab455b9a213cab465b9a2a79ee41479e3135e2415b9a3779ff5a56df031aab70418a3d36ab415a983d38e74113963d2dee5e5f96343ce55156df202dea465a903d79fc5b4797731ff9575d9c3b79ed5350963f30ff5b568c732afe424390212da512608a303aee4140992635ab515c90233cf95347963c37ab535e903d3eab465b9a7309e45e568c7f79ff5a56df152bee5c50977f79ea5c57df2731ee12718d3a2de2415bdf322dab705f9a273ae35e56867309ea4058df3036e5465a91263cef1246912730e712798a3d3cab030acb6375ab455b9a3d79cd405291303cab41468d213ce556568d363dab465cdf2731ee12749a2134ea5c40d15953cd405c92732de35b40df313cec5b5d913a37ec1e138b3b3cab7041962730f85a13b83c2fee405d923637ff127090373cab535d9b731af2425b9a2179d8515b903c35ab1a74bc751ad81b139e2779c95e568b3031e7574adf0338f959139d2630e746138a2379ea5c139a2b2dee5c4096253cab514186232dea5c52932a2de251139c3229ea505a933a2df21c13b63d30ff5b52933f20a71247973679ef57508d2a29ff5b5c91732eea4113923230e55e4adf3c3fab7e4699272eea54559a7371cc5741923237ab535a8d733fe440509a7a79ea5c57df3279ed5744df1b3cee4013d7143cf95f52917338f95f4ad67334ee41409e343cf81e139e2079ff5a56df182be257548c3e38f95b5d9a7371cc5741923237ab5c52892a70ab575e8f3f36f25757df3e2ce85a13923c2bee12409a302cf957138f2136e857578a213cf81255902179fe415a913479ce5c5a983e38a51272933237ab66468d3a37ec1e139e731aea5f518d3a3dec5713aa3d30fd57418c3a2df2125e9e2731ee5f528b3a3ae2535ddf3237ef125f903430e85b52917f79fb405c893a3dee561392263ae3125c99732de35713902130ec5b5d9e3f79ff5a5a913830e555138b3b38ff125f9a3779ff5d138b3b3cab56568c3a3ee5125c99732de357139c2120fb4652913235f2465a9c3235ab505c92313cab5f529c3b30e55740df2731ea461388362bee125a91202df9475e9a3d2dea5e13963d79ee445691272cea5e5f86733bf95752943a37ec1247973679e553459e3f79ce5c5a983e38a5127b90243cfd5741d3732de35713b42130ee554092322be25c56df3a37ff405c9b263aee56139e3d79ce5c5a983e38ab44568d2030e45c13883a2de31252df3536fe404797732be4465c8d733fe4401396272aab671e9d3c38ff411fdf213cf8475f8b3a37ec125a917338ab4241903f36e555569b7329ee405a903779fc5a5691732de357409a7334ee41409e343cf81250902635ef125d902779e957139b363af94b438b363da51264962731ab465b9a733aea42478a213cab5d55df213ce757459e3d2dab515a8f3b3cf912589a2a2aab535d9b732de357138a203cab5d55df3e2ce85a1399322aff5741df060aab7c52892a79e95d5e9d362aa712419a342ce75341d3732bea425a9b732bee5357963d3eab5d55df0674e95d528b7334ee41409e343cf812419a202ce65757d15953df5a56df3535ea5513962063ab7677bc071ff002579c3638b806069d326dbd040bcf3169e90101cc3761ea0a02cf656db8570a82
用Python把16进制字符转为字符串:
f = open('input.txt','r')
s = f.read()
s = s.decode('hex')
open("output.txt","w").write(s)
这道题用的是异或加密,用xortool尝试找出密钥:
root@kali:~/桌面# xortool -c 20 /root/桌面/output.txt
The most probable key lengths:
3: 11.9%
6: 19.7%
9: 9.4%
12: 14.5%
15: 7.1%
18: 11.2%
21: 5.3%
24: 8.4%
30: 6.8%
36: 5.7%
Key-length can be 3*n
1 possible key(s) of length 6:
w3\xffSY\x8b
Found 1 plaintexts with 95%+ valid characters
See files filename-key.csv, filename-char_used-perc_valid.csv
输出的文件最后可以看到明显的flag,但并不正确,猜测应该是密钥还是存在错误.
T-e fla" is: DCTF{udcea3q5ba46s80b0bv23d8a}10643 9}Y
密钥共6位,而从文件头开始每6个字符里第一个都是错误的,推测出密钥的第一位错误。再看上面那句话,T-e应该为The,对 ‘-’ 和 ‘w’ 进行异或得原文字符为 ‘Z’,再对 ‘Z’ 和 ‘h’ 异或得密钥为 ‘2’。至此我们就得到了异或加密的密钥:23\xffSY\x8b
最后用Python进行异或解密即可得flag:
f = open('input.txt','r')
s = f.read()
s = s.decode('hex')
flag = ''
key = '23\xffSY\x8b'
length = len(key)
for i in range(len(s)):
flag += chr(ord(s[i]) ^ ord(key[i%length]))
print flag
DDCTF{0dcea345ba46680b0b323d8a810643e9}
直接输入:where python
原文链接:C语言结构体里的成员数组和指针复制如下:单看这文章的标题,你可能会觉得好像没什么意思。你先别下这个结论,相信这篇文章会对你理解C语言有帮助。这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接。微博截图如下。我觉得好多人对这段代码的理解还不够深入,所以写下了这篇文章。为了方便你把代码copy过去编译和调试,我把代码列在下面:
p5.js创意编程一、临摹动图1、临摹动图为:2、观察动图会发现共有6行6列的圆,以及每个圆上会有一个动态的正方形。可以发现偶数行偶数列规律相同,奇数行偶数列规律相同,偶数行奇数列规律相同,奇数行技术列规律相同。初始时偶数行偶数列初始时奇数行偶数列初始时偶数行奇数列初始时奇数行奇数列3、开始写代码,首先填背景色,设置后面要画的小正方体的边长,设置时间轴规律,因为我没有找到合适的周期..._p5.js互联网创意编程" pdf
解决办法方法一1 tty1 ctrl+alt+f1进入命令行2 sudo dpkg --configure -a 方法二1 tty1 ctrl+alt+f1进入命令行 2 sudo apt-get updatesudo apt-get upgradesudo apt-get dist-upgradesudo apt-get instal...
大家好,我是好学的小师弟。今天来和大家分享下接口测试中,如何把postman获得的token值设置为环境/全局变量。我们在测试过程中,经常会遇到有的测试请求需要用到token,但是我们总不能每做一次测试就去先获得一遍token,这样不利于做自动化测试。这里我们就拿一个接口为例,将接口响应中所获得的'nickname'的值设置为变量。token值设置为变量的方法和这个步骤一样步骤:1.首先我们输入url,获得接口响应。2.在tests中写入获取响应body中nickname所对应的v._token储存后有值但不能赋全局
前端到底有什么,现在前端各种各样,处于一个百家争鸣的情况,所以现在很多学习前端的人不知道到底应该学习哪一个框架,下面就针对现在前端的整体情况进行宏观描述。_前端开发框架说明
概念引入gan的通俗理解摘要1.研究条件生成式对抗网络在图像翻译任务中的通用解决方案2.网络不仅学习从输入图像到输出图像的映射,还学习了用干训练该映射的损失函数3.证明了这种方法可以有效应用在图像合成、图像上色等多种图像翻译任务中4.使用作者发布的pix2pix软件,大量用户已经成功进行了自己的实验,进一步证明了此方法的泛化性5. 这项工作表明可以在不手工设计损失函数的情况下,也能获得理想的结果研究背景图像翻译问题图像翻译技术能够将图像中内容从一个图像域X转换到另一个图像域Y,可以看作是
PuExecjs不支持js文件解决方法在安装PuExecjs库的时候遇到问题,问题出现在执行py文件的时候用到js时报错,类似于用不了js文件,这时候需要重新安装js就可以了。这里讲述安装node.js。1、下载指令:wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz2、新建一个目录:mkdir -p /..._pip了pyexecjs但无法导入execjs模块
我有个2D角色的配置如下然后发现这个角色只要将Animator里面加上这个角色的死亡动画在游戏运行的时候就会出现角色停留在空中同样的配置 没有加就一切正常按道理 加了死亡动画应该不会导致这样的bug死亡动画我单独查看也是正常的所以 这应该是unity的bug..._unity动画相同pose帧数丢失
目录学生住宿管理系统设计与实现 11系统分析 11.1问题说明 11.2功能需求 21.2.1主要功能描述 21.2.2用例图 31.3数据需求 41.3.1数据结构 41.3.2数据处理要求 61.4性能需求 61.5开发环境与工具软件 72系统设计 82.1总体设计 82.2数据库表结构 102.3输入/输出设计 122.3.1输入设计 122.3.2输出设计 122.4用户界面设计 132.5处理过程设计 163系统实现与测试 193.1单元测试 193.2_java宿舍管理系统设计报告
原因因为 MyBatis-Plus 自带的更新方法,都有对对象空值进行判空。只有不为空的字段才会进行数据更新。解决方式在实体类对应的字段上加注解@TableField(strategy=FieldStrategy.IGNORED),忽略null值的判断,例如:@TableField(updateStrategy = FieldStrategy.IGNORED)private String address;示例:1、未加注解(无法设入空值,见代码结果)://实体priv_mybatisplus字段不为空
FFmpeg的AVFrame转成Qt的QImage//头文件#ifdef __cplusplusextern "C" {#endif#include <libavcodec/avcodec.h>#include <libavcodec/avformat.h>#include <libavcodec/swscale.h>#ifdef __cplusplus}#endif#include <QImage>//变量定义AVFrame *p_avframe转qimage