新河網(wǎng)站建設(shè)關(guān)鍵詞資源
參考文章:
re學習筆記(28)攻防世界-re-no-strings-attached_Forgo7ten的博客-CSDN博客
攻防世界逆向入門題之no-strings-attached_攻防世界 no-strings-attached_沐一 · 林的博客-CSDN博客 本人題解:
扔入Exepeinfo中查殼和其他信息:
如圖所示,32位ELF的linux文件,照例扔如IDA32位中查看代碼信息,跟進Main函數(shù):
跟進authenticate()函數(shù)
這里有個decrypt函數(shù),中文名是加密,不在導入表中說明不是系統(tǒng)函數(shù),后面的if判斷條件是輸入,還有個比較的wcscmp函數(shù),后面兩個wprintf分別是success 和access這些成功和拒絕的字符串地址。
fgetws函數(shù)是從輸入流stdin中獲取0x2000個字符給ws,也就是說s2是關(guān)鍵了,s2由decrypt函數(shù)得出,decrypt是用戶自定義函數(shù),在這里學到了非系統(tǒng)函數(shù)的英文名會是題目給的暗示,所以這里是加密操作后與輸入的比較,只要輸入后與加密后的s2一樣就會打印success或access這些字符串,那flag自然也在加密函數(shù)中了。
然后開始動調(diào):
這里有一個問題卡了我許久,就是在Ubuntu中無法打開32位調(diào)試文件,需要安裝一些配置才可以參考文章:
【BUG】Linux目錄下明明有可執(zhí)行文件卻提示找不到,“No such file or directory”,解決:為64位Ubuntu安裝32位程序的運行架構(gòu)_linux文件存在 但報錯說找不到_shandianchengzi的博客-CSDN博客
可以解決
?
?
程序在08048720執(zhí)行完call,并將返回值存儲在eax里。
然后通過eax賦值給[ebp+s2],也就是字符串s2,
F8單步執(zhí)行到08048725
然后跳轉(zhuǎn)到eax存儲的地址上
?
?
其實在這里也是可以看到flag的,一個一個寫出來就可以了,但是也可以提取數(shù)據(jù),一塊弄出來
參考別人寫的腳本:
數(shù)據(jù)提取:
?
unsigned int data[38] = {0x00000039, 0x00000034, 0x00000034, 0x00000037, 0x0000007B, 0x00000079, 0x0000006F, 0x00000075,0x0000005F, 0x00000061, 0x00000072, 0x00000065, 0x0000005F, 0x00000061, 0x0000006E, 0x0000005F,0x00000069, 0x0000006E, 0x00000074, 0x00000065, 0x00000072, 0x0000006E, 0x00000061, 0x00000074,0x00000069, 0x0000006F, 0x0000006E, 0x00000061, 0x0000006C, 0x0000005F, 0x0000006D, 0x00000079,0x00000073, 0x00000074, 0x00000065, 0x00000072, 0x00000079, 0x0000007D};
?然后將其轉(zhuǎn)換為字符即為flag
#include <stdio.h>
int main()
{unsigned int data[38] = {0x00000039, 0x00000034, 0x00000034, 0x00000037, 0x0000007B, 0x00000079, 0x0000006F, 0x00000075,0x0000005F, 0x00000061, 0x00000072, 0x00000065, 0x0000005F, 0x00000061, 0x0000006E, 0x0000005F,0x00000069, 0x0000006E, 0x00000074, 0x00000065, 0x00000072, 0x0000006E, 0x00000061, 0x00000074,0x00000069, 0x0000006F, 0x0000006E, 0x00000061, 0x0000006C, 0x0000005F, 0x0000006D, 0x00000079,0x00000073, 0x00000074, 0x00000065, 0x00000072, 0x00000079, 0x0000007D};for(int i=0;i<38;i++)printf("%c",data[i]);return 0;
}
?flag為
9447{you_are_an_international_mystery}
總結(jié):
不在導入表(import)中說明不是系統(tǒng)函數(shù),非系統(tǒng)函數(shù)的英文名會是題目給的暗示
1.2.動態(tài)調(diào)試類似內(nèi)存調(diào)試,在內(nèi)存中找數(shù)據(jù),尋找中間變量
3.IDA是根據(jù)自己的規(guī)則給無法解析變量名賦值的,也就是說在IDA里變量是s2這個名字,但是實際上程序里并沒有s2這個變量名,所以只能查看寄存器了,畢竟函數(shù)是先返回到eax寄存器中再移動到變量中的。