Disassembling Python Byte Code

Thảo luận trong 'ACM/Programming' bắt đầu bởi krone, 27/12/17, 04:12 PM.

  1. krone

    krone Moderator Thành viên BQT

    Tham gia: 26/07/16, 03:07 PM
    Bài viết: 243
    Đã được thích: 122
    Điểm thành tích:
    43
    Nhân tiện trong challenge WhiteHat Grand Prix vừa qua, mình thấy có một bài liên quan đến Disassembling Pythong Byte Code nên mình viết một bài về ACM/Programming cho các bạn tham khảo để biết thêm về "Disassembling Python Byte Code". Task cụ thể trong Grandprix đó là "Pyc" và writeup cho bai này cũng được một số team explain, mình xin dẫn link một write up mà mình tìm được:

    https://bl4ckbull3t.blogspot.com/2017/12/writeup-pyc-sau-khi-nhan-uoc-file-minh.html

    Okey, vậy Disassembling Python Byte Code là gì ?
    Bạn muốn biết chi tiết những gì mã của bạn đang làm? Bằng cách phân tích nó vào mã byte cấp thấp được sử dụng bởi thông dịch viên.
    Module "dis" được sử dụng để xuất ra bất kì một hàm nào của Python. Ví dụ:

    upload_2017-12-27_16-36-42.png
    upload_2017-12-27_16-37-29.png

    "dis" module thực sự hữu ích nếu bạn muốn nghiên cứu điều gì thực sự đang diễn ra khi chương trình của bạn thực thi ở level rất thấp.(Ví dụ: bạn đang muốn tìm hiểu về hiệu suất hoạt động của chương trình).
    Mã byte được giải thích bởi hàm "dis()" có sẵn trên các hàm như sau:

    upload_2017-12-27_16-42-27.png

    Nếu muốn giải thích được đoạn code này cho chính bạn, bạn cần sử dụng một số hằng số được định nghĩa trong module "opcode". Ví dụ:

    upload_2017-12-27_16-46-31.png

    Có một điều đáng buồn là module này không hề có chức năng để biễu diễn bytecode theo cách trông giống như là programming. Tuy nhiên chức năng "generator" sẽ lấy chuỗi mã bytecode và biến nó thành opcodes và các đối số.

    upload_2017-12-27_17-2-17.png
    upload_2017-12-27_17-2-58.png

    Và output

    upload_2017-12-27_17-3-58.png

    Trên đây là một ví dụ thực tế về bytecode Python :D. Hy vọng các bạn có thể hiểu rõ hơn về thể loại này một chút, sau này gặp các bài như này cũng không bỡ ngỡ. Ứng dụng của Bytecode mình sẽ viết thêm một bài khác.
     
    Lưu ý từ WhiteHat: Kiến thức an ninh mạng để phòng chống, không làm điều xấu. Luật pháp liên quan
    NgMSon, VladimirTrinh95 and Sugi_b3o like this.