逆向工程作业
《軟件逆向工程原理與實踐》第一章概述及作業
一.什么是逆向工程?
簡稱RE,一般指,通過分析物體,機械設備或系統,了解其結構,功能,行為等。
二.代碼逆向工程是什么?
代碼逆向工程(Reverse Code Engineering,簡稱RCE )是逆向工程在軟件領域中的應用,目 前還沒有準確而統一的術語,實際交流中經常出現混用的情況,常用術語有RCE、RE、逆向工 程等,使用起來較為隨意。
三.逆向工程的分析法
1.靜態分析法
靜態分析法是在不執行代碼文件的情形下,對代碼進行靜態分析的一種方法。靜態分析時并 不執行代碼,而是觀察代碼文件的外部特征,獲取文件的類型(EXE、DLI、DOC、ZIP等)、大 小、PE頭信息、Import/ExportAPL內部字符串、是否運行時解壓縮、注冊信息、調試信息、數 字證書等多種信息。
2.動態分析法
動態分析法是在程序文件的執行過程中對代碼進行動態分析的一種方法,它通過調試來分析 代碼流,獲得內存的狀態等。通過動態分析法,我們可以在觀察文件、注冊表(Registry ).網絡 等的同時分析軟件程序的行為
?四.反匯編工具的使用
1.界面
a.反匯編窗口:顯示被調試程序的反匯編代碼,標題欄上的地址、機器碼、反匯編代碼、注釋。 b.寄存器窗口:顯示當前所選線程的 CPU 寄存器內容 c.信息窗口:顯示反匯編窗口中選中的第一個命令的參數及一些跳轉目標地址、字串等 d.數據窗口:顯示內存或文件的內容。右鍵菜單可用于切換顯示方式。 e.堆棧窗口:顯示當前線程的堆棧。2.使用方法
(1)查找可執行文件中所有字符串:在“反匯編窗口”單擊鼠標右鍵,選擇“查找”選項可查看可執行文件反匯編代碼的“所有參考文本字串” (2)修改某個內存地址的數據: 在“數據窗口”按“Ctrl+G”,可查找某個內存地址的值。 在“數據窗口”,選中要修改的數據,單擊鼠標右鍵,選擇“二進制”選項 的“編輯”項,可修改數據值。 在“數據窗口”,單擊鼠標右鍵,選擇“復制到可執行文件”選項,再選擇 “保存文件選項”3.常用快捷鍵
F2:設置斷點,只要在光標定位的位置按F2鍵即可,再按一次F2鍵則會刪除斷點。
F8:單步步過。每按一次這個鍵執行一條反匯編窗口中的一條指令,遇到 CALL 等子程序不進入其代碼。F7:單步步入。功能同單步步過(F8)類似,區別是遇到 CALL 等子程序時會進入其中,進入后首先會停留在子程序的第一條指令上。
F4:運行到選定位置。作用就是直接運行到光標所在位置處暫停。
F9:運行。按下這個鍵如果沒有設置相應斷點的話,被調試的程序將直接開始運行。
CTR+F9:執行到返回。此命令在執行到一個 ret (返回指令)指令時暫停,常用于從系統領空返回到我們調試的程序領空。
ALT+F9:執行到用戶代碼。可用于從系統領空快速返回到我們調試的程序領空。
Ctrl+F:查找字符
Ctrl+G:跳到制定代碼
Enter:跟蹤語句。
五.逆向分析并修改Hello World程序
5.1 源代碼
#include"windows.h" #include"tchar.h" int_tmain(int argc,TCHAR *argv[]){MessageBox(NULL,_T("Holle World"),_T("www.baidu.edu"),MB_OK);return 0; }5.2編譯出來的效果
5.3 用OllyDbg打開
?
?5.4 找到MessageBox()所在的位置就找到了需要調換的兩句話
5.5 方法一
將界面上的“baidu”和“Helloworld 進行對調
將兩條指令的地址Ctrl+E 進項對調
對調完了后 點擊右鍵? copy to executable file -->ALL modificatons
在彈出的窗口里繼續右鍵 選擇Save file保存為新文件
5.6 方法二
將字符串在數據段的地址(注意地址的提取方式,大頭還是小頭)
可以在數據窗口里CTRL+G查找該地址
對選中的內容CTRL+E打開編輯窗口
編輯完了后,右鍵 選擇copy to executable file
再用上一種方法同樣的保存操作
5.7兩者得到的結果是一樣的
?六.思考與練習
6.1 代碼如下
#include<stdio.h> int main(int argc, char* argv[]) {printf("hello world");return 0;6.2 操作同上,在ollbdg中打開文件并找到所在位置
?采用同上述方法二的操作
6.3 輸出來就可以了
要在修改的exe 文件夾里打開cmd
?
?
?
總算完成了。
總結
- 上一篇: java中有scoreframe类型嘛_
- 下一篇: cmdline常用参数