簡體   English   中英

32位和64位反匯編的區別

[英]Differences in disassembling 32 bit and 64bit

我從逆向工程開始了我的冒險,但我有一些從一開始就無法解決的問題。 我正在關注 YT 上的教程,但我遇到了一些差異。 因此,當我使用教程中的這段代碼時:

#include <stdio.h>
#include <string.h>

int main(int argc, char** argv)
{
    char buffer[500];
    strcpy(buffer, argv[1]);

    return 0;
}

作為教程中的那個人,我應該得到反匯編結果: 預期結果

但是當我使用gcc -g -z execstack -fno-stack-protector在 32 位虛擬機上編譯我的程序並得到如下結果時: 在此處輸入圖片說明

當我使用gcc -g -z execstack -fno-stack-protector -m32在 64 位虛擬機上編譯相同的 cod 時,我得到了相同的結果。 但是,如果我使用gcc -g -z execstack -fno-stack-protector編譯它,我會得到如下結果: 在此處輸入圖片說明

所以它看起來像教程中的屏幕截圖,但它是 64 位版本。 所以我的問題是,我做錯了什么還是我應該改變什么? 我不知道我是否應該學習使用 64 位系統或找到修復 32 位系統的方法。 任何人都可以幫助我嗎?

對於 x86 和 x64,您不需要兩台不同的虛擬機,只需為 x64 制作一台,您就可以同時執行 x86 和 x64 二進制文件。

您可能想找到提供二進制文件的教程,這樣您就不必弄亂編譯器標志。 程序集不同的原因是因為不同的編譯器版本和設置。 您可以嘗試禁用優化,但有時會浪費時間,最好找到提供二進制文件的教程。

您的漏洞利用必須針對您的二進制文件量身定制,而不是教程中的不同二進制文件。

最值得注意的是,在您的示例中,本地堆棧幀的大小在第二個屏幕截圖中為 0x200,但在原始屏幕截圖中為 0x1F4。

您需要對齊您的 shellcode 以匹配放大的堆棧框架的布局。

使用試錯法編寫各種長度的'aaaaaaaaaaaaaaaaaaa'並檢查內存以查看它的位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM