日期:2020/02/09
这道题虽然很简单但是弄python的环境弄了很久。因为我写的脚本要用到isupper函数,而curses 库不支持 windows,所以要下载whl 包。试了很多个才找到适合我的版本。pip install curses-2.2.1+utf8-cp27-cp27m-win_amd64.whl
首先在winhex中找到了这段字符串,现在要把flag筛选出来。
最开始以为是提取大写字母:
import re
import sys
from curses.ascii import isupper
a='cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
b=re.findall('.{1}',a)
flag=' '
for i in b:
if(i.istitle()==True):
flag=flag+i
if(i=='{' or i=='}'):
flag=flag+i
print flag
# ALEXCTF{KPHD}
后来才知道是从第三个字符开始,每隔四个提取一个,得到正确flag:
import re
import sys
from curses.ascii import isupper
a='cvqAeqacLtqazEigwiXobxrCrtuiTzahfFreqc{bnjrKwgk83kgd43j85ePgb_e_rwqr7fvbmHjklo3tews_hmkogooyf0vbnk0ii87Drfgh_n kiwutfb0ghk9ro987k5tfb_hjiouo087ptfcv}'
flag=' '
for i in range(3,len(a),5):
flag=flag+a[i]
print flag
#ALEXCTF{K33P_7H3_g00D_w0rk_up}
日期:2020/02/09
根据题解知道了是在日历上按数字连线得到flag。
日期:2020/02/09
直接用winhex打开全部复制到Brainfuck/Ook!中解码得到flag。
日期:2020/02/08
先下载zsteg,用命令apt-get install zsteg
下载失败,百度了一下,还可以用gem install zsteg
下载。
然后直接zsteg 瞅啥.bmp
得到flag。
日期:2020/02/08
这道题一如既往的做不出来,看了看题解之后恍然大悟,顺便学学python对图像的操作,希望下次自己能把脚本写出来。参考:Python图像库PIL的类Image及其方法介绍
PIL是python里标准的图像处理库,可以对显示后的图像进行多种可视化处理操作。
Image类是PIL中的核心类,你有很多种方式来对它进行初始化,比如从文件中加载一张图像,处理其他形式的图像,或者是从头创造一张图像等。Image模块操作的基本方法都包含于此模块内。如open、save、conver、show…等方法。下面是PIL的 Image类中常用的方法和属性:
open方法
要从文件加载图像,使用 open() 函数, 在 Image 模块(类):
from PIL import Image ##调用库,包含图像类
im=Image.open('D:\\desktop\\ctf\\to_do.png') ##文件存在的路径,如果没有路径就是当前目录下文件
im.show()
使用save方法将jpg 转换成png
用 Image 类的 save() 方法保存文件的文件,使用给定的文件名保存图像。
from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
print(im)
im.save("D:\\desktop\\ctf\\to_do.jpg") ## 将"3d.png"保存为3d.jpg"
mode属性
im.mode ⇒ string
图像的模式,常见的mode 有 “L” (luminance) 表示灰度图像,“RGB”表示真彩色图像,和 “CMYK” 表示出版图像,表明图像所使用像素格式。如下表为常见的nodes描述:
from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
print(im.mode) ## 打印模式属性
为图像分配内存并从文件中加载它(或者从源图像,对于懒操作)。正常情况下,用户不需要调用这个方法,因为在第一次访问图像时,Image类会自动地加载打开的图像。目前的版本,方法load()返回一个用于读取和修改像素的像素访问对象。这个访问对象像一个二维队列,如:
pix = im.load()
print pix[x, y]
pix[x, y] =value
size属性
im.size ⇒ (width, height)
图像的尺寸,按照像素数计算,它的返回值为宽度和高度的二元组(width, height)。
from PIL import Image
im = Image.open("3d.jpg")
print(im.size)
from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
print im.size[0]
使用给定的变量mode和size生成新的图像。Size是给定的宽/高二元组,这是按照像素数来计算的。对于单通道图像,变量color只给定一个值;对于多通道图像,变量color给定一个元组(每个通道对应一个值)。在版本1.1.4及其之后,用户也可以用颜色的名称,比如给变量color赋值为“red”。如果没有对变量color赋值,图像内容将会被全部赋值为0(为黑色)。如果变量color是空,图像将不会被初始化,即图像的内容全为0。这对向该图像复制或绘制某些内容是有用的。
from PIL import Image
im = Image.open("D:\\desktop\\ctf\\to_do.png")
n_im= Image.new("RGB", (128, 128), "#FF0000")
n_im.show()
from PIL import Image
im1 = Image.open("to.png")
im2 = Image.open("to_do.png")
p1 = im1.load()
p2 = im2.load()
w = im1.size[0]
h = im1.size[1]
im = Image.new('RGB',(290,289))
p = im.load()
for i in range(w):
cnt = 0
for j in range(h):
if p1[i, j] != p2[i, j]:
p[i,j] = (255,255,255)
im.show()
日期:2020/02/08
得到字符串:
0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113
数字到7为止猜测是八进制,写个脚本转为字符串:
import re
import sys
s='0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 0105 0132 0163 0131 0127 0143 066 0111 0105 0154 0124 0121 060 0116 067 0124 0152 0102 0146 0115 0107 065 0154 0130 062 0116 0150 0142 0154 071 0172 0144 0104 0102 0167 0130 063 0153 0167 0144 0130 060 0113 '
a=re.findall('\d{3,}',s)
for i in a:
sys.stdout.write(chr(int(i,8)))
#V2VsbCBkb25lIQoKIEZsYWc6IElTQ0N7TjBfMG5lX2Nhbl9zdDBwX3kwdX0K
日期:2020/02/07
日期:2020/02/07
一,oursecret密码为绿色数字
二,zip爆破
三,明文攻击
四,伪加密
五,双重加密:栅栏密码,凯撒密码
日期:2020/02/06
日期:2020/02/04
这道题的难点就在于发现文件内容是翻转的,我还特意看了看文件头,没找到对应的文件就没有多想,下次注意点。
s = "9DFF700DB6DAFC937263282222BDD218B425D4... ....FF8DFF"
x = s[::-1]
print x
python中[-1]、[:-1]、[::-1]、[2::-1]的使用方法
a=[1,2,3.4,5]
print(a[-1]) #取最后一个元素 [5]
print(a[:-1]) # 除了最后一个取全部 [ 1 2 3 4 ]
print(a[::-1]) # 取从后向前(相反)的元素 [ 5 4 3 2 1 ]
print(a[2::-1]) #取从下标为2的元素翻转读取 [ 3 2 1 ]
print(a[::-2]) #[5,3,1]
xxd -p 文件名 | tr -d '\n' | rev | xxd -r -p > 更改后的文件名
1,|
|
表示管道,上一条命令的输出,作为下一条命令参数。
2,xxd命令
-p
以一个整块输出所有的hex, 不使用空格进行分割。
-r
反转操作,将16进制专程2进制
3,tr命令
-d '\n '
删除字符串中所有’ \n '空格。
4,rev命令
rev
将文件中的每行内容以字符为单位反序输出,即第一个字符最后输出,最后一个字符最先输出,依次类推。
convert -flop reversed reversed.jpg
convert命令详解:
convert -flip 上下翻转。
convert -flop 左右翻转。
要用convert命令还要先下载ImageMagick软件,使用命令apt-get install ImageMagick
,但是我这里报错E:无法定位软件包 ImageMagick
,百度了一下要在etc/apt 的sources.list 修改镜像源,这一更新更新了好久,,,
参考:https://blog.csdn.net/qq_42092076/article/details/88357387
更新之后还是没有解决问题,于是我在windows上安装一个imagemagick使用。
参考:Windows系统安装及初步使用ImageMagick
最后发现将 ImageMagick改为imagemagick小写的就可以了,,,,,,,,,晕
日期:2020/02/04
将文件拖进kali,更改文件名为abc,然后file abc
查看文件类型。
然后 tar xjvf abc
解压文件。
发现是拿到了.get目录,然后根据网上的方法知道了 git stash
。
然后运行脚本得到falg。
日期:2020/02/04
题目说了Modbus,百度了一下是一个通讯协议。
先在包里搜索flag没有搜到,然后把Modbus协议追踪tcp流在里面找到了flag,但是还要加个o,,,
日期:2020/02/04
直接搜索字符串得到flag。
日期:2020/01/25
直接用winhex打开得到flag。
# János-the-Ripper(ARCHPR爆破)
日期:2020/01/25
解压出来winhex发现仍是压缩文件,改后缀为zip,打开后是txt加密文件。
然后用ARCHPR爆破
日期:2020/01/25
解压后打开是一串字符。
666c61677b68656c6c6f5f776f726c647d
日期:2020/01/25
下载附件,使用StegSolve打开,切换到左一视图时看到如下图片
扫描二维码得到一串十六进制数字
03F30D0AB6266A576300000000000000000100000040000000730D0000006400008400005A00006401005328020000006300000000030000000800000043000000734E0000006401006402006403006404006405006406006405006407006708007D00006408007D0100781E007C0000445D16007D02007C01007400007C0200830100377D0100712B00577C010047486400005328090000004E6941000000696C000000697000000069680000006961000000694C0000006962000000740000000028010000007403000000636872280300000074030000007374727404000000666C6167740100000069280000000028000000007307000000746573742E7079520300000001000000730A00000000011E0106010D0114014E280100000052030000002800000000280000000028000000007307000000746573742E707974080000003C6D6F64756C653E010000007300000000
从开头03F3可知时pyc文件,保存为1.pyc
python反编译,介绍一个在线python反编译网站:python反编译在线工具
def flag():
str = [
65,
108,
112,
104,
97,
76,
97,
98]
flag = ''
for i in str:
flag += chr(i)
print flag
def flag():
str = [
65,
108,
112,
104,
97,
76,
97,
98]
flag = ''
for i in str:
flag += chr(i)
print flag
flag()
日期:2020/01/27
下载好文件之后解压,发现里面有个没有后缀的文件,放到winhex里观察,文件头是1f8b0800
,百度搜了搜发现是gzip文件的文件头,于是把后缀改为zip。打开里面有一首歌。
然后应该是音频隐写类的题目,上网搜了搜这类题怎么做,结果示例的第二题就是原题,,,
CTF中音频隐写的一些整理总结
用audacity 打开这个音频文件,然后调至频谱图,出现flag。