推 chuegou: 可以這樣轉型喔!?求解釋 07/10 21:20
推 s25g5d4: 把 array of char 轉型成 function pointer 07/10 21:27
推 johnpage: Code 程式碼(機械碼),函數指標 07/10 21:29
→ johnpage: 呼叫code的程式 07/10 21:30
→ johnpage: 駭客 07/10 21:31
→ zarados: 請問func到底指向什麼鬼?? 還是是s2大說的轉型呢? 07/10 21:33
推 LiloHuang: 程式經過編譯器編譯後,會產生一連串的機器碼資料 07/10 21:42
→ LiloHuang: 當程式執行時指令機器碼會被 Program Loader 加載到 07/10 21:43
→ LiloHuang: 記憶體,進而讓內部或外部的程式執行該片段指令 07/10 21:44
→ LiloHuang: 那段程式碼在有開 DEP 的機器上,通常執行都會失敗 07/10 21:44
→ LiloHuang: 通常我們會用 VirtualAlloc 或 mmap 等 API 來配置一段 07/10 21:45
→ LiloHuang: 可讀可寫可執行的區塊,把指令機器碼搬過去該區塊 07/10 21:45
→ LiloHuang: 這也是 JIT 重要的環節之一,動態產生可執行的機器碼 07/10 21:47
→ LiloHuang: 至於那個就是轉型,做出 function call 所需要的動作 07/10 21:47
→ LiloHuang: 如把參數 push 到 stack (視 calling convention 而定) 07/10 21:48
→ LiloHuang: 進而執行該機器碼指令 (已盡量用淺顯文字描述 XD) 07/10 21:49
→ LiloHuang: 有興趣可以去選修 compiler 的相關課程 07/10 21:50
→ LiloHuang: 轉型成 function pointer (callable) 07/10 21:51
→ LiloHuang: func 實際上就是直接指到那塊陣列,可以再進行呼叫動作 07/10 22:01
→ ctrlbreak: 會組語的秒懂 07/10 22:02
→ LiloHuang: 有興趣的人可以玩玩 Compiler Explorer - C++ 07/10 22:03
→ LiloHuang: 對於剛入門編譯器設計,或者不懂組語的多少有些幫助 07/10 22:03
→ zarados: 感謝Lilo大大的開釋 謝謝!! 07/10 22:18
推 s25g5d4: 原 PO 看得懂 int (*func)(); 已經很猛了 07/11 00:22
推 seanwu: 如果想自己測試的話,gcc加-zexecstack,這是關DEP 07/11 06:59
→ seanwu: 搭配gdb下lay asm,可以si去跟看看 07/11 07:00
→ zarados: 弱弱的說一句其實我懂組語 但自學的沒有很扎實... 07/11 08:57
推 Qoofate: (int)(*func)(); 這行是呼叫執行嗎? 07/11 10:41
→ s25g5d4: 這行其實是宣告...XD 07/11 12:58
→ s25g5d4: 阿 看錯行 這行是執行 07/11 13:00
推 LPH66: 第一行宣告, 第二行轉型, 第三行執行 07/11 16:25
→ LPH66: 基本上第二行寫成那樣是為了符合 C 語言的規則 07/11 16:27
→ LPH66: 你必須要取得一個函式指標才能進行間接呼叫 07/11 16:27
→ LPH66: 第二行那個轉型就是把字串指標硬轉成函式指標 07/11 16:28
→ freef1y3: 執行應該 (*func)(); 就可以了吧? 07/11 16:57
→ freef1y3: (int) 應該是把回傳值轉型, 可是執行完 shellcode 07/11 17:02
→ freef1y3: 程式就跳掉了, 應該也用不到回傳值 07/11 17:03
推 steve1012: 這邊的懂組語是指compiler 的課嗎 還是architecture 07/12 01:41
推 b0920075: 原Po是在看ais3 2015的writeup嗎XDD 07/12 21:47
推 Bencrie: 執行不是直接 func(); ? 07/13 00:54
推 Bencrie: 測過兩種都能跑,直接寫 func(); 比較容易懂 07/13 00:57
推 TobyH4cker: 阿靠 忘了要做AIS 07/13 12:23
推 b0920075: 樓上還有時間 07/13 16:40
推 cobrasgo: 要玩這東西請找舊一點的os + 舊shell 07/14 08:11