BUU[ACTF新生賽2020]easyre
阿新 • • 發佈:2022-04-05
查殼後發現有個upx殼,那我們先脫殼去
之後他還會提示你用32位的ida開啟,開啟之後在main主函式裡面找到了關鍵函式
1 __main(); 2 qmemcpy(v4, "*F'\"N,\"(I?+@", sizeof(v4)); 3 printf("Please input:"); 4 scanf("%s", v6); 5 if ( v6[0] != 65 || v6[1] != 67 || v6[2] != 84 || v6[3] != 70 || v6[4] != 123 || v10 != 125 ) 6 return 0; 7 v5[0] = v7;8 v5[1] = v8; 9 v5[2] = v9; 10 for ( i = 0; i <= 11; ++i ) 11 { 12 if ( v4[i] != _data_start__[*((char *)v5 + i) - 1] ) 13 return 0; 14 } 15 printf("You are correct!"); 16 return 0; 17 }
意思判斷v4v5v6....v15這麼多的東西是否都等於上面這串東西相對應減1的數。
如果正確的的話關鍵語句就可以理解成這種 v4[i]!=byte_402000[flag[i]-1]
1 byte_402000 = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"' 2 3 v4 = [42,70,39,34,78,44,34,40,73,63,43,64] 4 5 flag = '' 6 7 for i in v4: 8 flag += chr(byte_402000.find(chr(i)) + 1) 9 10 print(flag)
程式碼就單的就這樣就行,
套個flag就是答案