2010-09-03 10 views
6

Tôi có một exe mà tôi đã mở bằng Trình tháo gỡ PE Explorer. Bây giờ tôi có thể thấy mã asm, trông giống như sau:Làm thế nào để chuyển đổi ASM thành mã có thể đọc được?

push ebx 
    push esi 
    mov ebx,eax 
    mov eax,[ebx+38h] 
    push eax 
    mov eax,[ebx+3Ch] 
    push eax 
    mov ecx,edx 
    mov eax,ebx 
    mov edx,[ebx+30h] 
    mov esi,[eax] 
    call [esi+7Ch] 
    or byte ptr [ebx+00000088h],02h 
    pop esi 
    pop ebx 
    retn 

Tôi không biết điều đó có nghĩa là gì. Có cách nào để chuyển đổi mã này thành mã có thể đọc được (C, C++, C# hoặc VB.NET) không?

Thông tin cơ bản: Lý do tôi cần điều này là vì tôi cần gọi hàm trên từ ứng dụng cửa sổ của mình. Bây giờ chức năng này nằm trong exe của bên thứ ba - không có API hoặc mã nguồn cho nó. Bất kỳ giúp đỡ hoặc tư vấn được đánh giá cao.

Trả lời

0

Điều bạn muốn được gọi là "giải mã".

Điều đó không dễ giải quyết công việc và thường không thể thực hiện được. Bạn có thể thử Google làm khởi đầu.

+0

Tôi đọc bài viết sau trên cp: http://www.codeproject.com/KB/cpp/funccaller.aspx - Tôi có thể áp dụng cùng phương pháp không? – vikasde

+0

Đó là những gì mà những kẻ phá hủy làm (trong số nhiều thứ khác). Chắc chắn bạn có thể làm điều đó, nhưng đây không phải là một nhiệm vụ 5 phút. – BarsMonster

+0

ok. Tôi đã cố gắng làm điều đó theo cách nó được mô tả trong bài viết, nhưng không thể tìm thấy bất kỳ chức năng nào có ý nghĩa với tôi. – vikasde

0

Bạn có thể dịch ngược nó thành C hoặc một số ngôn ngữ khác với con trỏ, nhưng nó vẫn sẽ không thể đọc được.

1

Nếu bạn có thể nắm giữ nó, IDA Pro + Hex-Rays có thể dịch ngược lại thành mã có thể đọc được.

+1

Hey, chỉ có 2000 EUR tất cả mọi thứ với nhau;) ... Tôi đã là một khách hàng của IDA Pro trong nhiều năm, nhưng như là một cá nhân tôi vẫn không thể bị làm phiền để shell ra nhiều hơn cho các plugin. – 0xC0000022L

2

Bạn cần phải biết đối số nào được sử dụng. Trong trường hợp này, có vẻ như các đối số được chuyển đến thói quen này trong các sổ đăng ký eax & edx. Một khi bạn biết những giá trị đó có ý nghĩa gì, bạn có thể tìm ra cách sử dụng thường trình này và tái mã hóa nó bằng bất kỳ ngôn ngữ nào bạn đang sử dụng.

0

Thoạt nhìn, đó là mã đối tượng; nó nhận được (ít nhất) một đối tượng làm đối số, gọi một phương thức của đối tượng đó lấy làm đối số ba thuộc tính của đối tượng và sau đó đặt bit (cờ?) trong thuộc tính khác của cùng một đối tượng thành một đối tượng.

IDA Pro có thể sẽ xác định nguyên mẫu chức năng và có phiên bản miễn phí có tất cả các tính năng bạn cần: http://www.hex-rays.com/idapro/idadownfreeware.htm. Tuy nhiên nó sẽ chỉ cung cấp cho bạn một ý tưởng về nguyên mẫu của hàm, không phải là hành vi của nó (trừ khi bạn có thể "đọc" lắp ráp x86). Việc hoàn nguyên nó thành đồng bằng C/C++ đòi hỏi plugin HexRays vốn khá tốn kém và không phải lúc nào cũng hoạt động (sự giải mã tới một ngôn ngữ cấp cao là khá phức tạp).

0

Tôi hơi muộn để trả lời bài đăng này nhưng thấy rằng câu trả lời được chấp nhận là sai, tôi vẫn sẽ cung cấp cho tôi 0,2 trong trường hợp những người khác đang tìm kiếm điều tương tự.

Điều bạn đang tìm kiếm không phải là "giải mã" vì bạn đã giải mã nó thành mã asm. Những gì bạn muốn là một loại biên dịch của mã tháo rời thành một cái gì đó bạn có thể đọc (như C)

Lĩnh vực kỹ thuật đảo ngược này vẫn chưa được phát triển tốt. Một số IDA được đề cập với một số plugin đắt tiền nhưng nó sẽ làm bạn không tốt ... Tôi sẽ đề cập đến chương trình duy nhất có thể giúp bạn: REC

Đầu ra có thể không chính xác hoặc bạn không thể nhận được bất kỳ C mã ở tất cả tùy thuộc vào chương trình bạn muốn gỡ lỗi. Nhưng đó là lựa chọn tốt nhất bạn có nếu bạn không biết lắp ráp.

Đối với những gì bạn đang cố gắng làm, chức năng bạn đã đăng không làm gì cả. Nó gọi một hàm khác với các tham số và nhận được một giá trị trả về. Những gì bạn quan tâm là gọi [esi + 7Ch]. Bạn cần một trình gỡ rối và bước vào cuộc gọi này.

Để móc hàm đó bên trong chương trình của bạn là một câu chuyện khác ... Bạn nên tự viết nó lên.