1. 程式人生 > >IDA F5還原虛擬碼的小問題

IDA F5還原虛擬碼的小問題

這個函式是DialogBoxParamsA函式註冊的視窗回撥,程式碼中有個紅箭頭標示處,EAX 的值來自GetDlgItemTextA函式獲取輸入框控制元件中使用者輸入字元的長度。然後cmp eax,5 判斷使用者輸入點的字元是不是5個。
在這裡插入圖片描述
下面有個jnz條件判斷,此時如果按F5,IDA只顯示了左邊紅色框框中的程式碼,呼叫MessageBoxA。

在這裡插入圖片描述
上圖中,F5後的結果,GetDlgItemTextA獲取完長度後,沒有顯示判斷長度的程式碼,直接顯示呼叫了MessageBoxA。

在這裡插入圖片描述
後來發現是因為這條mov ds:word_401113, eax 這條指令導致的。因為ds:word_401113這個地址是程式碼段,沒有可寫的屬性,導致IDA認為不可能走到另一條路徑中去。

在這裡插入圖片描述

把那條指令使用NOP填充
在這裡插入圖片描述

填充完,再按F5,另一個分支的程式碼也顯示出來了!
在這裡插入圖片描述