2011-08-28 34 views
1

我正試圖解決這個編程難題,另一名學生在我的學校放出來,我們得到一個.exe和相應的.c源代碼。我試圖解決這個問題的方式是使用緩衝區溢出,並且我設法在Linux中使用perl腳本作爲輸入,以便我可以輸入返回地址的十六進制值。Windows命令行中的十六進制輸入

問題是我們必須在Windows中使用.exe,我不知道如何在命令行中輸入十六進制值。對於Linux版本,我用這樣一個問題:Hex values in gdb input files和我的代碼結束了被這樣的:

./a.out $(perl -e 'print "A"x34 . "\x7d\x86\x04\x08";')

我怎麼會去上的Windows命令行這樣做呢?

感謝您提供的任何幫助,如果我的問題缺乏某些方面,我會提前道歉;我對這件事很陌生。

回答

1

你有一些選擇

  1. 安裝Perl或Python包的Windows。然後,您可以像在Linux中一樣執行類似的操作。

  2. 如果你有PowerShell中,你可以做一些腳本,如鏈接給出如下:

http://www.sans.org/windows-security/2010/02/11/powershell-byte-array-hex-convert/

注意,當您爲Windows編譯源代碼,會出現結構變化的堆棧和EIP的位置。因此,相同的負載可能無法在Linux上運行。

+0

感謝您的快速回答。我在Windows上安裝了perl,但是相同的命令不起作用,因爲.exe將整個命令視爲字符串,而不是先評估perl腳本。在Linux中是否有與$(...)相當的功能來首先評估perl腳本?謝謝你的時間。 – nolax

+0

感謝您的PowerShell鏈接。然而,有沒有辦法做一些簡單的事情,比如將單個數字轉換爲十六進制,而不使用PowerShell? – Alex