Simple Reverse - 0x03(Lab - Why)
Background
Source Code
:::spoiler IDA main function
1 |
|
:::
:::spoiler .init_array
& .fini_array
Byte Code
1 |
|
:::
:::spoiler IDA Disassembly sub_11f8
1 |
|
:::
Recon
這一題如果以解題的觀點來說的話,其實很簡單,但他想要傳達的概念很重要,也就是.init和.fini的事情
- 先執行看看,發現有兩種字串可以先注意,一個是
Give me flag:
和Wrong :(
1
2
3$ ./why_be9d4253a27b1d44 Give me flag: 123456 Wrong :(
-
再用IDA看一下整體的架構(如上) 可以發現整體的流程很簡單,他就是叫user輸入25個char,然後每次取一個位元減10再和env_flag的相對字元比較,如果都是對的,
pass = 1;
,但看起來這一段程式並沒有剛剛提到的Wrong :(
,所以我們用Strings Windows和Xrefs跟一下誰用了這個data,並擷取出code如上(第二和第三的source code) - 繼續往上追一下 會發現sub_11f8這個function是定義在.fini_array的區段,代表是在main function結束的時候才會執行的
Exploit
1 |
|