網(wǎng)頁(yè)設(shè)計(jì)html代碼大全菜鳥上海關(guān)鍵詞優(yōu)化公司bwyseo
下載壓縮包:
下載鏈接:https://adworld.xctf.org.cn/challenges/list
參考文章:攻防世界逆向高手題之secret-galaxy-300_沐一 · 林的博客-CSDN博客
發(fā)現(xiàn)這只是三個(gè)同一類型文件的三個(gè)不同版本而已,一個(gè)windows32位exe,另外兩個(gè)分別是32位和64位的ELF的linux可執(zhí)行文件,就分析32位的ELF文件吧。
扔入IDA32中查看偽代碼,有main函數(shù)看main函數(shù):
打開IDA,發(fā)現(xiàn)填充和輸出函數(shù),沒有輸入函數(shù),尋找輸入函數(shù)
兩個(gè)函數(shù),一個(gè)填充fill_starbase,一個(gè)打印print_starbase,打印的函數(shù)跟蹤進(jìn)去沒啥,打印一些橫幅和其它信息,其中v2跟蹤不了,看了一下是作為參數(shù)傳入的:
這里a1跟蹤不了,因?yàn)槭窃谕獠康?amp;starbase傳入的,所以前面fill_starbase猜想是填充該數(shù)組的,雙擊跟蹤:
看到一個(gè)數(shù)組&galaxy_name,還是取地址。后面是對(duì)它的一些運(yùn)算,雙擊跟蹤數(shù)組:
看到這里有點(diǎn)不明覺厲,因?yàn)橹潦贾两K沒有flag字眼,想起我還沒運(yùn)行過程序,就去運(yùn)行一下?
運(yùn)行elf文件后,出現(xiàn)的字符串
思路:題目是secret-galaxy-300,中文引導(dǎo)型暗示——隱藏的星系,運(yùn)行結(jié)果顯示了5個(gè)星系,而我前面跟蹤的數(shù)組有6個(gè)星系,少了DARK SECRET GALAXY,那么這個(gè)就是關(guān)鍵點(diǎn)!
!
!
!
跟蹤DARK SECRET GALAXY的調(diào)用,發(fā)現(xiàn)一個(gè)函數(shù),代碼分析如下:
// 調(diào)用DARK SECRET GALAXY的函數(shù)
int __libc_csu_gala()
{int result; // eaxsc[0] = off_409014; // off_409014處是DARK SECRET GALAXY字符串的地址sc[3] = &byte_40DAC0; // 一開始雙擊跟蹤啥也沒有,后面是對(duì)它的賦值操作sc[1] = 31337;sc[2] = 1;byte_40DAC0 = off_409004[0][8]; // off_409004處是Andromeda字符串的地址byte_40DAC1 = off_409010[0][7]; // off_409010處是Triangulum字符串的地址byte_40DAC2 = off_409008[0][4]; // off_409008是Messier字符串的地址byte_40DAC3 = off_409004[0][6];byte_40DAC4 = off_409004[0][1];byte_40DAC5 = off_409008[0][2];byte_40DAC6 = 95;byte_40DAC7 = off_409004[0][8];byte_40DAC8 = off_409004[0][3];byte_40DAC9 = off_40900C[0][5]; // off_40900C是Sombrero的地址byte_40DACA = 95;byte_40DACB = off_409004[0][8];byte_40DACC = off_409004[0][3];byte_40DACD = off_409004[0][4];byte_40DACE = off_409010[0][6];byte_40DACF = off_409010[0][4];byte_40DAD0 = off_409004[0][2];byte_40DAD1 = 95;byte_40DAD2 = off_409010[0][6];result = *((unsigned __int8 *)off_409008[0] + 3);byte_40DAD3 = off_409008[0][3];byte_40DAD4 = 0;return result; // 這里犯下第三個(gè)錯(cuò)誤,返回result,可是result是off_8049B80[3],就是Messier的第三個(gè)字符s,我醉了,難怪不顯示前面一直在用 aAliensAreAroun,結(jié)果這里返回別的東西去了。
}
分析完后可以知道 aAliensAreAroun數(shù)組大概就是我們要招的flag了。
第一種方法:
手動(dòng)調(diào)試,就這樣不同的字符串一個(gè)個(gè)截取對(duì)應(yīng)的位拼接即可。
code:
off_409004='Andromeda'
off_409010='Triangulum'
off_409008='Messier'
off_40900C='Sombrero'
flag=''
flag+=off_409004[8]
flag += off_409010[7]
flag+= off_409008[4]
flag+= off_409004[6]
flag+= off_409004[1]
flag+= off_409008[2]
flag+='_'
flag+= off_409004[8]
flag+= off_409004[3]
flag+= off_40900C[5]
flag+='_'
flag+= off_409004[8]
flag+= off_409004[3]
flag+= off_409004[4]
flag+= off_409010[6]
flag+= off_409010[4]
flag+= off_409004[2]
flag+='_'
flag+= off_409010[6]
flag+= off_409008[3]
print(flag)
#結(jié)果:aliens_are_around_us
第二種方法:
IDA遠(yuǎn)程動(dòng)態(tài)調(diào)試,下斷點(diǎn)在return處,運(yùn)行:(PS:運(yùn)行且調(diào)試過IDA了,所以這里的數(shù)組名字和我一開始看到的不一樣,IDA應(yīng)該是自己又修改過了)
總結(jié):這是一個(gè)腦洞題,需要推理,根據(jù)運(yùn)行結(jié)果找到隱藏的字符串,再根據(jù)隱藏的字符串找到關(guān)鍵代碼,然后計(jì)算出flag