BUUCTF逆向刷题——[GKCTF2020]BabyDriver

本文讲述了作者使用IDA工具分析一个包含迷宫解密逻辑的sys文件,揭示了键盘输入控制路径的秘密。通过理解键盘过滤驱动,发现了解密路径并推导出flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IDA打开在这里插入图片描述
在sub_140001380发现主函数
然后在字符串里发现有东西
在这里插入图片描述
双击跟进
在这里插入图片描述发现a0有东西,估计是个迷宫题。
看代码
` char v9; // dl
CHAR *v10; // rcx

v2 = a2;
if ( *(_DWORD *)(a2 + ‘0’) >= 0 )
{
v3 = *(_QWORD *)(a2 + 24);
v4 = *(_QWORD *)(a2 + 56) >> 3;
if ( (_DWORD)v4 )
{
v5 = dword_1400030E4; // v5=10h
v6 = (__int16 *)(v3 + 2);
v7 = (unsigned int)v4;
while ( *(_WORD *)(v3 + 4) )
{
LABEL_28:
v6 += 6;
if ( !–v7 )
goto LABEL_29;
}
aO[v5] = 46;
v8 = *v6;
if ( *v6 == 23 )
{
if ( v5 & 0xFFFFFFF0 )
{
v5 -= 16;
goto LABEL_21;
}
v5 += ‘�’;
dword_1400030E4 = v5;
}
if ( v8 == 37 )
{
if ( (v5 & 0xFFFFFFF0) != ‘�’ )
{
v5 += 16;
goto LABEL_21;
}
v5 -= 208;
dword_1400030E4 = v5;
}
if ( v8 == ‘$’ )
{
if ( v5 & 0xF )
{
–v5;
goto LABEL_21;
}
v5 += 15;
dword_1400030E4 = v5;
}
if ( v8 != ‘&’ )
goto LABEL_22;
if ( (v5 & 0xF) == 15 )
v5 -= 15;
else
++v5;
LABEL_21:
dword_1400030E4 = v5;
LABEL_22:
v9 = aO[v5];
if ( v9 == 42 )
{
v10 = “failed!\n”;
}
else
{
if ( v9 != 35 )
{
LABEL_27:
aO[v5] = 111;
goto LABEL_28;
}
v10 = “success! flag is flag{md5(input)}\n”;
}
dword_1400030E4 = 16;
DbgPrint(v10);
v5 = dword_1400030E4;
goto LABEL_27;
}
}
LABEL_29:
if ( *(_BYTE *)(v2 + 65) )
*(_BYTE )((_QWORD *)(v2 + 184) + 3i64) |= 1u;
return *(unsigned int *)(v2 + 48);
}`
是16一行的。然后开始分段
在这里插入图片描述
O应该是起点,#应该是终点。
有了迷宫了,就差上下左右走的条件了,这里我看了好长时间没看出来

,看了别人的wp才知道这里由于是sys文件,是由键盘过滤驱动获取键盘扫描码来控制上下左右,而不是ascll码

第一次知道在这里插入图片描述
在这里插入图片描述
解出路径为LKKKLLKLKKKLLLKKKLLLLLL。
题里面又提示flag是其路径的md5的32位小写,故得到flag:

flag{403950a6f64f7fc4b655dea696997851}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值