GKCTF2020_Misc_复现

GKCTF2020_Misc_复现

code obfuscation

k e y w o d s : keywods: keywods: js混淆替换密码

得到一张斜着的二维码图片,中间还被分割了一下

使用PS把分割的部分接回去(不要留白),扫描二维码得到

base(gkctf)

使用editor010打开图片数据,数据报错,显然是加了一些其他的东西进去;最简单的方式:binwalk一下

得到一个压缩包,需要密码

根据题目hint

压缩包密码是加密过的

那么这个base(gkctf)就是用在这的了

把常见的base都加密gkctf一下,比如base32,base52,base64等等;最后是base52的加密结果可以解压压缩包

得到一张图片以及

eval(function(p,a,c,k,e,d){e=function©{return(c35?String.fromCharCode(c+29):c.toString(36))};if(!’’.replace(/^/,String)){while(c–)d[e©]=k[c]||e©;k=[function(e){return d[e]}];e=function(){return’\w+’};c=1;};while(c–)if(k[c])p=p.replace(new RegExp(’\b’+e©+’\b’,‘g’),k[c]);return p;}(‘15 n 14 a b c d e f g h i j k l m n o p q r s t u v w x y z 10 11 17="n"12 15 n 14 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 10 11 17="n"12 13=0 15 n 14 a b c d e f g h i j 10 11 16="n"13=$((13+1))12 1g("1f=’ ‘;1e=’"’;16=’#’;1j=’(’;1i=’)’;1h=’.’;1a=’;’;19=’<’;18=’>’;1d=‘1c’;1b=’{’;1k=’}’;1t=‘0’;1u=‘1’;1s=‘2’;1r=‘3’;1n=‘4’;1m=‘5’;1l=‘6’;1q=‘7’;1p=‘8’;1o=‘9’;")’,62,93,’||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||do|eval|done|num|in|for|Bn|An|Ce|Cc|Cb|Cn|_|Cl|Bm|Bk|alert|By|Bt|Bs|Cp|Dg|Df|De|Dj|Di|Dh|Dd|Dc|Da|Db’.split(’|’),0,{}))

根据js压缩、混淆、加密的特点 js压缩、混淆和加密 - 简书 (jianshu.com)

压缩:删除 Javascript 代码中所有注释、跳格符号、换行符号及无用的空格,从而压缩 JS 文件大小,优化页面加载速度。

混淆:经过编码将变量和函数原命名改为毫无意义的命名(如function(a,b,c,e,g)等),以防止他人窥视和窃取 Javascript 源代码,也有一定压缩效果。

加密:一般用eval方法加密,效果与混淆相似,也做到了压缩的效果。

那么可以判断这就是js压缩混淆了(也对应了题意:代码混淆),在线工具 JS混淆加密压缩 - 站长工具 (chinaz.com)

解密之后得到

for n in a b c d e f g h i j k l m n o p q r s t u v w x y z do eval An = "n"
    done
for n in A B C D E F G H I J K L M N O P Q R S T U V W X Y Z do eval An = "n"
    done
    num = 0
for n in a b c d e f g h i j do eval Bn = "n"
    num =
    $((num + 1)) done alert("Bk=' ';Bm='"
        ';Bn='#
        ';Bs=' (';Bt=')
        ';By='.
        ';Cb=';
        ';Cc=' < ';Ce=' > ';Cl='
        _ ';Cn=' {
            ';Cp='
        }
        ';Da='
        0 ';Db='
        1 ';Dc='
        2 ';Dd='
        3 ';De='
        4 ';Df='
        5 ';Dg='
        6 ';Dh='
        7 ';Di='
        8 ';Dj='
        9 ';")

仔细观察发现就是替换密码表,注意一点就是字母的替换是以A开头的密文,比如Ai实际上明文中是i

解密脚本

c = "$Bn$Ai$An$Ac$Al$Au$Ad$Ae$Bk$Cc$As$At$Ad$Ai$Ao$By$Ah$Ce$Ai$An$At$Bk$Am$Aa$Ai$An$Bs$Bt$Cn$Ap$Ar$Ai$An$At$Bs$Bm$Aw$Dd$Al$Ac$Da$Am$Ae$Cl$De$Ao$Cl$Dj$Ak$Ac$At$Df$Bm$Bt$Cb$Ar$Ae$At$Au$Ar$An$Bk$Da$Cb$Cp"
dic = {"Bk":' ',"Bm":'"',"Bn":'#',"Bs":"(","Bt":")","By":".","Cb":";","Cc":"<","Ce":">","Cl":"_","Cn":"{","Cp":"}","Da":"0","Db":"1","Dc":"2","Dd":"3","De":"4","Df":"5","Dg":"6","Dh":"7","Di":"8","Dj":"9"}
ls = c.split("$")
print(ls)
for i in ls:
    if "A" in i:
        print(i[1],end="")
    if i in dic:
        print(dic[i],end="")

Harley Quinn

k e y w o r d s : keywords: keywords: FreeFileCamouflage电话音

开局得到一个wav文件以及图片

hint:电话音&九宫格

hint:FreeFileCamouflage

关于Free File Camouflage Free File Camouflage免费版下载_文件伪装图片工具下载_3DM软件 (3dmgame.com)

Free File Camouflage(文件伪装图片工具)是一款能够将文件伪装成图片隐藏的工具,利用软件用户能将一些自己的私密日记或者私密软件伪装成图片存放

所以很可能有信息藏在了得到的jpg中(由于Free File Camouflage只识别jpg文件,而题目给的是jpeg,改一下后缀名即可,两者是等价的)

但是发现要使用Free File Camouflage解密需要密钥;进而转向wav文件看一下

audacity打开wav文件,发现文件末尾有疑似电话音的部分

使用DTMF2NUM进行识别 DTMF2NUM 0.2

dimf2num.exe -w Heathens.wav

得到数字 222833344477773338866

根据提示九宫格,转换为字母

使用得到的字符串作为密钥对jpg文件进行解密,得到flag

Sail a boat down the river

k e y w r o d s : keywrods: keywrods: Morse数独AES_ECBOvertrue

开局得到一个mp4文件和rar压缩包

压缩包需要密码,先打开mp4看看

是一段监控视频,中间有几帧是二维码,接下来用cqr扫一扫得到一个百度网盘的网址,需要密码

根据题目提示

hint:闪烁的光芒

这个提示显然是对应着视频的,仔细观察,停车杆那里的POS机,在几个时间段会很快地闪烁(一闪一闪的东西很容易联想到Morse密码或者二进制)

使用Kinovea打开,一帧一帧地仔细看闪烁的部分(注意Kinovea没有帧数的说法,每0.03秒的时长即是一帧)

发现闪烁只有两种形式,连续三帧都有闪烁,或者只有一帧闪烁之后熄灭(由于所展现的信息很短,多半是Morse),那么分别对应-.

解码得到

JW8G

带到前面百度网盘中成功进入,网盘内容如下

0 8 1 7 4 0 0 0 0
3 0 2 0 6 8 0 0 0
4 0 6 5 0 0 8 2 0
0 3 0 0 0 0 0 5 6
7 0 4 3 0 9 2 0 1
1 2 0 0 0 0 0 4 0
0 5 9 0 0 4 1 0 8
0 0 0 1 8 0 9 0 2
0 0 0 0 9 7 4 6 0
密文:
efb851bdc71d72b9ff668bddd30fd6bd
密钥:
第一行九宫格从左到右从上到下(原文是第一列,但是根据题目提示是第一行,这就直接改过来了)

第一段是由0到9的数字构成的,完全没想到是数独原本以为可能是棋盘密码之内的

数独的玩法

需要根据9×9盘面上的已知数字,推理出所有剩余空格的数字,并满足每一行、每一列、每一个粗线宫(3*3)内的数字均含1-9,不重复

所以这里的0应该是空格,需要我们自己来填1到9的数字

可以自己来解(看wp说是简单难度);也可以使用在线网站进行直接求解

數獨解算器 (sudoku.name)

得到解出来的数独

GKCTF2020_Misc_复现_第1张图片

根据对密钥的描述

第一行九宫格从左到右从上到下

数独是分为九个宫,在每个宫内也要填入1-9而不重复,所以“第一行九宫格”就意味着前三个宫格,且在这三个宫格中分小行从左到右从上到下提取数字(提取我们自己填的数字而不包括原来题目有的数字,第一次做的话可能都试试才会出正确结果,但是联系到之后的解题过程真的自己解很难解出来)

GKCTF2020_Misc_复现_第2张图片

得到

52693795149137

需要密钥的密文,再根据题目提示

hint:加密方式很常见

首先试试AES和DES

AES的模式选择,因为没有偏移量的提示条件,很可能就是ECB模式

注意这里只能用解密网站来求,自己写脚本推的话会报错(至少我是这样)

# 会报错: Incorrect AES key length (14 bytes)
from Crypto.Cipher import AES

password = b'52693795149137'
aes = AES.new(password,AES.MODE_ECB)
c = b'efb851bdc71d72b9ff668bddd30fd6bd'
m = aes.decrypt(c)
print(m)

解密网站:在线AES加密解密、AES在线加密解密、AES encryption and decryption–查错网 (chacuo.net)

设置

请添加图片描述

输出设置为hex,其他设置随意

得到:

GG0kc.tf

应该就是rar压缩包的密码了,解压得到一个ovea文件,百度知道是乐谱文件需要用Overture打开(网上的Overtrue破解包似乎都下不起了,只能先用试用选项了)

【亲测能用】Overture 5.0中文版【Overture 5破解版】中文破解版下载-羽兔网 (yutu.cn)

打开ovea文件在乐谱之间发现flag的各个片段

应该就是rar压缩包的密码了,解压得到一个ovea文件,百度知道是乐谱文件需要用Overture打开(网上的Overtrue破解包似乎都下不起了,只能先用试用选项了)

【亲测能用】Overture 5.0中文版【Overture 5破解版】中文破解版下载-羽兔网 (yutu.cn)

打开ovea文件在乐谱之间发现flag的各个片段

你可能感兴趣的:(CTF比赛复现,Misc)