跳至正文

NSS Round 4 Misc BlockChain 出题人笔记

前记

咕,这篇出题人笔记原本是赛前写好的,由于种种原因导致 delay 了,现在就正好补一下,出题人笔记重点不是 Writeup 本身而是出题过程的一个分享(说白了就是讲废话)

一开始出题就定了个基调,1 个图片,1 个音频,1 个创意(?)题

Pixel_Signin

其实这道图片隐写,是实在想不到加上 Xenny 说偏入门一点,就想到练下大家的基本功(说白了就是出题人太菜题目出不来难题)

出题脚本(并没有优雅的用文件读取)

from PIL import Image
image = Image.new('RGB', (31, 31), (0, 0, 0))
pixel = image.load()
# image.save('test.jpg')
# image.close()
# image = Image.open('test.jpg')
str = "Gur dhvpx oebja sbk whzcf bire gur ynml qbt vf na Ratyvfu-ynathntr cnatenz—n fragrapr gung pbagnvaf nyy gur yrggref bs gur nycunorg. Gur cuenfr vf pbzzbayl hfrq sbe gbhpu-glcvat cenpgvpr, grfgvat glcrjevgref naq pbzchgre xrlobneqf, qvfcynlvat rknzcyrf bs sbagf, naq bgure nccyvpngvbaf vaibyivat grkg jurer gur hfr bs nyy yrggref va gur nycunorg vf qrfverq.Gur rneyvrfg xabja nccrnenapr bs gur cuenfr jnf va Gur Obfgba Wbheany. Va na negvpyr gvgyrq Pheerag Abgrf va gur Sroehnel , rqvgvba, gur cuenfr vf zragvbarq nf n tbbq cenpgvpr fragrapr sbe jevgvat fghqragf N snibevgr pbcl frg ol jevgvat grnpuref sbe gurve chcvyf vf gur sbyybjvat, orpnhfr vg pbagnvaf rirel yrggre bs gur nycunorg N dhvpx oebja sbk whzcf bire gur ynml qbt. Qbmraf bs bgure arjfcncref choyvfurq gur cuenfr bire gur arkg srj zbaguf, nyy hfvat gur irefvba bs gur fragrapr fgnegvat jvgu N engure guna Gur. Gur rneyvrfg xabja hfr bs gur cuenfr fgnegvat jvgu Gur vf sebz gur  obbx Vyyhfgengvir Fubegunaq ol Yvaqn Oebafba. Gur zbqrea sbez fgnegvat jvgu Gur orpnzr zber pbzzba rira gubhtu vg vf fyvtugyl ybatre guna gur bevtvany fgnegvat jvgu N.N  rqvgvba bs gur Ybf Natryrf Urenyq Fhaqnl Zntnmvar erpbeqf gung jura gur Arj Lbex Urenyq jnf rdhvccvat na bssvpr jvgu glcrjevgref n srj lrnef ntb, fgnss sbhaq gung gur pbzzba cenpgvpr fragrapr bs abj vf gur gvzr sbe nyy tbbq zra gb pbzr gb gur nvq bs gur cnegl qvq abg snzvyvnevmr glcvfgf jvgu gur ragver nycunorg, naq ena bagb gjb yvarf va n arjfcncre pbyhza. AFFPGS{Unehxv_vf_AFF_FHCREZNA_fb_guvf_gnfx_vf_rnfl} Gurl jevgr gung n fgnss zrzore anzrq Neguhe S. Phegvf vairagrq gur dhvpx oebja sbk cnatenz gb nqqerff guvf.Nf gur hfr bs glcrjevgref terj va gur yngr gu praghel, gur cuenfr ortna nccrnevat va glcvat yrffba obbxf nf n cenpgvpr fragrapr. Rneyl rknzcyrf vapyhqr Ubj gb Orpbzr Rkcreg va Glcrjevgvat N Pbzcyrgr Vafgehpgbe Qrfvtarq Rfcrpvnyyl sbe gur Erzvatgba Glcrjevgre , naq Glcrjevgvat Vafgehpgbe naq Fgrabtencuref Unaq-obbx. Ol gur ghea bs gur gu praghel, gur cuenfr unq orpbzr jvqryl xabja. Va gur Wnahnel ,vffhr bs Cvgznaf Cubargvp Wbheany, vg vf ersreerq gb nf gur jryy xabja zrzbevmrq glcvat yvar rzoenpvat nyy gur yrggref bs gur nycunorg. Eboreg Onqra-Cbjryyf obbx Fpbhgvat sbe Oblf  hfrf gur cuenfr nf n cenpgvpr fragrapr sbe fvtanyvat.Gur svefg zrffntr frag ba gur Zbfpbj–Jnfuvatgba ubgyvar ba Nhthfg , , jnf gur grfg cuenfr GUR DHVPX OEBJA SBK WHZCRQ BIRE GUR YNML QBTF ONPX . Yngre, qhevat grfgvat, gur Ehffvna genafyngbef frag n zrffntr nfxvat gurve Nzrevpna pbhagrecnegf, Jung qbrf vg zrna jura lbhe crbcyr fnl Gur dhvpx oebja sbk whzcrq bire gur ynml qbt? Qhevat gur gu praghel, grpuavpvnaf grfgrq glcrjevgref naq gryrcevagref ol glcvat gur fragrapr.Vg vf gur fragrapr hfrq va gur naahny Mnare-Oybfre Angvbany Unaqjevgvat Pbzcrgvgvba, n phefvir jevgvat pbzcrgvgvba juvpu unf orra uryq va gur H.F. fvapr ."
for i in range(31*31):
    if i * 3 < 2838:
        b_w = ord(str[i*3 + 2])
        r_w = ord(str[i*3])
        g_w = ord(str[i*3 + 1])
        # pixel[30 - i % 31, 30 - i // 31] = (r_w, g_w, b_w)
        pixel[i % 31, i // 31] = (r_w, g_w, b_w)
image.save('test8.png')
image.close()

平常没用过 Pillow(是的一个做 Misc 的人平常用 Pillow 靠队友)想着之后不能依靠队友了就顺便练一下。

这里原本想用单表替换的但是呢,换了下干脆用 ROT 13 了,因为文本实在太长,原本想整点活搞维吉尼亚什么的,后面发现效果太差因为只要提取少了一位,就直接炸容错率太低了所以还是换成凯撒了。

Type Message

音频隐写因为之前很多都出过了,正好当时在和 Haruki 聊天,他在打电话就想着出 DTMF ,然后找了个工具 http://dialabc.com/sound/generate/

然后想着太简单了,不想白给,就反正是拨号盘,就塞个九键加密进去,正好模仿用模拟信号传递消息的情况,其实原本想出个难点的在模拟信号中交换 Key 然后发送消息来解密,但是太麻烦了,加上不好做分格,自己没把逆向写出来就不敢出了,不然就是纯纯苦力题

Knight’s Tour

这道题的原型是 CCBC11 Chessboard 的削弱版,因为一直 0 解没人做,索性用这个 idea 出 Round 赛了,在我想怎么规划一条合理且尽量无多解的棋盘时,正好 B 站上刷到了一个视频

https://www.bilibili.com/video/BV1Ps411d72P

有现成的非循环棋盘给我用,就直接用了这个路线,在字符串的设计上为了能有足够的标志点所以加了一些标点,正好 k 也是唯一的,这样就能大致确定唯一解+作为起点的提示,如果你按 t 硬找起点其实还是蛮累的而且容易走歪,个人觉得比较优的解法是找到唯一点去倒推会容易很多。

出题棋盘

希望这个小的创意题(其实不太算创意因为不是第一次出现了)大家能喜欢。

Bridge

这道题原本是没有的,但是在筹备的时候正好队里搞项目的人说,跨链取证太麻烦了,就突然想出一个跨链题,原本是自己真的去跨链的因为自己也不是不会,结果看到手续费加上每次我出题都容易犯蠢干蠢事,所以原本不贵 0.9 USDT 突然显得比较贵重就准备去找现成的。

正好最近在逛社区看到欧科云链出了个 Defi 追踪器里面正好有跨链数据,就想在里面找一对

Defi 追踪器

因为过滤后都是单向的,所以就代表着我自己得先做出来。

大额交易相对较少,我就过滤了 1000 以下的,找个 AnySwap 的数据记录交易时间,去反向找另外一个,所以这道题不止可以看合约数据还可以去找追踪器里面的特征

BSC-OKC:

https://www.oklink.com/zh-cn/bsc/tx/0xf787c44151fe21da13c213e3adaa7796176e09b9364eb6f52aa43e387ce4b4

OKC-BSC:

https://www.oklink.com/zh-cn/okc/tx/0xec557dbfacbc8a539346adcd2fbf6dfc3722409db3c852a8a44bc6bc660e6e7b

这样就找好了一组,原本是正向,但是我看 BSC-OKC 我实在找不到怎么合理不运用工具的完成,就看看倒着,因为里面正好有原始地址的数据就拿来出题了,所以严格来说这种题不算是正统 BlockChain 的题目,但是还是不敢扔在 Misc 区,容易被骂就放在 ETH 了。

后记

希望这次我个人的出题笔记能给大家一些奇奇怪怪的灵感,难得出对外比赛的题,希望师傅们还玩的开心,我们下次比赛见.doge

Writeup

本次 Writeup 我不想以出题人角度写,所以又抓了一位出题人让他做出来之后写 Writeup,就一起贴上啦

pixel_signin

拿到一个png图片,使用stegsolve ,在LSB通道下查看发现有点东西

image

同理看到其他几个通道也有东西

最后在全通道下看到完整数据

发现有可疑的东西

image-1659364853751

观察发现是个单表加密,最后rot13解出

image-1659364950858
Type Message

解压得到四个音频文件,听声音是电话按键,结合文件名搜索DTMF,找到一个在线解析网站,解的结果如下
D
image-1659366942475
T
image-1659366992143
M
image-1659367024959
F
image-1659367080208

结合题目名和手机按键很容易想到9键输入法

最后解得FLAG: NSSCTF DTMFIS REALLY EASY =》 NSSCTF{DTMFISREALLYEASY}

Knight’S Tour

拿到ChessBoard.zip压缩包,发现打不开,拖进IDA里看一看
image-1659447778386

好家伙,zip竟然是rar的头,直接修改头为\x50\x4b\x03\x04 就可以正常解压

解压后得到图片
image-1659448134269

观察分析,发现上面8×8的格子中正好对应下面的字母,应该是照顺序打乱了,结合题目Knight’s Tour,可以找到这样一个游戏

image-1659448336275

根据游戏规则可以得到下面结果

image-1659448402366

这里跟据第一列全为红色,每排有8个,只有两种颜色可以推测(脑洞)出红色代表0 黄色代表 1

解出来为Ch1v@lry,即为flag

Bridge

题目

OKC 地址 0x26eD1a5Ce072aB407C9d24b434f9be43b9ADDCe5 发生了大额快进快出,经过溯源可以找到他来源于一个 BSC 地址,请找出该 Bridge 在 BSC 上的交易tx NSSCTF{0x****************************************************************}

根据题意在 OKC 链查询该地址,发现有一个来源,继续跟踪

image-20220803213507780

打开交易查询

image-20220803214429025

跟进地址发现跨链桥交易(anyUSDT)

跟进交易

image-20220803214624854

从 66 号链到 56 号链,虽然没有直说是哪两个链,但题目既然说了是 OKC 到 BSC 那就去 BSC 查下这个地址。

image-20220803215248716

找到该地址了,那这个交易哈希即为要求的flag

发表回复