2011-03-03 126 views
2

是否有任何庫可從.NET調用,我可以在其中傳遞二進制數據並將其反彙編爲x86彙編代碼?x86 asm反彙編程序庫

+0

以什麼形式將您所期望的代碼?文本? – unwind 2011-03-03 13:26:13

+0

文字很好,是 – 2011-03-03 13:27:05

回答

3

如果您不介意使用P/Invoke綁定到非託管dll,請查看beaengine,它是您可能找到的最佳反彙編程序庫。

+0

+1我喜歡它,謝謝。 – karlphillip 2011-03-03 14:52:57

+0

我認爲這是我要去的庫 - 非常易於使用,並且還有一個C#包裝。謝謝=) – 2011-03-03 20:35:52

2

libdisasm

的libdisasm庫提供從二進制流的Intel x86指令基本拆卸。目的是提供一個易於使用的反彙編程序,可以從任何應用程序調用;可以用AT語法和Intel語法以及包括詳細指令和操作數類型信息的中間格式來產生反彙編。

官方項目提供它作爲* nix庫。 但是Phenoelit的人寫了一個基於這個庫的Windows調試器,並將它移植到Windows。您可以在頁面底部下載整個應用程序的源代碼(是的,它們包含了Windows的libdisasm端口)。

2

我已經試用過BeaEngine和diStorm的.NET包裝,但它們要麼崩潰,要麼根本不拆解。我確實找到了一個受管理的LibDasm端口,作爲BlackStorms reverse engineering framework的一部分,到目前爲止它似乎工作。它還包含PE操作代碼,如果你需要的話。

+0

我會檢查這一點 - 謝謝! =) – 2014-09-02 21:15:03

+0

@cyanic你好,我已經更新了你的鏈接,因爲現在這個鏈接已經死了,現在發現這個框架非常困難,不是很難哈哈,但是從現在開始幾年後它會變得更加困難,所以我自己也對它進行了鏡像。 **這是唯一包含完全移植到C#.NET的LibDasm的C#軟件** – SSpoke 2015-09-09 03:51:36

2

由cyanic提供的鏈接似乎不再可用。

如果您使用的是100%的C#.NET而不是使用interop,則SharpDisasm會向英特爾和AT & T語法提供x86/x86-64反彙編程序。它將每條指令解碼爲一個對象,以訪問關於該指令的低級信息(例如指令大小,操作數編號和類型等)。

SharpDisasm是libudis86 C庫反彙編器的完整C#端口。

反彙編程序通過SharpDisam.Disassembler類暴露。從提供的示例控制檯應用程序

輸出:

C:\>echo a1 c9 fd ff ff a1 37 02 00 00 b8 37 02 00 00 b4 09 8a 
25 09 00 00 00 8b 04 6d 85 ff ff ff 89 45 f0| disasmcli 32 

00000000 a1 c9 fd ff ff     mov eax, [0xfffffdc9] 
00000005 a1 37 02 00 00     mov eax, [0x237] 
0000000a b8 37 02 00 00     mov eax, 0x237 
0000000f b4 09       mov ah, 0x9 
00000011 8a 25 09 00 00 00    mov ah, [0x9] 
00000017 8b 04 6d 85 ff ff ff   mov eax, [ebp*2-0x7b] 
0000001e 89 45 f0      mov [ebp-0x10], eax 

C:\>echo 488b05f7ffffff67668b40f06766035e1048030425ffff 
000067660344bef04c0384980000008048a10000000000800000 | disasmcli 64 

0000000000000000 48 8b 05 f7 ff ff ff   mov rax, [rip-0x9] 
0000000000000007 67 66 8b 40 f0     mov ax, [eax-0x10] 
000000000000000c 67 66 03 5e 10     add bx, [esi+0x10] 
0000000000000011 48 03 04 25 ff ff 00 00  add rax, [0xffff] 
0000000000000019 67 66 03 44 be f0    add ax, [esi+edi*4-0x10] 
000000000000001f 4c 03 84 98 00 00 00 80  add r8, [rax+rbx*4-0x80000000] 
0000000000000027 48 a1 00 00 00 00 00 80 00 00 mov rax, [0x800000000000]