新手一枚,如有錯誤(不足)請指正,謝謝!!
題目鏈接:BUUCTF-re-[FlareOn4]IgniteMe
運行程序看一下
IDA32位載入,進入start函數
先去sub_4010F0()函數看一下
就是一個讀入字符串存到user_input 全局變量這
查看start函數裏的sub_401050函數
sub_401000函數是返回一個固定值。動調得到v4=4
總體邏輯就是將輸入倒序異或,然後進行比對,寫爆破腳本
#include <stdio.h>
char data[40] =
{
13, 38, 73, 69, 42, 23, 120, 68, 43, 108,
93, 94, 69, 18, 47, 23, 43, 68, 111, 110,
86, 9, 95, 69, 71, 115, 38, 10, 13, 19,
23, 72, 66, 1, 64, 77, 12, 2, 105, 0
};
int main(void)
{
char v4 = 4;
int i, j, k;
char flag[40] = { 0 };
for (i = 38; i >= 0; i--)
{
for (j = 0x20; j < 0x80; j++)
{
k = j;
k ^= v4;
if (k == data[i])
{
flag[i] = j;
v4 = j;
break;
}
}
}
printf("flag{%s}",flag);
return 0;
}
得到flag爲flag{[email protected]}