1. 程式人生 > >如何在程式執行前插入可執行程式碼(算是吾愛的作業吧,活學活用)

如何在程式執行前插入可執行程式碼(算是吾愛的作業吧,活學活用)

0x01準備(愛盤可以下載)

1.OD
2.stud_PE

0x02 給程式增加一個為xxx的區段

也可以在程式空著的地方新增程式不過這種情況較少,當然也會碰到程式不給新增區段。拖入PEID,原來是準備別的軟體進行新增程式碼的但是防護太強,沒成功,之後右擊new session新增區段,將虛擬大小和大小寫為1000(大了沒事,程式碼夠就行),選擇空欄位填充,確定

在這裡插入圖片描述

0x03 將需要執行的函式匯入登錄檔

在程式執行前插入可執行程式碼,c語言使用函式的時候是通過庫呼叫的,我們這裡是組合語言插入程式碼,所以也是和C語言類似,也是呼叫c語言的庫實現的,下面開始匯入庫我原來在想插入什麼程式碼好呢,那麼就執行一個彈出cmd吧
在這裡插入圖片描述


cmd需要一個叫WinExec函式來執行,該函式在kernel32.dll的連結庫種,所以我們呼叫這個連結庫
在這裡插入圖片描述
之後找到這個WinExec這個函式,引入它
在這裡插入圖片描述在這裡插入圖片描述
這個就是我引入的函式,在最底下,因為之前試過一次所以有兩個函式,不過沒有關係,還有一點就是記住函式的RVA,馬上我們需要用這個RVA來找到函式的VA
在這裡插入圖片描述

0x04 OD載入

在這裡插入圖片描述
因為我們需要在新新增的區段來寫程式碼,所以首先找到這個區段在哪裡,點選od上面一排的m按鈕,雙擊xxx
在這裡插入圖片描述
選中複製區段地址
在這裡插入圖片描述
在反彙編視窗中ctrl+g查詢區段
在這裡插入圖片描述
這就是我們剛剛新增區段的開頭
在這裡插入圖片描述
我們直到剛剛引入了函式有個RVA,下面我們來找函式的VA。在左下角的視窗中ctrl+g查詢RVA
在這裡插入圖片描述


找到了VA,記錄下來
在這裡插入圖片描述
之後我們用匯編程式碼寫這個執行的程式碼,也可以其他的比如病毒
在這裡插入圖片描述
這個WinExec函式傳入兩個引數,一個是5表示SW_SHOW,第二個是要執行的命令(這個可以看Win32API手冊),組合語言的引數可以直接push也可以push一個地址放參數,我們push第二個引數的時候,push的是一個地址(地址是004A502A,組合語言就寫為push 加地址),之後我們開始寫函式,函式的寫法為call [](中括號裡面是VA),最後jmp跳回程式原來的入口,這個地址就在下面一點,與程式碼段同在xxx區段。左下角ctrl+g查詢push的地址

雙擊要更改的地方,push 5, push 004A502A, call [004A60C1], jmp 004982B0(視具體情況而定)
在這裡插入圖片描述


轉換成16位方便看清
在這裡插入圖片描述
之後更改
在這裡插入圖片描述
新增的引數就在程式碼段的下面
在這裡插入圖片描述
儲存一下
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
因為我們新增的xxx區段不是程式的入口點,多以我們修改程式入口點
在這裡插入圖片描述
虛擬地址就是我們xxx區段的地址,之後將相對虛擬地址複製貼上到入口點,那麼入口點更改就完成了
在這裡插入圖片描述
最後執行原來的程式和修改過的程式對比一下
在這裡插入圖片描述
彈出了一個cmd的視窗
在這裡插入圖片描述

0x05 總結

向程式中新增程式碼的方式有很多,除了以上的方法還有dll注入和HOOK鉤子,而且不一定是在程式的開頭插入,結尾也可以,中間也可以,只是難度大一點。