2020SCTF


XCTF联赛分站赛-SCTF题解

每次比赛都是本考研🐕为数不多的放松时间,真的开心
高考加油~

由于Nepnep很多师傅去实习了,所以本次参赛的师傅比较少~

Misc

sign-in

铁签到了,tg入群即可拿flag

Dou dizhu

斗地主,永远滴神,我xxx就不信你17张牌能秒了我!
地主赢了出flag,可能有卢老爷名字的加成,一手春天直接带走双开页面IDIOT的大哥~

体验很好下次还来

EasyMisc

拿到一张打不开的图片,放进winhex分析

看到图片名字和前两个字节就可以猜出是hex反序,脚本如下:

a = open('galf_si_erehw.jpg','rb').read()
f = a[::-1]
b = open('flag.jpg','wb').write(f)

之后删除中间的02垃圾数据,补全图片头部即可打开图片

成功打开之后得到一个flag字符串

继续使用Strings分析图片,可以看到有一串密文。

Maybe You are close to flag but U can’t find me~
Maybe You are close to me xoBTuw36SfH4hicvCzFD9ESj
rc4,gb2312



根据提示使用CyberChef解密字符串

Can you hear

我们用接收机收到了来自空间站传来的信息, 尝试解开答案😀.

题目读到一半果断打开RX-SSTV识别wav音频(手机端使用Robot36),错失一血,拿到了三血(淦
奈何第一遍身边有杂音,第二遍识别结果就很清晰了orz

AndroidDisplayBridge

大猫师傅yyds

安卓一加6手机流量分析(国货之光
从流量分析中找到了软件scrcpy,出题人应该是用srcpy绘制了flag

adb协议分析 https://github.com/cstyan/adbDocumentation

思路就是根据wireshark的流量分析,找到带WRTE的数据包,根据里面的datalen把后面的adbdata都提取出来
全部提取出来之后根据源码里面的提示,前12个字节是metadata,头部数据去掉之后丢到ffmpeg里面。
先使用wireshark导出5555来的全部tcp流,然后脚本提取出adb协议的WRTE包数据:

from struct import unpack

f = open('phone_to_pc.bin', 'rb')
current = f.read(4)
out = open('result.bin', 'wb')
remote_id = 134

while f:
    if current == b"WRTE":
        arg0, arg1, data_len, data_crc32 = unpack("<IIII", f.read(16))

        assert(unpack("!I", current)[0] ^ 0xffffffff == unpack("!I", f.read(4))[0])  # magic
        data = f.read(data_len)
        if (arg1 == remote_id):
            print(data_len)
            out.write(data)
        current = f.read(4)
    else:
        current = current[1:4] + f.read(1)

因为前12个字节是metadata,所以写脚本去除

from struct import unpack

f = open('result.bin', 'rb')

f.read(64)

f.read(4)

pending = None

a = open('flag.h264', 'wb')

while True:
    pts = unpack('!q', f.read(8))[0]
    assert(pts == -1 or (pts & 0x8000000000000000) == 0)
    pkt_len = unpack('!i', f.read(4))[0]

    pkt_data = f.read(pkt_len)

    if (pts == -1):
        pending = pkt_data
        continue

      if pending is not None:
        pkt_data = pending + pkt_data
        pending = None

      print(len(pkt_data))
     a.write(pkt_data)

之后将得到的h264数据流使用ffmpeg转化为mp4

ffmpeg -i flag.h264 flag.mp4

打开视频就可以看到出题人绘制flag的操作了

PassWord Lock

大猫师傅tql,就硬看

不分析逻辑,看到在sub_80002F0里面有SCTF地方的字样重点分析,然后找到了触发SWIER这个软中断的的地址0x40010410,看到往里面写了0b10,0b100,0b100,0b1000这样的东西,也就是1,2,3,4然后居然就做出来了,

这里的关键在于理解这个函数后面的部分:

0x388的函数里面向串口寄存器写入了一个u8值,并进行了循环等待,结合ascii特征,可以认为这里在进行单字符的串口写入。

下面的0x3F0函数进去之后发现什么都没做(只是执行了空循环体),可以判断为sleep(单片机由于每条指令的执行时间是确定的,sleep可以直接用循环/nop实现)。

也就是说这里每隔一秒向软中断(EXTI)的启用配置寄存器(SWIER)写入了不同的值,解出来就分别是0b10,0b100,0b100,0b1000,由于这里存在不少规律,直接按顺序写出来当成flag去尝试了一下(不管怎么样,总共也就只有4!=24种映射方式),就成了。

SCTF{1442413}


文章作者: 1cePeak
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 1cePeak !
评论
 上一篇
Vulhub靶机:DC-1 Vulhub靶机:DC-1
考完研没什么事,终于可以安心搞技术了。打算刷一波Vulhub的靶场,文中如有欠妥的地方还希望各位师傅指正。 Vulhub DC-1靶机DC-1下载地址:https://download.vulnhub.com/dc/DC-1.zip 靶机描
2021-01-06 1cePeak
下一篇 
2020RCTF 2020RCTF
本懒🐕终于在新博客开工了祝大家六一儿童节快乐呀~ XCTF联赛分站赛-RCTF题解 Misclisten拿到题目是一个MP3文件,听了几遍之后未发现异常,接着使用MP3Stego以及MP3 Private Key分析,卒。联想音符加解密,
2020-06-01 1cePeak
  目录