RCTF 2022 Writeup¶
约 421 个字 29 行代码 预计阅读时间 2 分钟
Abstract
后补的 writeup。题还挺有意思,做了两道 misc,还有一道偏 web、一道 AI 的被队友直接杀了,就没再看。
K999¶
一个游戏,手打基本打不动,逆向 / 看 exe 可以知道这是一个用 lua love 引擎写的游戏。其 lua 源码会直接以 zip 的形式附加在 exe 末尾,所以提取出来解压即可得到游戏源码。
可以很明显的发现有一个 flag.lua 的文件,里面有一些解密相关代码,在 main.lua 里面可以看到胜利之后有输出的代码:
if world.KillenemyCount >= 999 then
love.graphics.push('all')
love.graphics.setColor(255, 255, 0, 255)
local flag1 = "MOON\r\n"
local flag2 = "157 89 215 46 13 189 237 23 241\r\n"
local flag3 = "49 84 146 248 150 138 183 119 52\r\n"
local flag4 = "34 174 146 132 225 192 5 220 221\r\n"
local flag5 = "176 184 218 19 87 249 122\r\n"
local flag6 = "Find a Decrypt!\r\n"
love.graphics.print(flag1, love.graphics.getWidth() / 2, love.graphics.getHeight() / 2, 0, 2, 2, 37, 7)
love.graphics.print(flag2, love.graphics.getWidth() / 2, love.graphics.getHeight() / 2 + 20, 0, 2, 2, 37, 7)
love.graphics.print(flag3, love.graphics.getWidth() / 2, love.graphics.getHeight() / 2 + 40, 0, 2, 2, 37, 7)
love.graphics.print(flag4, love.graphics.getWidth() / 2, love.graphics.getHeight() / 2 + 60, 0, 2, 2, 37, 7)
love.graphics.print(flag5, love.graphics.getWidth() / 2, love.graphics.getHeight() / 2 + 80, 0, 2, 2, 37, 7)
love.graphics.print(flag6, love.graphics.getWidth() / 2, love.graphics.getHeight() / 2 + 100, 0, 2, 2, 37, 7)
love.graphics.pop()
getflag = true
所以把数据拿出来,MOON 是 key,剩下的是 s,顺着 flag.lua 里的意思直接接一个解密函数然后直接运行即可:
function Decrypt()
local key = "MOON"
local s = {157, 89, 215, 46, 13, 189, 237, 23, 241, 49, 84, 146, 248, 150, 138, 183, 119, 52, 34, 174, 146, 132, 225, 192, 5, 220, 221, 176, 184, 218, 19, 87, 249, 122}
flag = ""
for i = 1, #s, 1 do
flag = flag .. string.char(s[i])
end
flag = strDecrypt(flag, key)
print(flag)
end
Decrypt()
得到 flag: RCTF{1_Rea11y_Want_t0_Y0ur_H0use}
ez_alient¶
看起来是经典的 python 外星人打飞机游戏,有一个图片文件夹,可以发现 alien.bmp 末尾有 pwd="N0bOdy_l0ves_Me",是压缩包密码。
解压后是 python 打包好的可执行文件,用 pyinstxtractor+uncompyle6 可以解出源码,可以发现 alien_invasion.py 里面存在一个没用的变量 s="VTJreE0yNWpNdz09",二次 base64 解码可以得到 "Si13nc3"。
除此之外还有 PYZ-00.pyz 文件,同样解包并反编译可以得到其他部分源码,可以发现更多没用的变量:
- alien.py: a =
TVRVPQ==
->MTU=
-> 15 - bullet.py: a =
YmtWMlJYST0=
->bkV2RXI=
-> nEvEr - button.py: k =
T1dsMmFXNDU=
->OWl2aW45
-> 9ivin9 - game_stats.py: t =
ZFhBPQ==
->dXA=
-> up - scoreboard.py: m =
SmlZPQ==
->JiY=
-> && - settings.py: l =
Tm5WMA==
->NnV0
-> 6ut - ship.py: m =
YURBeFpHbHVPUT09 VDI0PQ== VTJreE0yNVVNWGs9
YURBeFpHbHVPUT09
->aDAxZGluOQ==
-> h01din9VDI0PQ==
->T24=
-> OnVTJreE0yNVVNWGs9
->U2kxM25UMXk=
-> Si13nT1y
拼起来就是 flag: RCTF{Si13nc3_15_nEvEr_9ivin9_up_&&_6ut_h01din9_On_Si13nT1y}
反正就是感觉硬藏没啥意思,而且单词顺序其实还并不确定,硬猜。
最后更新:
2023年5月10日 23:50:08
创建日期: 2023年5月10日 23:50:08
创建日期: 2023年5月10日 23:50:08