#逆向-Cyberpunk-复现

🤡5ea1


Cyberpunk

[NCTF 2022]cyberpunk
题目是一道VxWorks系统逆向,第一次碰到,故作记录,而且题目背景很帅很喜欢😍

先看题目给的Readme文档

故事背景:
你叫V,是一个无所不能的黑客,是夜之城的传奇。
在赛博朋克2077年,有一个叫做荒坂(Arasaka)的公司缠食着整个夜之城。
有一个叫做大卫(David)的年轻人想挑战这个公司,但是被公司里面的一个满是机械躯体的人(可以被叫做机器人了)残害了,这个人叫做亚当·重锤(Adam Smasher)。
在David被残害之前,他的天才黑客女朋友露西(Lucy)已经黑进了荒坂公司的内部,获得了一些核心机密。
其中有一些被标注为大鬼(DaiOni)战甲的详细资料,亚当重锤的动力战甲就是这个型号。
通过调查,露西发现它搭载的是VxWorks操作系统,而露西也尝试找到战甲的漏洞。
露西深知大卫打不过亚当重锤,但是也拦不住,因此一直告诉大卫再等等。
露西发现在战甲的作战系统固件里面,存在一个自动销毁战甲的函数,但是它被隐藏起来了,她想找到这个函数后,等大卫在与Adam的较量中能暗中帮助男友。
但是在露西找到之前,大卫就已经在与亚当重锤的较量中牺牲了。
现在露西仍然可以自由访问荒坂的后台,但是心上人已故,却再无心进行下去了。
她只想离开夜之城,远走他乡。
离开之前,露西在战甲系统里面留了后门和一些提示,希望你能完成她最后的心愿。

呜呜呜意难平啊😭...(Bad End!)
虽然手残打不过亚当,但是黑进去还是可以的😋为了给大卫报仇,我们需要黑掉亚当的大鬼战甲(拿到战甲的销毁指令)

思路

先分析Readme文档,找到如下关键词:VxWorks系统固件自动销毁战甲的函数,可以查询相关资料

  1. VxWorks是啥
  2. VxShell交互

虽然对实际做题作用不大就是了

题目内给了一个qcow2文件,通过查询得知这种文件类型的意思

QCOW2镜像格式是Qemu支持的磁盘镜像格式之一。它可以使用一个文件来表示一个固定大小的块设备。
再结合题目中附的启动文件(start.sh)内容,可以在Linux机器上打开这个镜像文件。
1
2

可以看到就是VxWorks操作系统,还很贴心的把CPU换成了DaiOni(大鬼)。


没啥提示,先敲一个help进去
3
4
发现给出了大量可供使用的指令
注意到了一个很显眼的指令FLAG,说是Lucy的一些小提示,打进去试试看,出现三段提示,其中第二第三段包含了hint

9
  1. 这一段首先提到了flag的格式为flag{你找到的销毁指令}
  2. 其次,VxWorks系统是一个实时编程系统,可以直接输入一些指令来调用
  3. flag文件和VxWorks系统在同一个目录下,且flag存放在一个名为flag的文件中
10
  1. flag所在的目录可以由help中的某些指令中的信息拼接而成
  2. Lucy定义了一个解密函数,名为xor,用法为xor("flag",len(flag))

于是根据提示去把剩下的指令都打了一遍
whoami指令中获得了自己的用户名,version里面获得了用户名和密码
6
5
不过按照help里的iam "name"[,"passward"]格式打进去没用,我猜测是Lucy已经登录了亚当的账户,毕竟用户名上是一直显示着亚当的。

”现在露西仍然可以自由访问荒坂的后台“


同时,在调用version的时候,还发现了一个路径/ata0/vxworks
不过输入到系统里面,调用不出来东西
11
再尝试各种指令,最后发现devs(开发者)指令很有意思
12
是直接给了很多路径,一条一条尝试后发现正确路径/ata0a/
13
其中包含了flag文件,接下来调用即可


EXP

上面说了是实时编程,那就直接写一个orw吧

fp=open("/ata0a/flag","r")
a=malloc(0x100)
read(fp,a,0x100)
printf("%s",a)

得到了乱码j]HXjDXjwvDh~Dih~jhzVQ\CRwf[hvVTwXFYh~XR]bVTw\Djh~VQh~VR]
为什么呢?喔!还记得有一个xor函数加密吗
修改

fp=open("/ata0a/flag","r")
a=malloc(0x100)
read(fp,a,0x100)
printf("%s",xor(a,81))//81是a的长度

得到一个可疑字符串ZmxhZ3thZGFtX3NtYXNoZXJfa2lsbGVkX2FfdGhvdXNhbmRfdGltZXNfaXNfbm90X3Rvb19tdWNofQ==,一眼base64秒了😄


Final

flag{adam_smasher_killed_a_thousand_times_is_not_too_much}👏

此时在镜像系统中输入销毁指令,镜像就会直接陷入永久的损坏...安息吧,亚当·铁锤

反思

实际上xor函数的逻辑就是一个^0x30,这一点随便套一点数据就能发现了,1->31,30->0


这道题还有一种解法就是固件逆向

sudo apt-get install kpartx -y
sudo modprobe nbd max_part=8
lsmod |grep nbd
sudo qemu-nbd -c /dev/nbd0 ./DaiOni.qcow2

按照这一段指令可以挂载映射,获取固件文件。

Lucy
想去月球了😭😭😭
别打啊别打,Lucy等着你呢😭😭😭😭😭

我是V:https://www.vgbaike.com/cyberpunk_2077/baike1627?wid=932
谁是亚当重锤:https://www.vgbaike.com/cyberpunk_2077/baike1602?wid=1098
荒坂是什么:https://www.vgbaike.com/cyberpunk_2077/baike1546?wid=934