南郵ctf逆向最後一題
阿新 • • 發佈:2018-12-29
你大概需要一個優秀的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?}