2009-05-20 31 views
5

Tôi đang tìm một thư viện sẽ tháo rời mã x86 thành một kiểu mô hình đối tượng nào đó mà sau đó tôi có thể sử dụng để viết các thường trình phân tích mã. Tôi không quan tâm đến một thư viện chuyển đổi mã x86 thành văn bản tháo gỡ - Tôi đã tìm thấy nhiều hơn một vài trong số đó, nhưng chúng không hữu ích vì tôi muốn thực hiện một số công việc trên đầu mã mà tôi đã tháo rời . Oh, và tôi muốn nó được. Net code (VB hoặc C# thích hợp hơn).Có bất kỳ thư viện phân tách VB/C# x86 nào tốt không?

+0

Native x86? hoặc IL? –

+0

Gốc x86. IL rất dễ dàng ... :-) – panopticoncentral

+0

[Reflector] (http://www.red-gate.com/products/reflector/) là bạn của bạn. – Vadim

Trả lời

6

Trình phản xạ không thực hiện x86 theo như tôi biết.

Đặt cược tốt nhất của bạn là sử dụng giao diện tập lệnh hoặc COM đến OllyDbg hoặc IDA Pro.

Tôi muốn giới thiệu IDA Pro nếu bạn có thể mua được. IDA có một API rất phong phú, phát triển tích cực và rất nhiều tài liệu. Bạn có thể chạy nó ở chế độ tự trị, tôi tin rằng sử dụng công tắc '-AS'. Xem http://www.hex-rays.com/idapro/idadoc/417.htm để biết thêm thông tin về các đối số dòng lệnh.

Tôi cũng chạy vào libdasm, nhưng không bao giờ sử dụng nó, vì vậy không chắc chắn nó tốt như thế nào. libdasm trông giống như C/C++ vì vậy nó sẽ được đơn giản để viết một wrapper API trong C#.

+0

Tôi đã sử dụng IDA Pro như một bộ tách rời trực tiếp nhưng tôi không nghĩ đến việc sử dụng nó vì nó trông giống như nó chỉ có tự động hóa nội bộ. Có thể tự động hóa nó từ bên ngoài không? Tôi đoán tôi không phải là 100% phản đối làm việc hoàn toàn trong IDA Pro, nhưng tôi muốn sử dụng một ngôn ngữ .Net nếu tôi có thể. – panopticoncentral

+1

Có, bạn có thể chạy nó ở chế độ tự trị và chỉ định tập lệnh IDC bạn muốn chạy. Bạn cũng có thể phát triển bằng cách sử dụng giao diện C API và COM từ API plugin. Đó có lẽ là giải pháp tháo gỡ và phân tích tốt nhất bạn sẽ nhận được. – kervin

4

Câu hỏi cũ, nhưng nếu người khác đến và bạn đang thực hiện 100% C# .NET thay vì sử dụng interop, SharpDisasm cung cấp bộ tách x86/x86-64 cho cả hai cú pháp của Intel và AT & T. Nó giải mã mỗi lệnh cho một đối tượng cung cấp quyền truy cập vào thông tin cấp thấp về lệnh (ví dụ: kích thước lệnh, số hạng toán và các loại vv).

SharpDisasm là cổng C# đầy đủ của bộ tách rời C-library libudis86.

Bộ tách rời được hiển thị thông qua lớp SharpDisam.Disassembler.

Output từ ví dụ giao diện điều khiển ứng dụng được cung cấp:

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] 
2

Necromancing, như khá nhiều thời gian đã trôi qua.
Có, thực sự có một số.

Capstone.NET là khá nhiều tính năng hoàn chỉnh (libcapsone-port ARM, ARM64 (còn gọi là ARMv8/AArch64), M68K, Mips, PowerPC, Sparc, SystemZ, XCore, X86 (bao gồm X86_64).Nó hỗ trợ hầu hết các phần mở rộng CPU hiện đại):
https://github.com/9ee1/Capstone.NET
http://www.capstone-engine.org/features.html
(MIT giấy phép)

Sau đó, như đã đề cập, có SharpDisasm (libudis cổng):
https://sharpdisasm.codeplex.com/
(Giản thể BSD Giấy phép (BSD))

Tiếp theo là Reko (x86-Decompiler)
https://github.com/uxmal/reko
(GNU General Pu Giấy phép blic)

Có ElfSharp để đọc file ELF:
https://github.com/konrad-kruczynski/elfsharp
(MIT & LLVM Giấy phép)

Hoặc đọc các định dạng PE như thế này:
http://code.cheesydesign.com/?p=572

Hoặc sử dụng PETools:
https://github.com/jsok/PETools
(Giấy phép MIT)

Ngoài ra còn có một công cụ để kiểm tra file lib:
https://github.com/BlazingHeart/SymbolExplorer

Ngoài ra còn có một thư viện x86 lắp ráp:
https://code.google.com/p/managed-x86/

Và chức năng ELF băm
https://damieng.com/blog/2007/11/24/calculating-elf-32-in-c-and-net


Plus có một trang chuyên dụng tại wikibooks:
https://en.wikibooks.org/wiki/X86_Disassembly/Disassemblers_and_Decompilers

Ngoài ra còn có các snowman-decompiler, trong đó sử dụng Capstone:
https://github.com/yegord/snowman

Các vấn đề liên quan