日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用IDA Pro反汇编程序

發布時間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用IDA Pro反汇编程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

IDA Pro是一款強大的反匯編軟件,特有的IDA視圖和交叉引用,可以方便理解程序邏輯和快速定位代碼片斷,以方便修改。

?

IDA視圖

示例程序

下面會通過修改示例程序的輸出字符串,來講解如何使用IDA Pro。

#includemain() {int n;scanf ("%d",&n);if (n > 0)printf("a > 0"); //后面會用IDA Pro把'a'改成'n'elseprintf("n < 0"); }

編譯后的程序下載:demo

運行IDA Pro

運行IDA Pro,并使用PE文件的方式打開示例的test.exe文件。IDA Pro會新建一個工程,并開始反匯編程序。反匯編完成后,在[IDA-View]窗口中,可以看到程序邏輯的樹形圖,如下:

樹形圖把條件分支清晰地顯示出來了,綠色線連著的表示條件為true時執行的邏輯,而紅色線表示條件為false時執行的邏輯。右下角有IDA視圖的縮略圖,在上面點擊可以快速定位到視圖的指定位置。 IDA的工具欄有幾個按鈕對定位代碼很重要,如下圖所示:

?

從左到右分別是:?Open exports window:打開導出窗口?Open import window:打開導入窗口 *Open names window:函數和參數的命名列表 *Open functions window:程序調用的所有函數窗口 *Open strings window: 打開字符串顯示窗口,會列出程序中的所有字符串,該窗口有助于你通過程序的運行輸出逆向找出對應的代碼片斷。

定位代碼片斷

假設我們現在接到個任務,需修正程序,把輸出“a > 0”修正為“n > 0”。示例程序比較簡單,直接看IDA視圖我們就能找到需修改的代碼片斷,但實際處理時,可能程序有幾m大,通過一個個看IDA視圖已沒法有效找到相關的執行代碼片斷,這時怎么辦? 使用字符串窗口和IDA強大的交叉引用! 點擊工具欄的[Open strings windows]按鈕,可以看到如下的程序字符串:

程序的字符串較少,可以很快地看到我們需要的字符串“a > 0”在數據段00403003位置。假如字符串多到已不能肉眼定位查找,因為字符串窗口是沒有查找功能的,這時需要借助其他的文本編輯器,如notepad,editplus等。在字符串窗口內右鍵,選擇菜單[copy]命令,會把字符串窗口的所有內容復制到剪貼板,再粘貼到記事本中查找就可以了。?雙擊字符串窗口的該行字符串,會跳轉到IDA視圖的00403003位置,如下圖所示:?

?

該位置的字符串后面會注釋有DATA XREF的字樣,這是程序中引用到該字符串的代碼片斷的地址!在該行上右鍵,選擇[Jump to cross reference...]項,會立即跳轉到引用該字符串的代碼片斷位置!

最后定位的代碼片斷 上圖顯示的匯編指令即是我們要找的代碼片斷,這時點擊[Hex View-A]窗口,會切換到二進制瀏覽模式,并高亮了匯編代碼的二進制格式指令,如下圖所示:

已找到需修改的代碼片斷,剩下的只需把a改成n。

修改程序文件

在IDA中,可以在[Hex View-A]窗口右鍵選擇[Edit]來修改二進制指令。修改后通過右鍵選擇[Commit Change]可以看到修改后的IDA視圖。但需要注意的是,這種方式的修改并不會更新原始程序文件,實際只是修改了IDA的項目文件!IDA中只適合做一些驗證性的修改,確保正確后再使用其他工具修改原始程序文件。 在IDA中驗證修改正確后,可以使用UltraEdit或Hex Workshop來修改原始程序文件。下面會以UltraEdit為例來說明如何修改。

?

用UltraEdit直接打開程序文件,UltraEdit會以16進制模式顯示程序文件。UltraEdit顯示的地址和IDA顯示的地址是不同的,為了找到對應代碼片斷在UltraEdit中的實際地址,需要使用到UltraEdit的查找功能。在IDA中復制需修改的16進制模式顯示的指令,在UltraEdit中打開查找,粘貼并查找該16進制字符串,UltrEdit會很快定位到該指令處,如下圖所示:

在IDA中使得右鍵來復制

在UltraEdit打開查找功能

?

找到了UltraEdit的對應位置 現在我們要把“a > 0”改成“n > 0”,a對應的ASCII碼是61,而n對應的ASCII碼是6E,只需把61改成6E就可以了,修改后保存。

再次運行,可以看到結果已改變!

示例只是修改了字符串,只需更改數據段內容就可以了,不用更改指令。假如需要更改指令,需要參考< a href="http://courses.engr.illinois.edu/ece390/resources/opcodes.html#Main">8086指令操作表寫出對應指今的16進制形式,再修改。

參考資料:
http://blog.csdn.net/liquanhai/article/details/5479141?http://www.youtube.com/watch?v=Gl2S0YPRb9shttp://www.woodmann.com/crackz/Tutorials/Flores1.htm?http://courses.engr.illinois.edu/ece390/resources/opcodes.html#Mainhttp://faydoc.tripod.com/cpu/conventions.htm

總結

以上是生活随笔為你收集整理的利用IDA Pro反汇编程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。