2021-11-15 學(xué)習(xí)日記

1.Bugku刷題

love

IDA反編譯,找一下關(guān)鍵代碼塊。

  sub_41132F("please enter the flag:", v7);
  sub_411375("%20s", (char)Str);
  v3 = j_strlen(Str);
  v4 = (const char *)sub_4110BE(Str, v3, v14);
  strncpy(Destination, v4, 0x28u);
  v11 = j_strlen(Destination);
  for ( j = 0; j < v11; ++j )
    Destination[j] += j;
  v5 = j_strlen(Destination);
  if ( !strncmp(Destination, Str2, v5) )
    sub_41132F("rigth flag!\n", v8);
  else
    sub_41132F("wrong flag!\n", v8);

可知Str2="e3nifIH9b_C@n@dH"為flag加密后的字符串。
Shift+F12查看字符串。


1-1

看到一個(gè)base64input,猜想其中會(huì)有base64加密。
輸入會(huì)存儲(chǔ)為Str,v3為Str的長度,然后會(huì)經(jīng)過sub_4110BE函數(shù)來生成v4。
雙擊跳轉(zhuǎn)到sub_4110BE函數(shù)。


1-2

1-3

雙擊標(biāo)黃的列表跳轉(zhuǎn),發(fā)現(xiàn)這就是base64的字符集,所以sub_4110BE函數(shù)大概率是個(gè)base64編碼函數(shù)。
接下來是一個(gè)字符串拷貝函數(shù),將v4拷貝給Destination[],v11是Destination[]的長度。然后對(duì)Destination[]進(jìn)行操作,得到Str2。
我們只需將str2進(jìn)行逆操作,然后再base64解密,即可得到flag。

import base64
Str2='e3nifIH9b_C@n@dH'
Str2_list=list(Str2)
flag=''
for i in range(0,len(Str2)):
    Str2_list[i]=chr(ord(Str2_list[i])-i)
    flag+=Str2_list[i]
print(base64.b64decode(flag))
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容