解決ida無法識別printf的缺陷

2022-09-18 08:54:44 字數 1382 閱讀 9792

最近發現ida居然無法識別vs2019 printf,作為有輕微強迫症的我無法容忍,如下圖所示

test.cpp:

#include int main(int argc, char* ar**)
使用vs2019編譯,生成x86、release版

注意:這裡cl是32位的

結果ida並沒有把printf識別出來而是把它當作乙個未知函式sub_401020處理

經過一番**發現printf是靜態鏈結到test.exe中,所以ida把它做使用者自定義函式處理了,下圖是在test.exe中printf的內部實現

製作ida簽名

首先生成obj檔案,原始碼檔案只要使用了printf即可,由於test.exe 是32位release版,所以生成的obj檔案也必須為32位release版

cl -c /o2 test.cpp
注意:這裡cl是32位的

使用pcf.exe 生成pat檔案 ida簽名製作工具

pcf test.obj
使用sigmake.exe生成sig檔案

sigmake -n"32位release版vs2019的printf符號簽名" test.pat printf.sig
將生成的printf.sig檔案放入ida按照目錄的sig/pc資料夾下,然後用ida開啟test.exe,按shift+f5開啟簽名視窗,載入剛才放入的簽名

注:這裡的printf.sig是通用的,只要是vs2019編譯的32位release版可執行檔案,使用此符號檔案都能將printf識別出來(原因是因為符號檔案的原理是將函式的部分位元組記住,通過這些位元組去識別函式,所以只要編譯出來的可執行檔案的函式二進位制一樣就都能識別)

在用ida檢視main函式,結果如下

分析乙個程式先檢視它是32位還是64位,debug還是release,然後製作對應的obj檔案(原始檔使用了printf即可),然後生成對應的sig檔案。這樣很多靜態鏈結的函式就可以看到符號的,大大提公升了逆向效率

USB鍵盤無法識別解決方法

usb鍵盤無法使用,插入鍵盤後電腦檢測不到,也不出現嘆號裝置。原因分析 仔細觀察人體學輸入裝置中有兩個裝置,通過硬體id確認其中usb 輸入裝置是滑鼠,上面的英文裝置實際上是鍵盤。也就是windows系統錯誤的把鍵盤識別為了別的裝置。解決方案 右鍵選擇更新驅動程式 瀏覽計算機以查詢驅動程式軟體 從計...

解決sql語句無法識別運算子

如果直接和上圖一樣寫,那麼就會報1064的錯。因為mysql無法識別運算子。使用者變數 使用者變數一般以 開頭 注意 濫用使用者變數會導致程式難以理解及管理 set a concat select from admins limit 1 1 5,10 5,定義乙個變數 然後用拼接函式 concat ...

讓IDA載入系統dll時識別Symbol

一 使用 symbol server 技術 microsoft symbol server 是使用 debugging tools for windows 軟體包附帶的 symsrv 技術 symsrv.dll 構建的。symsrv 會生成本地符號快取記憶體,以進行快速 自動的符號解析。使用 sym...