😎17届CISCN初赛-Misc-Tough_DNS

Tough_DNS 附件是个数据包,打开数据包,分析,发现大致有两大类数据包。 010是二进制数据,优先使用tshark导出,因为有重复的,再加一个过滤 wireshark导出 删除.baidu.com留下二进制数据 用二进制生成文件发现并没有啥用,因为这个二进制数据每一行长度相等的,是个矩形。可以考虑二维码,我是在记事本里缩放发现是个二维码。这里移除完换行你会发现文本长度是441,正好是21^2。 扫描二维码的得到15f9792dba5c,不知道是干什么的,先存着。 记事本无法缩放的可以通过python脚本来生成二维码 from PIL import Image from zlib import * MAX = 21 # 数字的长度为一个整数的平方(如36^2=1296) pic = Image.new("RGB",(MAX,MAX)) str ="111111101100101111111100000100100101000001101110101010101011101101110101001001011101101110101110001011101100000100000001000001111111101010101111111000000000110000000000111100101010010011101010010000010110111111011001111000101100001001110000110100001000000101111001001100000000000001111001110010111111100100011010110100000100011010000100101110100001000010110101110101110110100110101110101011110101100100000101110001111001111111101111001111100" i=0 for y in range(0,MAX): for x in range(0,MAX): if(str[i] == '1'): pic.putpixel([x,y],(0,0,0)) else:pic.putpixel([x,y],(255,255,255)) i = i+1 pic.show() #pic.save("1.png") 继续观察数据包。 发现另一种数据有两种类型,每一个数据都存在TXT字段里 继续导出 tshark -r Tough_DNS.pcapng -T fields -Y “frame.len==100&&dns.id==0x4500” -e dns.txt > 0x4500 tshark -r Tough_DNS.pcapng -T fields -Y “frame.len==100&&dns.id==0x6421” -e dns.txt > 0x6421 导出的文件需要移除换行。 在线删除所有回车换行工具 - UU在线工具 (uutool.cn) ...

May 19, 2024 · 1 min · Yalois

🚲旧博客内容恢复

我是从20年开始写博客的,当时一直写的是生活类和一些菜鸟技术,零零散散也是记录了好多东西,放在电脑里真怕那天就删了。现在决定把我觉得能看的重新再放出来(不能看的主要是我之前写的很奇怪的文章)。 还记得第一次搭建博客是用免费的虚拟空间,到后来慢慢的使用了云服务器。在建站的过程中也是学到了不少的东西,结识了很多朋友,这也是一段很有意思的历程。但之前都是使用的动态博客,用过wordpress、typecho、halo… 中间也想过使用静态博客(hexo、hugo,但是觉得每次都得上传麻烦就放弃了。现在我重新启用了hugo(使用的时候发现了我电脑目录下还有好几个静态站点目录。。)为什么选择使用静态博客了呢。。是因为前段时间在写学习笔记,然后发现我的笔记给吞了,两个多小时写的内容都没了,破防了直接,于是我下定决心使用静态博客。 我的文笔一直不是很好,写文章经常毫无逻辑,关联词对不上,内容跳跃,在生活中我也是这样的一个人,希望慢慢改正吧。

May 12, 2024 · 1 min · Yalois

🍭CSS实现渐变字体

如封面所示-Yalois 代码 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>CSS渐变文本</title> <style> .BeautifulText{ /*通过将display属性设置为inline-block,DIV元素将根据其内部内容自动调整宽度,而不会占据整行。*/ display: inline-block; /*设置背景渐变色*/ background-image: linear-gradient(to right, grey, blue); /*设置字体大小*/ font-size: 50px; /* 关键代码 https://developer.mozilla.org/zh-CN/docs/Web/CSS/background-clip 将文本的背景剪切为文本本身的形状, 并将文本颜色设置为透明。 这样做可以创建一种文本填充背景的效果, 使得背景图像或渐变能够显示在文本内部。 -webkit是提高兼容性 */ background-clip: text; -webkit-background-clip: text; color: transparent; } </style> </head> <body> <div class="BeautifulText"> <h1>Hello,CSS</h1> </div> </body> </html> display:inline-block; 为了使背景长度由文字大小决定,不然的话文字只占渐变背景的一部分。 可以代码一行一行打看效果。我觉得实现原理就是背景色覆盖在文字上,然后多余的部分消失。 看看过程,前三行css输入之后–> 后三行css输入后—>

May 4, 2024 · 1 min · Yalois

📱CTF安卓逆向中的so文件的动态调试调用

Mobile android逆向中so文件的动态调用 某个安卓题目,使用jadx反编译apk之后 发现有个native函数,调用了so库。 1.创建一个新的anroid项目,然后编辑项目中的grade文件,添加以下内容 不同的DSL要添加的代码不同 Groovy DSL(build.gradle) sourceSets { main { jniLibs.srcDirs = ['lib'] } } Kotlin DSL(build.gradle.kts) sourceSets.all { jniLibs.srcDirs("lib") } 然后把so文件放到项目目录的app目录下 然后新建一个Class,要求Class的包路径必须和jadx中Class的路径一致。 然后把jadx中的代码复制到这个class中 2.在主函数中调用

May 2, 2024 · 1 min · Yalois

✌️CTF-Misc-base64隐写

base64隐写 base64 Base64是一种二进制到文本的编码方式。 base64的每个字节用6位二进制数来表示,共64个编码字符,2^6=64。加上补位符号’=‘共65个字符。 A-Z a-z 0-9 + / = base64编码 编码主要流程: 将原始数据每三个字节分为一组(共24bit),然后每6bit转为一个码表字符(新的四个字节)。如果字节数不是三的倍数,补0使二进制位数是6的倍数来编码 如果最后多了一个字节(8bit,差16bit),补上4个0(12bit—2*6,差12bit),编码成2个base64字符。最后补两个’=’(6*2bit)。 如果最后多了两个字节(16bit,差8bit),补上2个0(18bit—3*6,差6bit),编码成3个base64字符。最后补上一个’=’(6bit)。 Base64是把3个字节变为4个字节,所以,Base64编码的长度永远是4的倍数 base64解码 如果最后补了两个’=’,在解码时,忽略’=’,四个base64字符为一组,最后一组将2个base64字符转为12bit,取8bit为新字节,丢弃掉最后4bit。 如果最后补了一个’=’,在解码时,忽略’=’,四个base64字符为一组,最后一组将3个base64字符转为18bit,取16bit为两个新字节,丢弃掉最后2bit。 如果最后没有补位,在解码时,将每个base64字符转换为对应的6位二进制数(共24位)。然后将这24位二进制数按照每8位分割为一组,得到三个字节的原始数据。 实际上算法的实现是更加复杂的,需要涉及到二进制位操作。 base64隐写 因为在base64解码的时候会丢弃2bit或者4bit,所以在这些地方插入二进制数据不会影响解码的结果,但是会影响编码后base64的结果。所以就可以在这部分进行隐写。 自己写的提取base64可隐写的部分的所有二进制的值合并字符串。 #文本读取内容实现 base64chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' with open("./f380d850e6ebdb19b7d0743.txt","r") as f: for i in f.readlines(): #最后一个是换行符,去掉 base64len=(len(i)-1) text=i[0:-1] if base64len%4==0: pass elif base64len%4==3: #能藏2bit t=base64chars.index(text[-1]) t=(str(bin(t))[2:].zfill(6)) #去掉0b开头然后在前边补0直到补齐6位 print(t[-2:],end='') elif base64len%4==2: ##能藏4bit t=base64chars.index(text[-1]) t=(str(bin(t))[2:].zfill(6)) #去掉0b开头然后在前边补0直到补齐6位 print(t[-4:],end='') else: print("好像有些错误") #补全完毕 参考url 一份简明的 Base64 原理解析 - 知乎 (zhihu.com) 神奇的 Base64 隐写 - Tr0y’s Blog

May 1, 2024 · 1 min · Yalois