iT邦幫忙

2024 iThome 鐵人賽

DAY 12
0
Security

從0開始的打Pwn教學系列 第 12

EFLAGS 在迴圈中的作用

  • 分享至 

  • xImage
  •  

如何比較到輸出介紹完了之後,現在就來計算迴圈次數到達後的程式狀態,我們從RBP-0x4等於4的時候開始。
https://ithelp.ithome.com.tw/upload/images/20240926/20169016dbDScQwDPZ.png
https://ithelp.ithome.com.tw/upload/images/20240926/20169016N4ObH4i1oT.png

這邊IDA比較多資料,所以我們慢慢來看,可以看到右下角的Stack view在7FFFFCC18的地方,在21646C的前面就是迴圈的次數了。
接下來當RBP-0x4等於5時,我們預期ZF為1、CF為0以及SF為0
https://ithelp.ithome.com.tw/upload/images/20240926/20169016dtA5ZjV5Ls.png
https://ithelp.ithome.com.tw/upload/images/20240926/20169016ZcFJaMp6Ba.png

我們順便看比較前的EFLAGS
https://ithelp.ithome.com.tw/upload/images/20240926/20169016aEFcoE9bzI.png
https://ithelp.ithome.com.tw/upload/images/20240926/20169016QP4Uan756n.png

做完比較後
https://ithelp.ithome.com.tw/upload/images/20240926/20169016haTn81cwCB.png
https://ithelp.ithome.com.tw/upload/images/20240926/20169016acvaN6X1JH.png
可以很明顯地看到,與我們的期望一樣,只有ZF為1,這就說明當CMP做比較時是相減的,而5-5為0,在運算後的EFLAG偵測到運算結果為0而ZF為1。
但下一步要做的是JLE因此相等也會轉跳,所以再經過一輪後RBP-0x4還會增加為6,這個時候我們預期EFLAGS在ZF、CF、SF都會是0,然後程式不會繼續跳轉,而是繼續執行下去。
https://ithelp.ithome.com.tw/upload/images/20240926/20169016Du6SSRWLu4.png
https://ithelp.ithome.com.tw/upload/images/20240926/201690163aCkarzpec.png

當RBP-0x4為6時,EFLAGS的狀態。
https://ithelp.ithome.com.tw/upload/images/20240926/20169016OGCayydzDi.png
https://ithelp.ithome.com.tw/upload/images/20240926/201690167lFlbQ3J21.png
可以發現如我們預期一樣EFLAGS在ZF、CF、SF都會是0
接著因為6已經大於5了,因此脫離了JLE,所以程式會繼續往下執行。


上一篇
Reverse 迴圈內輸出字串
下一篇
Reverse 程式的結束
系列文
從0開始的打Pwn教學14
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言