0x00 已知條件
給了一個(gè)CTF_100_1.exe绒窑。
0x01 思考過程
-
隨便給一個(gè)輸入,發(fā)現(xiàn)一個(gè)像是加密的函數(shù)椿猎,改名成check_input食棕。
image.png - 發(fā)現(xiàn)里面做的事是把當(dāng)前路徑和所給的輸入字符串連接起來,然后開了子線程馁痴。
- 如果調(diào)試的話谊娇,看不到子線程里面的過程,且check_input最后會(huì)返回result = -1
- 而且最后還把Buffer跟這一堆進(jìn)行比較弥搞,不通過則check_input最后也返回result = -1邮绿,看著像最終的目標(biāo)串
- 主函數(shù)(還沒法反匯編)得到-1后會(huì)exit
image.png
-
注意到上述過程中有這個(gè)部分:
調(diào)試時(shí)先跳到114行,再跳上去做了4個(gè)賦值操作攀例。
- 調(diào)試船逮,發(fā)現(xiàn)寫入函數(shù)的參數(shù)是一個(gè).text地址,那里下面一點(diǎn)還有不可解釋的數(shù)據(jù)粤铭。
于是patch過去挖胃,再看情況調(diào)調(diào)函數(shù)結(jié)尾位置,main和這部分就都能反匯編了梆惯。
- 調(diào)試船逮,發(fā)現(xiàn)寫入函數(shù)的參數(shù)是一個(gè).text地址,那里下面一點(diǎn)還有不可解釋的數(shù)據(jù)粤铭。
image.png
image.png
- 看看main和這個(gè)函數(shù)就很清楚了酱鸭,目標(biāo)串多半就是前面提到的那個(gè)。把這個(gè)加密過程反著寫個(gè)腳本垛吗,求出flag凹髓。
[Python]
target = '\x25\x5c\x5c\x2b\x2f\x5d\x19\x36\x2c\x64\x72\x76\x80\x66\x4e\x52'
xor = 'elcome to CFF te'
len = len(xor)
flag = ''
for i in range(len):
flag += chr(ord(xor[i]) ^ (ord(target[i])-1))
print flag
0x02 細(xì)節(jié)
- 記得小端序