Scapy và ASN.1

Scapy cung cấp một cách dễ dàng mã hóa hoặc giải mã ASN.1 và cũng chương trình những bộ mã hóa / giải mã. Nó là khá nhiều lỏng lẻo hơn so với những gì một cú pháp ASN.1 phải được, và nó loại bỏ qua những hạn chế. Nó sẽ không thay thế không phải một cú pháp ASN.1 cũng không phải là trình biên dịch ASN.1. Trên thực tế, nó đã được viết để có thể mã hóa và giải mã ASN.1 bị hỏng. Nó có thể xử lý hỏng chuỗi mã hóa và cũng có thể tạo ra những người.
ASN.1 engine
Lưu ý: rất nhiều các định nghĩa lớp trình bày ở đây sử dụng metaclasses. Nếu bạn không nhìn chính xác vào mã nguồn và bạn chỉ dựa vào ảnh chụp của tôi, bạn có thể nghĩ rằng đôi khi chúng thể hiện một loại vi diệu. `` Scapy cơ ASN.1 cung cấp các lớp học để liên kết các đối tượng và các thẻ của họ. Họ kế thừa từ các ASN1_Class. Người đầu tiên là ASN1_Class_UNIVERSAL, trong đó cung cấp thẻ cho hầu hết các đối tượng Universal. Mỗi bối cảnh mới (SNMP, X509) sẽ kế thừa từ nó và thêm các đối tượng riêng của mình.

class ASN1_Class_UNIVERSAL(ASN1_Class):
    name = "UNIVERSAL"
# [...]
    BOOLEAN = 1
    INTEGER = 2
    BIT_STRING = 3
# [...]

class ASN1_Class_SNMP(ASN1_Class_UNIVERSAL):
    name="SNMP"
    PDU_GET = 0xa0
    PDU_NEXT = 0xa1
    PDU_RESPONSE = 0xa2

class ASN1_Class_X509(ASN1_Class_UNIVERSAL):
    name="X509"
    CONT0 = 0xa0
    CONT1 = 0xa1
# [...]

Tất cả các đối tượng ASN.1 được đại diện bởi các trường hợp Python đơn giản mà hành động như nutshells cho các giá trị nguyên. Logic đơn giản là xử lý bởi ASN1_Object mà họ thừa hưởng từ. Do đó họ là khá đơn giản:

class ASN1_INTEGER(ASN1_Object):
    tag = ASN1_Class_UNIVERSAL.INTEGER

class ASN1_STRING(ASN1_Object):
    tag = ASN1_Class_UNIVERSAL.STRING

class ASN1_BIT_STRING(ASN1_STRING):
    tag = ASN1_Class_UNIVERSAL.BIT_STRING

Những trường hợp có thể được lắp ráp để tạo ra một cây ASN.1:

>>> x=ASN1_SEQUENCE([ASN1_INTEGER(7),ASN1_STRING("egg"),ASN1_SEQUENCE([ASN1_BOOLEAN(False)])])
>>> x
<ASN1_SEQUENCE[[<ASN1_INTEGER[7]>, <ASN1_STRING['egg']>, <ASN1_SEQUENCE[[<ASN1_BOOLEAN[False]>]]>]]>
>>> x.show()
# ASN1_SEQUENCE:
  <ASN1_INTEGER[7]>
  <ASN1_STRING['egg']>
  # ASN1_SEQUENCE:
    <ASN1_BOOLEAN[False]>


Comments

Popular posts from this blog

Thiết lập card không dây trên Kali Linux

Monitor mode

Giới thiệu - Scapy