1. 程式人生 > 其它 >關於 OD 反彙編找到 C/C++ main 入口

關於 OD 反彙編找到 C/C++ main 入口

OD 版本 : 吾愛破解版OD 

編 譯 器 : vs2022預覽版

一:relese 版.

執行後,od會在初始入口斷點, 這時候我們可以直接右鍵,然後選擇 "查詢">"所有模組間的呼叫" 然後會出來一個視窗, 如下:

會有一堆系統呼叫了的函數出來(應該是),然後我們找到其中的"ucrtbase._cexit"  (也可以雙擊"ucrtbase._cexit" 上面的 "ucrtbase.__p__argc", 一般情況下這個函式下面一個或多個函式也是我們要找的 mian 入口.)

 點選它之後會在"主執行緒"窗口裡跳轉到該函式.

 然後向上找, 一般情況下隔幾個 call 之後, 就會找到一個 "專案名.mainrt_is...."的 CALL,然後進入這個函式, 就會發現,這個函式就是我們要找的 mian 函式.

二: debug 版本.

 

方法1:

       debug 版本的程式跟 relese 程式的反彙編有很大區別, 它一出來的時候 od 自動斷點是斷在有很多 jmp 指令的地方

  這個時候如果我們一直向下面翻的話會發現一個跳轉指令" jmp 021_stos.mainept_handler4_noexcepte_modetfail_fptr" ,注意其中的 "mainept" 開頭, 我們可以直接點選這條指令,就會跳轉到我們要找的主函式裡,

  但是這樣好像有些廢眼睛.

方法2:

  第二個方法我們依然可以用 上面的這種方法, 先右鍵點選,然後選擇  "查詢" > "所有模組間的呼叫" ,然後在彈出來的視窗找到函式 "ucrtbase._register_thread_local_exe_atexit_callback" 或者  " ucrtbase.exit ".


  如果點選 "ucrtbase._register_thread_local_exe_atexit_callback " 函式的話,一般就會跳轉到 入口函式 的上面,往下面找就好了; 如果點選 "ucrtbase.exit" 函式的話, 一般就會跳轉到 入口函式 的下面幾個函式,往上找就行了, 如下圖.

 

  點選跳轉之後,會跳轉到主執行緒模組,然後按上面說的,往上或者往下尋找, 找到 "專案名_invoke_main_slow_..... "(注意,這個 main ) 然後點選進入這個函式,跳轉到該函式模組內部 , 如下圖:

  進入到這個函式之後,  一般在 retn 返回指令 上面的第一個 CALL 函式 ,點選跳轉,會轉到一個 jmp指令(備註一下,這裡的 jmp 指令其實就是上面第一個方法裡直接找到的那個 jmp 跳轉指令)

  ,然後繼續點選跳轉,就會進入到就是我們要找的 main 函式入口裡了.

三: 任何版本

  如果我們在 main 函式中用到了 getchar(); 函式的話, 那麼直接在 右鍵> "查詢" > "所有模組間的呼叫" ,然後在彈出來的視窗中找到 " ucrtbase.getchar" 並雙擊, 就會轉到 main 函式中了.