1. 程式人生 > >南郵ctf逆向最後一題

南郵ctf逆向最後一題

你大概需要一個優秀的mac //雖然是osx下的程式,但並不一定真的要有mac….

正好我也沒mac,只能拖到ida裡面了,發現還真可以….ida有點厲害

找到right wrong字串,觀察下主框架然後果斷f5看下虛擬碼
這裡寫圖片描述

可以看出來就是簡單的輸入長度為56的字串然後經過func1,xfun1,xfun2,xfun3,xfun4,xfun5這幾個函式加密然後check函式比較
這裡寫圖片描述
好在這些函式都差不多,都是與一個數異或
func1:56個字串逐個與0xde異或
xfun1:0~9位與0xad異或
xfun2:10~19位與0xbe異或
xfun3:10~29位與0xef異或
xfun4:30~39位與0xab異或
xfun5:40~55位與0xef異或

最後與0x100000ED0處的56位比較,所以直接逆操作就可以了。

idc程式碼:

auto i;
for ( i = 0; i <56 ; i++ )
  {
    if(i<10)
      {
          Message("%c",Byte(0x100000ED0+i*4)^0xADu^0xDEu);
      }
    if(i>9 &&i<20)
      {
          Message("%c",Byte(0x100000ED0+i*4)^0xBEu^0xDEu);
      }
   if(i>19 && i<30)
      {
          Message("%c
"
,Byte(0x100000ED0+i*4)^0xEFu^0xDEu); } if(i>29 && i<40) { Message("%c",Byte(0x100000ED0+i*4)^0xABu^0xDEu); } if(i>39) { Message("%c",Byte(0x100000ED0+i*4)^0xEFu^0xDEu); } }

idc才學沒幾天,一開始用PatchByte寫入函式結果一直不對,後來發現根本就沒寫進去。也不知道為什麼,所以就直接用message輸出了

——更新 PatchByte方式
原來是我用錯這個函數了PatchByte的第一個引數是地址,不能加Byte()的……

auto i;
for ( i = 0; i <56 ; i++ )
  {
    if(i<10)
      {
          PatchByte(0x100000ED0+i*4,Byte(0x100000ED0+i*4)^0xADu^0xDEu);
      }
    if(i>9 &&i<20)
      {
         PatchByte(0x100000ED0+i*4,Byte(0x100000ED0+i*4)^0xBEu^0xDEu);
      }
   if(i>19 && i<30)
      {
          PatchByte(0x100000ED0+i*4,Byte(0x100000ED0+i*4)^0xEFu^0xDEu);
      }
   if(i>29 && i<40)
      {
          PatchByte(0x100000ED0+i*4,Byte(0x100000ED0+i*4)^0xABu^0xDEu);
      }
   if(i>39)
      {
          PatchByte(0x100000ED0+i*4,Byte(0x100000ED0+i*4)^0xEFu^0xDEu);
      }
  }

  for(i=0;i<56;i++)
  Message("%c",Byte(0x100000ED0+i*4))

結果
flag{I5_th1s_7he_PR1c3_I’M_PAyiNG_f0r_my_pA57_m1stAk35?}