【reversing.kr逆向之旅】Easy ELF的writeup
阿新 • • 發佈:2018-11-10
這道題直接IDA Pro靜態分析就可以
shift+f12就可以找到關鍵字串 圖形檢視下也可以看清楚
反彙編main()
int __cdecl main() { write(1, "Reversing.Kr Easy ELF\n\n", 0x17u); sub_8048434(); // 接收我們的輸入 if ( sub_8048451() == 1 ) sub_80484F7(); // write(1, "Correct!\n", 9u); else write(1, "Wrong\n", 6u); return 0; }
很顯然sub_8048451()返回值等於1時 輸出Correct
那我們接著F5反彙編這個函式
_BOOL4 sub_8048451() { if ( byte_804A021 != 0x31 ) // input[1] = 0x31 return 0; input ^= 0x34u; // input[0] ^ 0x34 byte_804A022 ^= 0x32u; // input[2] ^ 0x32 byte_804A023 ^= 0x88u; // input[3] ^ 0x88 if ( byte_804A024 != 0x58 ) // input[4] = 0x58 return 0; if ( byte_804A025 ) // input[5] = 0x1 return 0; if ( byte_804A022 != 0x7C ) // input[2] = 0x7c return 0; if ( input == 0x78 ) // input[0] = 0x78 return byte_804A023 == 0xDDu; // input[3] = 0xdd return 0; }
這裡我分析的是有6個變數 以陣列的形式
雙擊任一變數 看下記憶體順序
(ps:BSS段通常是指用來存放程式中未初始化的全域性變數和靜態變數的一塊記憶體區域
特點是可讀寫的,在程式執行之前BSS段會自動清0)
由sub_8048451()對應關係
可以得到結果
a = 0x78 ^ 0x34
b = 0x31
c = 0x7c ^ 0x32
d = 0xdd ^ 0x88
e = 0x58
f = 0x1
input = [a,b,c,d,e,f]
for i in input:
print chr(i)
#L1NUX
這裡f也就是對應的input[5] 轉成字元是亂碼 直接去掉吧 可能是IDA分析的緣故
提交L1NUX 正確