引言
當我們僅有一個C/C++等編譯的可執行程序(windows 上的 exe 文件),而沒有源碼時我們應該怎么分析調試該可執行程序呢?我們可以通過動態分析或靜態分析的方式達成我們的目的,當然比較有效的方案當然是靜態分析結合動態分析的方式。在靜態分析中常使用IDA等工具進行分析,在動態分析時我們常使用 OllyDbg、windbg、x64dbg等進行分析,OllyDbg后面已經不在維護了,僅支持32位程序,windbg上手難度比較高,所以本次我們介紹 x64dbg 工具的使用。
工具的下載與安裝
首先我們要學習使用 x64dbg 當然要先下載安裝該工具,該工具是綠色免安裝的,我們可直接訪問官方地址 https://x64dbg.com/ 進行下載,下載后是一個壓縮包文件,我們進入解壓后的目錄中,找到 x96dbg.exe 文件,雙擊運行,運行后我們可以選擇點擊安裝,按照操作提示安裝即可。當然我們也可以不安裝直接運行。
該工具安裝后會在桌面創建兩個快捷方式,同時也會在鼠標右鍵菜單中添加快捷菜單。
調試
打開進程
要想調試程序我們先要打開程序,x64dbg 有連個獨立的程序x32dbg和x64dbg,分別用于調試windows的32位和64位程序,我們需要使用對應的程序進行調試
直接打開程序
首先要介紹的第一種打開方式是直接打開程序,我們可以找到我們要調試的程序,單擊鼠標右鍵,選擇x64dbg直接進行調試,也可以先打開x64dbg,然后選擇文件->打開,然后選擇我們要調試的程序,當然直接拖進來也是可以的。
附加到現有進程
第二種調試方式是附加到現有進程,當程序已經在運行狀態時,我們可以打開工具,然后點擊 文件->附加 選擇要調試的進程進行附加調試
頁面介紹
程序打開后我們可以看到如下頁面
最大的窗口是反匯編窗口,用于顯示當前的反匯編內容,它下面的是內存窗口,可以通過地址查看內存中的數據,它右邊的是寄存器窗口,用于顯示當前寄存器中的值,寄存器窗口下面是棧窗口,用于顯示當前棧內的數據
調試
要調試我們最常用的首先就是添加斷點,在反匯編窗口中找到我們要添加斷點的位置,然后按 F2 鍵即可添加斷點,再次按F2鍵即可取消斷點
步過,所謂的步過就是單步執行,遇到調用指令時不會進入調用的函數的內部,我們可以通過 F8 鍵使用步過
步進,所謂的步進和步過的區別就是在遇到調用指令時會進入到所調用的函數內部
繼續執行可以按 F9,程序會在遇到下一個斷點或出現異常時再次停下來
內存布局
按 Alt + M 可以切換到內存布局頁面,在此頁面中我們可以看到各個模塊以及各個段的加載地址
符號
按 Alt + E 可以切換到符號頁面,在該頁面中我們可以單機模塊,在右側中查看內部的符號信息,同時我們也可以在此頁面對符號進行搜索,找到我們需要調試接口
對于windows提供的系統庫我們可以通過鼠標右鍵下載對應的符號信息文件
調試技巧
通過上面的介紹我們初步了解到了工具是如何使用的,這里并沒有長篇大論僅把最常用最基礎的功能告訴大家,因為寫的太長了我自己都不愿意看;接下來給大家介紹一些簡單的調試技巧
通過UI信息找到調試位置
我們在調試時很大的一個困難就是我們不知道哪里才是我們想要調試的部分,那應該怎么辦呢,首先第一種方法是通過UI的界面提示找到我們要調試的位置
比如我們在輸入授權碼時的錯誤提示信息,我們可以根據上面的字符串找到我們要調試的位置
要搜索字符串我們可以在CPU頁面的反匯編窗口中單機鼠標右鍵,選擇搜索,然后根據需要選擇搜索范圍,最后點擊字符串,接下來我們就可已在下面輸入我們發現的字符串進行搜索了
找到目標字符串后我們通過雙擊即可跳轉到使用的位置了,這樣我們也就找到了對應位置的代碼了
通過系統接口進行定位
我們可以通過一些關鍵的系統接口進行定位,思路是我們根據目標程序的行為進行初步判斷,判斷它可能調用了哪些系統接口,比如創建文件?寫入文件?彈出對話框等等等等,猜到了程序調用的系統接口后我們就可以在符號頁面找到對應的系統接口,然后通過單機跳轉到反匯編,添加斷點進行調試,這樣當程序調用該接口時就會觸發斷點,我們也就可以根據調用堆棧找到對應的邏輯了
防止調試分析
我們的程序經常不想讓用戶進行分析,因為通過簡單的分析就可以知道我們程序的邏輯,核心算法,還可以對我們的程序進行修改和破解,那我們應該如何進行訪問呢?
答案就是加殼,使用 Virbox protector 工具進行加殼后就可以防止其他人對我們的程序進行惡意分析和修改了,我們可以禁止其調試我們的程序,還可以對我們的程序進行和保護,讓其無法分析出我們的邏輯,同時還可以對程序內部的字符串等信息進行加密的等等