GKCTF(MISC&CRYPTO部分)(未完待續。。)

寫在前面:

嘎嘎,又是被比賽虐的一天(連續虐了三天嗚嗚嗚,安恆月賽等等在寫嘎嘎)

部分wp,剩下的一題目前還不會,這次可能會標未完待續嘎嘎

crypto

0x01小學生的密碼學

嘎,看到題目描述

e(x)=11x+6(mod26) 密文:welcylk (flag爲base64形式)

果然是我們小學二年級就能一眼看出的仿射密碼呢(纔不是嘞,要不是我之前見過,我可能就在這題掛掉了)

話不多說,直接上腳本(小聲bb:我感jio看看加密原理可以手撕~)

def affine(a,b):
	pwd = {}
	for i in range(26):
		pwd_dic[chr(((a*i+b)%26+97))] = chr(i+97)
	return pwd_dic

if __name__ == '__main__':
	pwd_dic = {}
	pwd = 'welcylk'
	pwd = pwd.lower()
	plain = []
	pwd_dic = affine(11,+6)
	for i in pwd:
		plain.append(pwd_dic[i])
	print ("Flag is :" + "".join(plain))

所以結果是 sorcery 啦
然後base64加密

flag{c29yY2VyeQ==}

over

0x02漢字的祕密

所以暫時將你眼睛閉了起來~

(不知道爲什麼寫wp一直重複這句歌詞)

扯回正題啊喂,以上與本題無關嘎嘎

得到題目是幾個漢字,如下:

王壯 夫工 王中 王夫 由由井 井人 夫中 夫夫 井王 土土 夫由 土夫 井中 士夫 王工 王人 土由 由口夫

啊~回想見過的密碼與漢字有關的就是當鋪加密啦

他的精髓就是漢字筆畫的出頭數,所以什麼漢字都無所謂啦(畫個重點嘎)

根據本題所給的漢字,我們得到如下數字串

69 74 62 67 118 83 72 77 86 55 71 57 82 57 64 63 51 107

看着是不是很像ASCII嘎嘎?

嘿嘿,它當然是ASCII碼啦

EJ>CvSHMV7G9R9@?3k

但是是不是找出來什麼規律?

別急,我們仔細觀察

你看前四個數字是不是跟flag的ASCII碼有關係!!

經過我們仔細思考,得到如下規律

i=i+1,原來的ASCII+他所在的位置就是他代表的真實的字母啦

(說白了就是變異凱撒)

(真的好不專業啊喂)

flag{you_are_good}

bingo(^_-)

0x03babycrypto

嘎嘎,本題是在chrisyy師傅的指導下做出來的~在此膜一下密碼學爺爺

(腳本也是來自chrisyy師傅噠)(附上密碼學爺爺的博客嘎嘎http://blog.chrisyy.top/

題目如下,感受一下絕望

這個n根本就分解不出來,有619位(╭(╯^╰)╮)

# n:0xb119849bc4523e49c6c038a509a74cda628d4ca0e4d0f28e677d57f3c3c7d0d876ef07d7581fe05a060546fedd7d061d3bc70d679b6c5dd9bc66c5bdad8f2ef898b1e785496c4989daf716a1c89d5c174da494eee7061bcb6d52cafa337fc2a7bba42c918bbd3104dff62ecc9d3704a455a6ce282de0d8129e26c840734ffd302bec5f0a66e0e6d00b5c50fa57c546cff9d7e6a978db77997082b4cb927df9847dfffef55138cb946c62c9f09b968033745b5b6868338c64819a8e92a827265f9abd409359a9471d8c3a2631b80e5b462ba42336717700998ff38536c2436e24ac19228cd2d7a909ead1a8494ff6c3a7151e888e115b68cc6a7a8c6cf8a6c005L
# e:65537
# enc:1422566584480199878714663051468143513667934216213366733442059106529451931078271460363335887054199577950679102659270179475911101747625120544429262334214483688332111552004535828182425152965223599160129610990036911146029170033592055768983427904835395850414634659565092191460875900237711597421272312032796440948509724492027247376113218678183443222364531669985128032971256792532015051829041230203814090194611041172775368357197854451201260927117792277559690205342515437625417792867692280849139537687763919269337822899746924269847694138899165820004160319118749298031065800530869562704671435709578921901495688124042302500361
# p>>128<<128:0xe4e4b390c1d201dae2c00a4669c0865cc5767bc444f5d310f3cfc75872d96feb89e556972c99ae20753e3314240a52df5dccd076a47c6b5d11b531b92d901b2b512aeb0b263bbfd624fe3d52e5e238beeb581ebe012b2f176a4ffd1e0d2aa8c4d3a2656573b727d4d3136513a931428b00000000000000000000000000000000Lnhenda 

首先看到n很大,那麼這道題肯定就不是通過分解n來做題
再看p是給了部分高位p(這個一定不是最終的p,因爲他不是質數,爲什麼不是質數,因爲轉成十進制可以整除5嘎嘎)

所以這道題是用Coppersmith定理來做題嘎嘎

那麼~接下來進入做題時間

腳本如下,能看懂的師傅可以多看兩眼,看不懂的師傅(比如我,知道如何把數帶進去就好嘎嘎)跳過代碼看下面

from Crypto.Util.number import *
n = 0xb119849bc4523e49c6c038a509a74cda628d4ca0e4d0f28e677d57f3c3c7d0d876ef07d7581fe05a060546fedd7d061d3bc70d679b6c5dd9bc66c5bdad8f2ef898b1e785496c4989daf716a1c89d5c174da494eee7061bcb6d52cafa337fc2a7bba42c918bbd3104dff62ecc9d3704a455a6ce282de0d8129e26c840734ffd302bec5f0a66e0e6d00b5c50fa57c546cff9d7e6a978db77997082b4cb927df9847dfffef55138cb946c62c9f09b968033745b5b6868338c64819a8e92a827265f9abd409359a9471d8c3a2631b80e5b462ba42336717700998ff38536c2436e24ac19228cd2d7a909ead1a8494ff6c3a7151e888e115b68cc6a7a8c6cf8a6c005L
e = 65537
c = 1422566584480199878714663051468143513667934216213366733442059106529451931078271460363335887054199577950679102659270179475911101747625120544429262334214483688332111552004535828182425152965223599160129610990036911146029170033592055768983427904835395850414634659565092191460875900237711597421272312032796440948509724492027247376113218678183443222364531669985128032971256792532015051829041230203814090194611041172775368357197854451201260927117792277559690205342515437625417792867692280849139537687763919269337822899746924269847694138899165820004160319118749298031065800530869562704671435709578921901495688124042302500361
high_p = 0xe4e4b390c1d201dae2c00a4669c0865cc5767bc444f5d310f3cfc75872d96feb89e556972c99ae20753e3314240a52df5dccd076a47c6b5d11b531b92d901b2b512aeb0b263bbfd624fe3d52e5e238beeb581ebe012b2f176a4ffd1e0d2aa8c4d3a2656573b727d4d3136513a931428b00000000000000000000000000000000L

R.<x> = PolynomialRing(Zmod(n), implementation='NTL')
p = high_p + x
x0 = p.small_roots(X = 2^128, beta = 0.1)[0]

P = int(p(x0))
Q = n // P

assert n == P*Q
d = inverse_mod(65537, (P-1)*(Q-1))
print(long_to_bytes(power_mod(c, d, n)))

重點來咯!!!這個腳本要在sage下運行
下載sage(大概七百八M)解壓安裝,

雙擊notebook(這個得在跑腳本的時候一直開着)

會自動跳出來一個home的網頁,

在右上角新建sage,將腳本直接貼進去,運行就好啦(如果你還沒有看懂的話,歡迎私聊嘎嘎)

所以最後flag是

flag{3d0914a1-1e97-4822-a745-c7e20c5179b9}

over嘎嘎

Misc

0x01簽到題

打開鏈接即可得到flag

開胃菜,沒啥好寫的,忘記截圖了(主要是每次都是習慣賽後寫wp,老是忘記記錄解題步驟

大概flag就是flag{xxx_xxx_xxx}

嘎(皮一下很開心)

0x02Pokeman

精靈寶可夢,來一段回憶殺吧

拿到題目是份遊戲說明和一個gba文件,啊,百度一下gba,發現是任天堂公司的遊戲

(這裏根據題目提示也可知是精靈寶可夢這款遊戲)

打開的話需要用到模擬器——VisualBoyAdvance(1.8CN)

https://dl.3dmgame.com/patch/147353.html(模擬器下載地址)

然後載入文件,一直向下就好 嘎嘎,瘋狂按Z,

去到野外去到103道路即可成功get到flag(題目描述啦)
圖片

最後flag是flag{PokEmon_14_CutE}

嘎over

0x03 Harley Quinn

啊,題目給了一段音頻和一張圖片

做題後期還給了兩個hint

hint1:電話音&九宮格

hint2:FreeFileCamouflage,下載的文件可能顯示亂碼

我拿到題目的思路是先看了看圖片,發現最後有一段類似base64編碼的東西存在,但是解碼發現並不是那麼簡單。在其他方面並沒有找到有價值的線索,於是我們繼而分析音頻

音頻的話就簡單直接了當多了,前面沒什麼特別,聽到最後發現有dtmf音

看了看就幾個,然後題目提示說工具提取dtmf音可能會有亂碼,所以這裏我是用的手工提取嘎嘎

手工提取方法請看第一篇博客——MRCTF的misc第三題尋找xxx 嘎

圖片

手工分析的結果是

#222833344477773338866#

這時我們看第一條hint,電話撥號+九宮格,

九宮格就很明顯的拼音九鍵啦

即 ctfisfun

這時我們並沒有獲得需要下一步的線索,這裏我們合理猜測是個密鑰嘎嘎

但是我們目前還沒有獲得一個需要密鑰的文件,而且圖片我們還沒有用到

這個時候第二個hint放出來了,是一個工具FreeFileCamouflage

題目也有提示說解密版本是1.25,

於是我們去百度這個工具的1.25版本,下載,啓動

加載圖片試一試,發現需要密鑰,正好我們之前剛剛得到新鮮出爐的密鑰

正正好產生了一個名爲flag.txt的文件嘎

開心心,成功得到flag

flag{Pudd1n!!_y0u_F1nd_m3!}

0x04code obfuscation

咔咔咔,重點來嘍

下載附件得到一個被人玩壞了的二維碼

圖片

看到這個亞子不要慌,打開我們的神器——PS,直接暴力修圖CfjxaPF

(因爲掃碼的時候是有糾錯噠,所以粗糙一點也沒什麼)

(害,成大事者就要不拘小節嘎)

下面我們說一說PS修圖方法(從不p圖的手殘人士在線教人——你,敢學嗎?)

沙雕完了來說正事

先用截圖(專業點就是裁剪工具)中的不規則截圖(專業點來說叫透視裁剪工具)給他盤成大差不離的正方形,然後掏出我們的畫筆工具,把他該是黑色的全都給他塗成黑色

圖片

嘎,我真是個鬼才

掃碼得到base(gkctf)

提交發現並不是真的flag,所以這道題還沒有結束

遇事不決就看binwalk嘎

扔Kali裏分離一下

(這裏我試的時候foremost並不會出來壓縮包,但是binwalk -e可以)

(binwalk -e 命令在我的2019版本的Kali也不會出來文件夾,在Kali2020版本纔可以)

或者像我一樣懶得開虛擬機,放010裏發現圖片最後有個rar壓縮包,

(那麼這裏插播一個小白問題,如何發現圖片最後有壓縮包?

我們都知道png圖片文件十六進制

開頭是89 50 4E 47 0D 0A 1A 0A 00 00 00 0D 49 48 44 52(大概就是PNG.........IHDR)

結尾是49 45 4E 44 AE 42 60 82(大概是IEND)

那麼多出的部分就是不屬於原圖片文件中的部分,不屬於圖片文件那是什麼文件呢?

rar文件開頭是52 61 72 21(開頭是Rar樣式)
所以判斷圖片後面還有一個壓縮包文件。
over)

我們直接新建十六進制文件,將圖片多餘部分複製粘貼到新的十六進制文件裏,另存爲rar文件就OK啦

雙擊打開發現有密碼,想到之前掃碼得到的結果,輸入並不對,看到base想到應該是吧gkctf加密後填入的吧

然後就在base家族裏嘗試

(附:base家族:16,32,58,64,85,91)

(歡迎各位路過大佬補充base家族成員嘎)

在嘗試了平常常用的base16,32,64無果後,開始嘗試base58,加密後密碼爲CfjxaPF

發現果真是壓縮包密碼。

(小聲bb,我感覺這個密碼也可以爆出來哦,如果實在修不了二維碼的話

但是可惜的是我沒有成功(/頭禿.jpg)可能是工具的問題吧)

解壓壓縮包後得到一個1文件和一個flag3.jpg的圖片

(說實話到這一步我以爲有四層加密呢,害)

圖片內容是一串串奇奇怪怪的文字
圖片
分析圖片也沒有得到什麼結果,嗯,那我們看一看另一個文件

用sublime打開後發現是js混淆(別問,問就是經驗)

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\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,{}))

用在線網站反混淆一下下
(這裏提供一個在線網站https://www.jisuan.mobi/p6Hm3bB1Bbm66xiS.html

實話說,感覺還挺好用)

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 ';")

分析代碼得上面一串串代碼意思就是Bk=空格,Cb=;,Da=0,Aa=a這個樣子
所以對照上面代碼將圖片代表內容寫出來就好啦

#include <stdio.h>
int main(){
print('w3lc0me_4o_9kct5');
return 0;
}

所以最後flag就是
flag{w3lc0me_4o_9kct5}

over嘎

0x05Sail a boat down the river

這個目前還沒覆盤,先鴿這

嘿嘿,未完待續。。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章