1. 程式人生 > >【reversing.kr逆向之旅】Easy ELF的writeup

【reversing.kr逆向之旅】Easy ELF的writeup

 

這道題直接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   正確