使用PIN和OD結合進行指令的修改
前言 在經過一次又一次的失敗之後,終於接受了pin不能實現取完整指令,更改,再放回去的實驗要求。 在同學的提一下,我開始了對OlleyDBG的摸索。目前的思路就是,用pin得到CFG,也就是每條分支指令的地址及其目的地址的地址,然後使用OD來進行指令的修改。由於OD是動態的,可以一邊修改一邊執行,還是很符合我們的要求的嘻嘻。
1. 首先是pin pin在目前的實驗思路中的作用是得出控制流圖。由於前面已經寫好程式了,在這裡只需要輸入一些指令來進行操作即可。 下面列出使用的兩條指令
make obj-ia32/CFG-collect.so TARGET=ia32 //工具程式碼的編譯 ./pin -t source/tools/ManualExamples/obj-ia32/CFG-collect.so -- ./test.out //程式碼的使用
2. 接下來是OD的使用 首先是OD的基本使用
OD的基本使用指令可見https://www.cnblogs.com/yunji5566/p/4249927.html 下面是擷取的使用快捷鍵的表格
一個案例
3. 開始搞實驗
目標檔案
首先是寫了一個很簡單的C++程式碼,test.cpp,在windows的環境下使用DEV C++來進行編譯。 程式碼如下
#include<iostream> using namespace std; void printit(){ cout<<"0"<<endl; } int main(){ printit(); return 0; }
由於主機是64位win10系統,因此需要對編譯器進行設定。將可執行檔案設定為32位的。 在window下使用OD進行分析 得到的結果是醬嬸兒迪~ 注意這裡的地址都是00401000開頭的 在linux下使用pin進行分析 pin這個磨人的小妖精現在的功能就是找出地址,那麼pin找到的地址和OD的地址一樣嗎? 輸出檔案: 注意此時已經將地址隨機化關閉了,具體步驟為進入root許可權,然後更改ALSR設定
sudo -i
echo 0 >/proc/sys/kernel/randomize_va_space
4、思考與思路分析 但是此時的地址仍然不一樣。也就是還需要進行一定的轉換。 不一樣的原因是什麼呢? 在這裡我進行了一個假設,那就是因為一個在虛擬機器裡,一個在主機裡。 所以接下來的步驟就是嘗試在同一個系統中對同一個可執行檔案進行分析。 由於OD只能用於windows系統,因此,接下來的嘗試,將集中於如何在windows系統中使用pin實現控制流圖的生成。