2012-04-25 30 views
9

Tôi đã tự hỏi - làm cách nào để tháo rời nhị phân tự sửa đổi? Tôi đoán bạn không thể sử dụng olly hoặc IDA vì chúng là các bộ tách rời tĩnh, đúng không? Điều gì xảy ra với bộ tách rời nếu bạn nhảy vào giữa lệnh? Và làm thế nào để phân tích động cơ biến chất?Tháo mã tự sửa đổi

+0

Một người không muốn chỉ trích câu hỏi của bạn quá gay gắt. Có lẽ tôi chỉ không hiểu nó! Tuy nhiên, nó có thể không phải là loại câu hỏi mà người ta có thể trả lời trong một vài đoạn văn. – thb

Trả lời

10

Cả OllyDbg và IDA không chỉ là máy phân tích tĩnh, cả hai đều có thể chạy mã. IDA cũng có thể chạy mã của bạn từ xa và theo như tôi biết, nó thậm chí có thể làm gỡ lỗi nhúng. Tất nhiên nếu bạn "phá vỡ" chương trình thực hiện tại một số điểm, và hãy xem tháo gỡ, nó sẽ (trong cả hai chương trình) phản ánh tình trạng hiện tại của chương trình, bao gồm bất kỳ sửa đổi nó đã thực hiện trên chính nó.

Điều gì xảy ra với trình tháo rời nếu bạn chuyển sang giữa hướng dẫn?

Theo kinh nghiệm của tôi, cả trình tách rời được đề cập đều có thể xử lý tình huống này. Ví dụ, xem tại đây, làm thế nào OllyDbg quản lý nó, đây là một ảnh chụp màn hình khi EIP là 00892C0E:

OllyDbg before

Và khi tôi thực hiện EIP = 00892C0F, mà là ở một trung tâm của một lệnh:

OllyDbg after

như bạn thấy, nó chỉ đơn giản là ngắt kết nối lại hướng dẫn, làm cho nó trở thành một mã opcode khác (nhưng vẫn hợp lệ).

Và cách phân tích động cơ biến chất?

Giống như bất kỳ mã nào khác. Các thủ thuật bạn đang đề cập đến (nhảy vào giữa một hướng dẫn, sửa đổi chính nó) đã được phổ biến chủ yếu là một trong khi trước đây, khi disassemblers và debugger không thông minh như họ bây giờ.

Tất nhiên phân tích tĩnh có thể rất khó, nhưng tất nhiên bạn vẫn có thể phân tích các tệp nhị phân hoàn toàn ngoại tuyến và giải mã "biến hình" (trong tâm trí của bạn) để có ý tưởng về mã sẽ làm gì. Nhưng khi bạn có thể sử dụng trình gỡ lỗi trực tiếp, thì bạn chỉ cần xem mã đó là gì.

Tất nhiên, tất cả điều này là một cuộc đua vô tận giữa những người viết mã và mọi người phân tích nó. Ai thắng phụ thuộc vào người từ bỏ sớm hơn.

+1

Chỉ muốn trích dẫn điều này, bởi vì điều này là rất đúng :) "Tất nhiên, tất cả điều này là một cuộc đua vô tận giữa những người viết mã và mọi người phân tích nó. Ai thắng phụ thuộc vào người bỏ cuộc sớm hơn." –

1

Ollydbg sẽ xử lý các tình huống như vậy.

Chức năng bạn đang tìm kiếm là 'Phân tích'. Nó sẽ tái phân phối các hướng dẫn mới tại vị trí và làm mới cửa sổ CPU với mã cập nhật.

Giả sử hướng dẫn tại địa chỉ X sẽ thực hiện một số thay đổi tự sửa đổi. Sau khi bạn thực hiện lệnh đó, bạn có thể chạy lệnh 'Analyze'. Đây là mã tháo rời xung quanh khối cơ bản đó và làm mới CPU với các hướng dẫn được cập nhật.

Để phân tích, nhấp chuột phải vào vị trí mong muốn trong Cửa sổ CPU và nhấp vào Phân tích> Mã phân tích. Lối tắt là Ctrl-A.

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