Có thể dịch ngược lại dịch vụ của Windows trên Windows .exe không? Hoặc ít nhất là xem hội?


237

Một người bạn của tôi đã tải xuống một số phần mềm độc hại từ Facebook và tôi tò mò muốn xem nó làm gì mà không lây nhiễm cho chính mình. Tôi biết rằng bạn thực sự không thể dịch ngược một .exe, nhưng ít nhất tôi có thể xem nó trong hội hoặc đính kèm trình gỡ lỗi không?

Chỉnh sửa để nói rằng nó không phải là tệp thực thi .NET, không có tiêu đề CLI.


3
phần mềm độc hại từ facebook ?? bạn có thể giải thích điều đó không
Aditya Mukherji

Xin lỗi vì đã trả lời siêu muộn ... nhưng theo cách tôi nghĩ nó đã xảy ra là: cô ấy đã chạy một phần mềm độc hại, đến một lúc nào đó đã spam tất cả các liên hệ của cô ấy trên FB (tôi) bằng một liên kết đến một "video" yêu cầu bạn tải về một "codec mới". Tôi cho rằng nó hành xử như một con sâu theo nghĩa này.
swilliams

Câu trả lời:


445

Với trình gỡ lỗi, bạn có thể bước qua quá trình lắp ráp chương trình một cách tương tác.
Với một bộ phận phân tách , bạn có thể xem các chương trình lắp ráp một cách chi tiết hơn.
Với trình dịch ngược , bạn có thể biến chương trình trở lại thành mã nguồn một phần, giả sử bạn biết nó được viết bằng cái gì (mà bạn có thể tìm ra bằng các công cụ miễn phí như PEiD - nếu chương trình được đóng gói, trước tiên bạn sẽ phải giải nén nó HOẶC Phát hiện dễ dàng nếu bạn không thể tìm thấy PEiD ở bất cứ đâu. DIE hiện có một cộng đồng nhà phát triển mạnh mẽ trên github ).

Người gỡ lỗi:

  • OllyDbg , miễn phí, trình gỡ lỗi 32 bit tốt, mà bạn có thể tìm thấy nhiều plugin và tập lệnh do người dùng tạo để làm cho nó trở nên hữu ích hơn.
  • WinDbg , miễn phí, một trình gỡ lỗi khá có khả năng của Microsoft. WinDbg đặc biệt hữu ích để xem xét các phần bên trong Windows, vì nó biết nhiều về cấu trúc dữ liệu hơn các trình gỡ lỗi khác.
  • SoftICE , SICE cho bạn bè. Thương mại và phát triển đã dừng lại vào năm 2006. SoftICE là một loại công cụ khó chạy bên dưới hệ điều hành (và tạm dừng toàn bộ hệ thống khi được gọi). SoftICE vẫn được sử dụng bởi nhiều chuyên gia, mặc dù có thể khó lấy và có thể không hoạt động trên một số phần cứng (hoặc phần mềm - cụ thể là, nó sẽ không hoạt động trên thẻ gfx của Vista hoặc NVIDIA).

Người tháo gỡ:

  • IDA Pro (thương mại) - công cụ gỡ lỗi / gỡ lỗi hàng đầu. Được sử dụng bởi hầu hết các chuyên gia, như các nhà phân tích phần mềm độc hại, v.v ... Chi phí khá nhiều tiền mặc dù (có phiên bản miễn phí , nhưng nó khá hạn chế)
  • W32Dasm (miễn phí) - một chút ngày nhưng hoàn thành công việc. Tôi tin rằng W32Dasm đang từ bỏ phần mềm hiện nay và có rất nhiều bản hack do người dùng tạo để thêm một số chức năng rất hữu ích. Bạn sẽ phải nhìn xung quanh để tìm phiên bản tốt nhất.

Trình dịch ngược:

  • Visual Basic: Trình dịch ngược VB , thương mại, tạo ra mã byte có thể nhận dạng được.
  • Delphi: DeDe , miễn phí, tạo mã nguồn chất lượng tốt.
  • C: HexRays , thương mại, một plugin cho IDA Pro của cùng một công ty. Tạo ra kết quả tuyệt vời nhưng chi phí rất lớn và sẽ không được bán cho bất kỳ ai (hoặc vì vậy tôi nghe thấy).
  • .NET (C #): dotPeek , miễn phí, dịch ngược các cụm .NET 1.0-4.5 thành C #. Hỗ trợ cho các tập tin dll, .exe, .zip, .vsix, .nupkg và .winmd.

Một số công cụ liên quan có thể có ích trong bất cứ điều gì bạn đang làm là các trình soạn thảo tài nguyên như ResourceHacker (miễn phí) và trình chỉnh sửa hex tốt như Hex Workshop (thương mại).

Ngoài ra, nếu bạn đang thực hiện phân tích phần mềm độc hại (hoặc sử dụng SICE) , tôi hoàn toàn khuyên bạn nên chạy mọi thứ bên trong một máy ảo, cụ thể là VMware Workstation . Trong trường hợp của SICE, nó sẽ bảo vệ hệ thống thực tế của bạn khỏi BSOD và trong trường hợp phần mềm độc hại, nó sẽ bảo vệ hệ thống thực tế của bạn khỏi chương trình mục tiêu. Bạn có thể đọc về phân tích phần mềm độc hại với VMware tại đây .

Cá nhân, tôi sử dụng Olly, WinDbg & W32Dasm và một số công cụ tiện ích nhỏ hơn.

Ngoài ra, hãy nhớ rằng việc tháo rời hoặc thậm chí gỡ lỗi phần mềm của người khác thường chống lại EULA trong ít nhất :)


16
Tôi đánh giá cao đoạn cuối về tính tổng quát của nó, lời khuyên tốt, nhưng thật thú vị trong bối cảnh của câu hỏi: Tôi nghi ngờ một vi-rút đi kèm với EULA! ;-)
PhiLho

4
Trên thực tế, một số phần mềm độc hại và thậm chí là trojan muộn đã có EULAs trong đó (ồ, những người Nga đó ..) Tất nhiên, họ có thể (và) bị bỏ qua bởi các nghiên cứu, bởi vì có thể giả định rằng không ai sẽ tiến lên để kiện họ. .. Ngoài ra, chúng thường được viết quá tệ có nghĩa là bất cứ điều gì tại tòa trong mọi trường hợp.
anon6439

2
Lưu ý rằng phiên bản trước của IDA Pro là miễn phí cho sử dụng phi thương mại.
Simon Buchan

6
Lưu ý rằng hầu hết các phần mềm độc hại hiện nay (ít nhất là phần mềm độc hại được biên dịch) có thể dễ dàng phát hiện nếu nó đang chạy trong VMWare, Virtual PC, WINE, VirtualBox, v.v.
Mick

Nếu bạn đang chạy trong máy ảo, hãy coi chừng cuộc tấn công của Blue Pill.
Siqi Lin

44

Bài đăng tuyệt vời của psoul trả lời cho câu hỏi của bạn vì vậy tôi sẽ không sao chép công việc tốt của anh ấy, nhưng tôi cảm thấy thật hữu ích khi giải thích tại sao đây lại là một câu hỏi hoàn toàn hợp lệ nhưng cũng cực kỳ ngớ ngẩn. Rốt cuộc, đây là một nơi để học, phải không?

Các chương trình máy tính hiện đại được tạo ra thông qua một loạt các chuyển đổi, bắt đầu bằng đầu vào của phần thân các hướng dẫn văn bản có thể đọc được của con người (được gọi là "mã nguồn") và kết thúc bằng một phần hướng dẫn có thể đọc được trên máy tính (được gọi là "nhị phân" hoặc "máy" mã ").

Cách mà một máy tính chạy một bộ hướng dẫn mã máy cuối cùng rất đơn giản. Mỗi hành động mà bộ xử lý có thể thực hiện (ví dụ: đọc từ bộ nhớ, thêm hai giá trị) được biểu thị bằng một mã số. Nếu tôi nói với bạn rằng số 1 có nghĩa là hét lên và số 2 có nghĩa là cười khúc khích, và sau đó giơ thẻ với 1 hoặc 2 trên đó để mong bạn hét lên hoặc cười khúc khích tương ứng, thì tôi sẽ sử dụng những gì cơ bản là cùng một hệ thống mà máy tính sử dụng vận hành.

Tệp nhị phân chỉ là một tập hợp các mã đó (thường gọi là "mã op") và thông tin ("đối số") mà mã op hoạt động.

Bây giờ, ngôn ngữ hợp ngữ là ngôn ngữ máy tính trong đó mỗi từ lệnh trong ngôn ngữ thể hiện chính xác một mã op trên bộ xử lý. Có một bản dịch 1: 1 trực tiếp giữa lệnh ngôn ngữ hợp ngữ và mã op của bộ xử lý. Đây là lý do tại sao lắp ráp mã hóa cho bộ xử lý x386 khác với lắp ráp mã hóa cho bộ xử lý ARM.

Việc tháo gỡ chỉ đơn giản là thế này: một chương trình đọc qua tệp nhị phân (mã máy), thay thế mã op bằng các lệnh ngôn ngữ lắp ráp tương đương của chúng và đưa ra kết quả dưới dạng tệp văn bản. Điều quan trọng là phải hiểu điều này; nếu máy tính của bạn có thể đọc nhị phân, thì bạn cũng có thể đọc nhị phân, bằng tay với bảng mã op trong tay (ick) hoặc thông qua trình dịch ngược.

Trình phân tách có một số thủ thuật mới và tất cả, nhưng điều quan trọng là phải hiểu rằng trình phân tách cuối cùng là một cơ chế tìm kiếm và thay thế. Đó là lý do tại sao bất kỳ EULA nào cấm nó cuối cùng đều thổi khí nóng. Bạn không thể cho phép máy tính đọc dữ liệu chương trình ngay lập tức và cũng cấm máy tính đọc dữ liệu chương trình.

(Đừng hiểu sai ý tôi, đã có những nỗ lực để làm như vậy. Chúng hoạt động tốt như DRM trên các tệp bài hát.)

Tuy nhiên, có những cảnh báo cho phương pháp tháo gỡ. Tên biến là không tồn tại; điều đó không tồn tại với CPU của bạn. Các cuộc gọi thư viện là khó hiểu như địa ngục và thường yêu cầu tháo rời các nhị phân tiếp theo. Và lắp ráp là khó như địa ngục để đọc trong điều kiện tốt nhất.

Hầu hết các lập trình viên chuyên nghiệp không thể ngồi và đọc ngôn ngữ lắp ráp mà không bị đau đầu. Đối với một người nghiệp dư, điều đó sẽ không xảy ra.

Dù sao, đây là một lời giải thích có phần bóng bẩy, nhưng tôi hy vọng nó sẽ giúp. Mọi người đều có thể thoải mái sửa chữa bất kỳ sai sót nào từ phía tôi; đã được một lúc rồi. ;)


1
Điều này giải thích chi tiết về việc tháo gỡ, nhưng tôi rất thích nghe một công phu về dịch ngược. Nó có khả năng là không có kết quả? Hãy cẩn thận của nó là gì?
Prometheus

@has: Dịch ngược mã gốc là một thử thách khá khó khăn, thường không thể thực hiện được. Tối ưu hóa là cực kỳ tích cực, thường xuyên dịch mã nguồn thành không có gì cả. Bạn không thể dịch ngược được gì cả.
IInspectable


11

Bất kỳ trình sửa lỗi tốt có thể làm điều này. Hãy thử OllyDbg . (chỉnh sửa: có trình phân tách tuyệt vời thậm chí giải mã các tham số cho các cuộc gọi WinAPI!)



6

Chắc chắn, có một cái nhìn tại IDA Pro . Họ cung cấp một phiên bản eval để bạn có thể dùng thử.


6

Nếu bạn chỉ đang cố gắng tìm ra phần mềm độc hại làm gì, thì việc chạy nó dưới một cái gì đó giống như công cụ miễn phí Process Monitor có thể dễ dàng hơn nhiều sẽ báo cáo bất cứ khi nào nó cố gắng truy cập vào hệ thống tệp, sổ đăng ký, cổng, v.v.

Ngoài ra, sử dụng một máy ảo như máy chủ VMWare miễn phí rất hữu ích cho loại công việc này. Bạn có thể tạo một hình ảnh "sạch", và sau đó quay lại mỗi lần bạn chạy phần mềm độc hại.


4

Bạn có thể nhận được một số thông tin khi xem nó trong hội đồng, nhưng tôi nghĩ việc dễ nhất là khởi động một máy ảo và xem nó làm gì. Hãy chắc chắn rằng bạn không có cổ phiếu mở hoặc bất cứ thứ gì tương tự mà nó có thể nhảy qua;)


Vâng, tôi đã nghĩ về điều đó, nhưng tôi không muốn gặp rắc rối khi thiết lập một VM chỉ để giết nó :)
swilliams

1
Đúng, nó là một rắc rối cho trường hợp này, nhưng tôi luôn thấy hữu ích khi giữ một VM xung quanh để thử nghiệm phần mềm mới hoặc những thứ như thế này. Sau đó tôi có thể làm những gì tôi muốn và chỉ cần chọn không lưu trạng thái ở cuối và quay lại VM sạch cho lần chạy tiếp theo.
Rob Prouse

4

Boomerang cũng có thể đáng để kiểm tra.


Không hẳn vậy. nó sụp đổ và cháy cho bất cứ điều gì phức tạp hơn các thực thi tầm thường nhất.
shoosh

4

Những gì bạn muốn là một loại phần mềm được gọi là "Disassembler".

Google nhanh chóng mang lại điều này: Liên kết


Bạn đã không giải thích điều này
scitronboy

3

Tôi không thể tin rằng không ai nói gì về Trình gỡ lỗi miễn dịch .

Trình gỡ lỗi miễn dịch là một công cụ mạnh mẽ để viết các khai thác, phân tích phần mềm độc hại và đảo ngược các tệp nhị phân. Ban đầu, nó dựa trên mã nguồn Ollydbg 1.0, nhưng đã sửa lỗi sửa tên. Nó có API Python được hỗ trợ tốt để dễ dàng mở rộng, vì vậy bạn có thể viết các tập lệnh python của mình để giúp bạn phân tích.

Ngoài ra, có một Peter tốt từ nhóm Corelan đã viết được gọi là mona.py , công cụ xuất sắc btw.


2

Nếu bạn muốn chạy chương trình để xem những gì nó làm mà không lây nhiễm máy tính của bạn, hãy sử dụng với một máy ảo như VMWare hoặc Microsoft VPC hoặc một chương trình có thể sandbox chương trình như SandboxIE




2

Tôi muốn nói vào năm 2019, Ghidra ( https://ghidra-sre.org/ ) đáng để kiểm tra. Nó là nguồn mở (và miễn phí) và có các khả năng phân tích mã phi thường, bao gồm khả năng dịch ngược tất cả các mã trở lại thành mã C khá dễ đọc.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.