[WP] Hackergame 2019 没有BUG的教务系统 1
查看源码发现程序对输入进行了一系列加密操作
temp_password[i] = ((temp_password[i] | temp_password[i + 1]) & ~(temp_password[i] & temp_password[i + 1]) | i) & ~((temp_password[i] | temp_password[i + 1]) & ~(temp_password[i] & temp_password[i + 1]) & i)
最后与一个序列进行比较
加密每个字节使用了字节本身与它后面的那个字节 因此这题要从后往前推
程序给输入加了一个'\x00'
因此最后一个字节是'\x00'
编写脚本依次爆破前面的字节
#include<stdio.h> int main(){ char temp_password[2]; int key[]={0x44,0x00,0x02,0x41,0x43,0x47,0x10,0x63,0x00}; temp_password[0]=0; int k=7; for(int j=0;j<=7;j++){ for(int i=1;i<128;i++){ temp_password[0]=i; temp_password[0] = ((temp_password[0] | temp_password[0 + 1]) & ~(temp_password[0] & temp_password[0 + 1]) | k) & ~((temp_password[0] | temp_password[0+ 1]) & ~(temp_password[0] & temp_password[0+ 1]) & k); // printf("%d ",temp_password[0]); if(temp_password[0]==key[k]){ printf("%c",i); temp_password[1]=i; k--; break; } } } }
输出是倒过来的,我们需要再给它倒一下
flag{p455w0rd}