[VNCTF2 025]Fuko's starfish
0x01:前言
主要还是加密算法识别,花指令识别,dll反调试(非必要)
0x02:分析
比赛版当中的分析
题目提供了一个exe以及一个dll,exe无壳,ida启动:暂时没看到flag的密文,考虑硬玩ing
第一个是猜1到100的随机数,第二个游戏是贪吃蛇怎么操作
噢在dll里面
这里接收输入贪吃蛇游戏界面,
wasd操作我先玩玩
还有一个,先在ida里面翻一下
好像是这个函数,有花:
去一下
flag密文应该是这一串, 就是那个while(里面的byte_1800A890)
unsigned char ida_chars[] = |
看起来明文长度应该是16, 看不懂加密算法
赛后复现版:
直到去除花指令这一步之后都是正确的, 当时只是欠缺了加密算法识别这个环节实际上当时就是在这里卡住了,我们先尝试用
Findcrypt
看一下这个dll里面可能包含什么加密算法结果是AES,跟进一下看看是不是我们卡住的地方:
果然就是, 再往上看:
这一串就是key,交叉引用找了一下发现有初始化:
但没有设定随机数种子的语句,有可能有花,看一下:
果然有花,去一下:
不难注意到这里虽然有v1-v32一共32个变量,但是被用作aes中的变量只有16个,所以我们只看
srand(114514)
之后的就可以了, 继续往下看:这里的
if()
里面貌似有反调试的指令,正常来说我们走的是反调试的那边,可以看看else
里面装了什么:貌似就是把刚才随机数种子为114514的那串东西进行异或0x17的操作。知道了全部的魔改,现在该恢复这段东西了, 注意这里用到了随机数种子, 要在windows环境下运行
|
最后则是把比赛当时得到的密文拿去进行AES-ECB解密,具体位置在:
3D011C190BA090815F672731A89AA47497362167AB2EB4A09418D37D93E646E7 |
不太会用cyberchef的AES, 这里让ai给我搓了一段python代码来解:
from Crypto.Cipher import AES |
0x03:get flag
得到flag:
VNCTF{W0w_u_g0t_Fuk0's_st4rf1sh} |
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.