2024 ciscn 初赛
封面:X@ryoutanf
算是正式比赛中做得比较舒服的一次,记录一下自己做出来的题。
队里逆向怎么就只有我一个/(ㄒoㄒ)/~~
Misc
火锅链观光打卡
连接钱包,答题,兑换NFT即可获得
后面想用blockchain browser通过rpc去查看链上记录,好像不行
顺便一提这图一眼AI作的,好几个逻辑有问题的地方
Power Trajectory Diagram
这道题要通过功耗信息泄漏来找到密码,给了个numpy的文件,根据里面的index和input,可以得知是每一位的密码都将40个字符全部试一遍,然后trace是相应的功率曲线。
每个索引位置求平均值又看不出什么,也不会什么统计学之类的,干脆就直接把点全部打出来,再把图中最突出的那部分单独打印
1 |
|
这样一来就能明显看出该位密码是c,循环此步骤最后得到flag{_ciscn_2024_}
Reverse
asm_re
文件是IDA逆向后得到的汇编代码。这里偷了个懒,直接丢给ChatGPT,也算是体验了GPT-4o的强大
1 |
|
androidso_re
使用jadx查看,在MainActivity
的legal
函数中限制的flag长度为38,并将括号中间部分送入inspect.inspect
进行验证。在该函数内通过调用静态库getiv
和getkey
获取相应的iv和key,将部分flag作为明文通过AES DES/CBC/PKCS5Padding模式加密后与密文进行比较验证。
用IDA分析x86_64下的libSecret_entrance.so文件,发现代码经过混淆,难以阅读,故尝试动调获取。但发现在真机和模拟器上均在验证flag时闪退,无法动调获取函数返回值。
此时再观察题目描述
Here are only the corresponding So files for the ARM architecture
对ARM架构的so文件进行分析,发现armeabi-v7a的so文件未经过混淆,分析
iv函数:
1 |
|
key函数:
1 |
|
因此通过iv:Wf3DLups
,key:A8UdWaeq
解JqslHrdvtgJrRs2QAp+FEVdwRPNLswrnykD/sZMivmjGRKUMVIC/rw==
得188cba3a5c0fbb2250b5a2e590c391ce
因此flag{188cba3a5c0fbb2250b5a2e590c391ce}
whereThel1b
第一次做pyd的题目。拿到题目后才知道Python还有这种玩法,网上能够搜到的资料也不多。自己首先在Python3.10里面运行,注释掉whereThel1b.whereistheflag(flag)
,发现输出的ret
不变,因此就只分析trytry
函数去了。通过调试可以发现程序进入了random.seed
, base64.b64encode
, random.randint
等函数,并且b64encode时传入的是flag,randint传入的是0到flag长度。除此之外内部的加密逻辑仍然未知。
通过AI分析和阅读IDA逆向后的源码,也可发现程序在trytry
中调用了random.seed
和whereistheflag1
,whereistheflag1
中调用base64.b64encode
, random.randint
,PyNumber_Xor
等。无奈得出大概的算法也没能成功解出。但通过fuzz和加密过程的分析,我们发现可以利用base64的特性3个字符对应4个字符进行爆破。对第4-6位进行测试验证可行性得到g{7
,因此我直接写出爆破脚本
1 |
|
更新: 在看了别人的wp后发现加密逻辑没分析错,不知道为什么长度56写成了55,这里也贴一下修改后正确的
1 |
|
gdb_debug
这道题没想明白,可能有什么忽略了,按照静态分析解出来的都是乱码。题目描述是动静结合,但我动态调试查看过rand的数都没问题,还请高人指点。
1 |
|
发现问题,引以为戒