Home

Awesome

python-dotnet-binaryformat

Pure Python parser for data encoded by .NET's BinaryFormatter

Structures implemented using the documentation available from Microsoft here. Not all of these structures are implemented - just what I've seen in real-life so far. Please open issues against this repo if you encounter NotImplementedError and can provide a sample buffer.

scripts

extract_pe.py

Searches for embedded byte arrays that begin with MZ and write them to a file named after their MD5 hash.

Example::

λ python scripts/extract_pe.py tests/data/dntojscript.bin -v
INFO:__main__:record 32: found array
INFO:__main__:record 32: found byte array
INFO:__main__:record 32: found PE byte array
INFO:__main__:writing PE to cd040cc16144ff4a91b333f3f0cb06ca.bin

show_structure.py

Parse the serialized data and show its structure in a tree-like format.

Example::

λ python scripts/show_structure.py tests/data/dntojscript.bin -v
00000000 (6418) SerializedData: SerializedData
00000000 (17)   0: SerializationHeaderRecord
00000000 (01)     RecordTypeEnum: SerializedStreamHeader (0x00000000)
00000001 (04)     RootId: 0x00000001 (1)
00000005 (04)     HeaderId: 0xffffffff (4294967295)
00000009 (04)     MajorVersion: 0x00000001 (1)
0000000d (04)     MinorVersion: 0x00000000 (0)
00000011 (204)   1: SystemClassWithMembersAndTypes
00000011 (01)     RecordTypeEnum: SystemClassWithMembersAndTypes (0x00000004)
00000012 (68)     ClassInfo: ClassInfo
00000012 (04)       ObjectId: 0x00000001 (1)
00000016 (35)       Name: LengthPrefixedString: System.DelegateSerializationHolder
00000039 (04)       MemberCount: 0x00000003 (3)
0000003d (25)       MemberNames: VArray
0000003d (09)         0: LengthPrefixedString: Delegate
00000046 (08)         1: LengthPrefixedString: target0
0000004e (08)         2: LengthPrefixedString: method0
00000056 (135)     MemberTypeInfo: MemberTypeInfo
00000056 (03)       BinaryTypeEnums: VArray
00000056 (01)         0: SystemClass (0x00000003)
00000057 (01)         1: SystemClass (0x00000003)
00000058 (01)         2: SystemClass (0x00000003)
00000059 (132)       AdditionalInfos: VArray
00000059 (49)         0: LengthPrefixedString: System.DelegateSerializationHolder+DelegateEntry
0000008a (35)         1: LengthPrefixedString: System.DelegateSerializationHolder
000000ad (48)         2: LengthPrefixedString: System.Reflection.MemberInfoSerializationHolder
000000dd (05)   2: MemberReference
000000dd (01)     RecordTypeEnum: MemberReference (0x00000009)
000000de (04)     IdRef: 0x00000002 (2)
000000e2 (05)   3: MemberReference
000000e2 (01)     RecordTypeEnum: MemberReference (0x00000009)
000000e3 (04)     IdRef: 0x00000003 (3)
000000e7 (05)   4: MemberReference
000000e7 (01)     RecordTypeEnum: MemberReference (0x00000009)
000000e8 (04)     IdRef: 0x00000004 (4)
000000ec (194)   5: SystemClassWithMembersAndTypes
000000ec (01)     RecordTypeEnum: SystemClassWithMembersAndTypes (0x00000004)
000000ed (137)     ClassInfo: ClassInfo
000000ed (04)       ObjectId: 0x00000002 (2)
000000f1 (49)       Name: LengthPrefixedString: System.DelegateSerializationHolder+DelegateEntry
00000122 (04)       MemberCount: 0x00000007 (7)
00000126 (80)       MemberNames: VArray
00000126 (05)         0: LengthPrefixedString: type
0000012b (09)         1: LengthPrefixedString: assembly
00000134 (07)         2: LengthPrefixedString: target
0000013b (19)         3: LengthPrefixedString: targetTypeAssembly
0000014e (15)         4: LengthPrefixedString: targetTypeName
0000015d (11)         5: LengthPrefixedString: methodName
00000168 (14)         6: LengthPrefixedString: delegateEntry
00000176 (56)     MemberTypeInfo: MemberTypeInfo
00000176 (07)       BinaryTypeEnums: VArray
00000176 (01)         0: String (0x00000001)
00000177 (01)         1: String (0x00000001)
00000178 (01)         2: Object (0x00000002)
00000179 (01)         3: String (0x00000001)
0000017a (01)         4: String (0x00000001)
0000017b (01)         5: String (0x00000001)
0000017c (01)         6: SystemClass (0x00000003)
0000017d (49)       AdditionalInfos: VArray
0000017d (49)         0: LengthPrefixedString: System.DelegateSerializationHolder+DelegateEntry
000001ae (53)   6: BinaryObjectString
000001ae (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
000001af (04)     ObjectId: 0x00000005 (5)
000001b3 (48)     Value: LengthPrefixedString: System.Runtime.Remoting.Messaging.HeaderHandler
000001e3 (81)   7: BinaryObjectString
000001e3 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
000001e4 (04)     ObjectId: 0x00000006 (6)
000001e8 (76)     Value: LengthPrefixedString: mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
00000234 (13)   8: BinaryObjectString
00000234 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
00000235 (04)     ObjectId: 0x00000007 (7)
00000239 (08)     Value: LengthPrefixedString: target0
00000241 (05)   9: MemberReference
00000241 (01)     RecordTypeEnum: MemberReference (0x00000009)
00000242 (04)     IdRef: 0x00000006 (6)
00000246 (21)   10: BinaryObjectString
00000246 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
00000247 (04)     ObjectId: 0x00000009 (9)
0000024b (16)     Value: LengthPrefixedString: System.Delegate
0000025b (19)   11: BinaryObjectString
0000025b (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
0000025c (04)     ObjectId: 0x0000000a (10)
00000260 (14)     Value: LengthPrefixedString: DynamicInvoke
0000026e (01)   12: ObjectNull
0000026e (01)     RecordTypeEnum: ObjectNull (0x0000000a)
0000026f (170)   13: SystemClassWithMembersAndTypes
0000026f (01)     RecordTypeEnum: SystemClassWithMembersAndTypes (0x00000004)
00000270 (68)     ClassInfo: ClassInfo
00000270 (04)       ObjectId: 0x00000003 (3)
00000274 (35)       Name: LengthPrefixedString: System.DelegateSerializationHolder
00000297 (04)       MemberCount: 0x00000003 (3)
0000029b (25)       MemberNames: VArray
0000029b (09)         0: LengthPrefixedString: Delegate
000002a4 (08)         1: LengthPrefixedString: target0
000002ac (08)         2: LengthPrefixedString: method0
000002b4 (101)     MemberTypeInfo: MemberTypeInfo
000002b4 (03)       BinaryTypeEnums: VArray
000002b4 (01)         0: SystemClass (0x00000003)
000002b5 (01)         1: PrimitiveArray (0x00000007)
000002b6 (01)         2: SystemClass (0x00000003)
000002b7 (98)       AdditionalInfos: VArray
000002b7 (49)         0: LengthPrefixedString: System.DelegateSerializationHolder+DelegateEntry
000002e8 (01)         1: Byte (0x00000002)
000002e9 (48)         2: LengthPrefixedString: System.Reflection.MemberInfoSerializationHolder
00000319 (05)   14: MemberReference
00000319 (01)     RecordTypeEnum: MemberReference (0x00000009)
0000031a (04)     IdRef: 0x0000000b (11)
0000031e (05)   15: MemberReference
0000031e (01)     RecordTypeEnum: MemberReference (0x00000009)
0000031f (04)     IdRef: 0x0000000c (12)
00000323 (05)   16: MemberReference
00000323 (01)     RecordTypeEnum: MemberReference (0x00000009)
00000324 (04)     IdRef: 0x0000000d (13)
00000328 (144)   17: SystemClassWithMembersAndTypes
00000328 (01)     RecordTypeEnum: SystemClassWithMembersAndTypes (0x00000004)
00000329 (122)     ClassInfo: ClassInfo
00000329 (04)       ObjectId: 0x00000004 (4)
0000032d (48)       Name: LengthPrefixedString: System.Reflection.MemberInfoSerializationHolder
0000035d (04)       MemberCount: 0x00000006 (6)
00000361 (66)       MemberNames: VArray
00000361 (05)         0: LengthPrefixedString: Name
00000366 (13)         1: LengthPrefixedString: AssemblyName
00000373 (10)         2: LengthPrefixedString: ClassName
0000037d (10)         3: LengthPrefixedString: Signature
00000387 (11)         4: LengthPrefixedString: MemberType
00000392 (17)         5: LengthPrefixedString: GenericArguments
000003a3 (21)     MemberTypeInfo: MemberTypeInfo
000003a3 (06)       BinaryTypeEnums: VArray
000003a3 (01)         0: String (0x00000001)
000003a4 (01)         1: String (0x00000001)
000003a5 (01)         2: String (0x00000001)
000003a6 (01)         3: String (0x00000001)
000003a7 (01)         4: Primitive (0x00000000)
000003a8 (01)         5: SystemClass (0x00000003)
000003a9 (15)       AdditionalInfos: VArray
000003a9 (01)         0: Int32 (0x00000008)
000003aa (14)         1: LengthPrefixedString: System.Type[]
000003b8 (05)   18: MemberReference
000003b8 (01)     RecordTypeEnum: MemberReference (0x00000009)
000003b9 (04)     IdRef: 0x0000000a (10)
000003bd (05)   19: MemberReference
000003bd (01)     RecordTypeEnum: MemberReference (0x00000009)
000003be (04)     IdRef: 0x00000006 (6)
000003c2 (05)   20: MemberReference
000003c2 (01)     RecordTypeEnum: MemberReference (0x00000009)
000003c3 (04)     IdRef: 0x00000009 (9)
000003c7 (50)   21: BinaryObjectString
000003c7 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
000003c8 (04)     ObjectId: 0x00000011 (17)
000003cc (45)     Value: LengthPrefixedString: System.Object DynamicInvoke(System.Object[])
000003f9 (04)   22: MemberPrimitiveTyped
000003f9 (01)     RecordTypeEnum: MemberPrimitiveTyped (0x00000008)
000003fa (01)     PrimitiveTypeEnum: 0 (0x00000000)
000003fb (02)     Value: 0x00000000 (0)
000003fd (00)     _eof: 
000003fd (01)   23: ObjectNull
000003fd (01)     RecordTypeEnum: ObjectNull (0x0000000a)
000003fe (09)   24: ClassWithId
000003fe (01)     RecordTypeEnum: ClassWithId (0x00000001)
000003ff (04)     ObjectId: 0x0000000b (11)
00000403 (04)     MetadataId: 0x00000002 (2)
00000407 (38)   25: BinaryObjectString
00000407 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
00000408 (04)     ObjectId: 0x00000012 (18)
0000040c (33)     Value: LengthPrefixedString: System.Xml.Schema.XmlValueGetter
0000042d (83)   26: BinaryObjectString
0000042d (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
0000042e (04)     ObjectId: 0x00000013 (19)
00000432 (78)     Value: LengthPrefixedString: System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
00000480 (13)   27: BinaryObjectString
00000480 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
00000481 (04)     ObjectId: 0x00000014 (20)
00000485 (08)     Value: LengthPrefixedString: target0
0000048d (05)   28: MemberReference
0000048d (01)     RecordTypeEnum: MemberReference (0x00000009)
0000048e (04)     IdRef: 0x00000006 (6)
00000492 (32)   29: BinaryObjectString
00000492 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
00000493 (04)     ObjectId: 0x00000016 (22)
00000497 (27)     Value: LengthPrefixedString: System.Reflection.Assembly
000004b2 (10)   30: BinaryObjectString
000004b2 (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
000004b3 (04)     ObjectId: 0x00000017 (23)
000004b7 (05)     Value: LengthPrefixedString: Load
000004bc (01)   31: ObjectNull
000004bc (01)     RecordTypeEnum: ObjectNull (0x0000000a)
000004bd (5130)   32: ArraySinglePrimitive
000004bd (01)     RecordTypeEnum: ArraySinglePrimitive (0x0000000f)
000004be (08)     ArrayInfo: ArrayInfo
000004be (04)       ObjectId: 0x0000000c (12)
000004c2 (04)       Length: 0x00001400 (5120)
000004c6 (01)     PrimitiveTypeEnum: Byte (0x00000002)
000004c7 (5120)     Value: 4d5a90000300000004000000ffff0000b80000000000000040...
000018c7 (00)     _eof: 
000018c7 (09)   33: ClassWithId
000018c7 (01)     RecordTypeEnum: ClassWithId (0x00000001)
000018c8 (04)     ObjectId: 0x0000000d (13)
000018cc (04)     MetadataId: 0x00000004 (4)
000018d0 (05)   34: MemberReference
000018d0 (01)     RecordTypeEnum: MemberReference (0x00000009)
000018d1 (04)     IdRef: 0x00000017 (23)
000018d5 (05)   35: MemberReference
000018d5 (01)     RecordTypeEnum: MemberReference (0x00000009)
000018d6 (04)     IdRef: 0x00000006 (6)
000018da (05)   36: MemberReference
000018da (01)     RecordTypeEnum: MemberReference (0x00000009)
000018db (04)     IdRef: 0x00000016 (22)
000018df (45)   37: BinaryObjectString
000018df (01)     RecordTypeEnum: BinaryObjectString (0x00000006)
000018e0 (04)     ObjectId: 0x0000001a (26)
000018e4 (40)     Value: LengthPrefixedString: System.Reflection.Assembly Load(Byte[])
0000190c (04)   38: MemberPrimitiveTyped
0000190c (01)     RecordTypeEnum: MemberPrimitiveTyped (0x00000008)
0000190d (01)     PrimitiveTypeEnum: 0 (0x00000000)
0000190e (02)     Value: 0x00000000 (0)
00001910 (00)     _eof: 
00001910 (01)   39: ObjectNull
00001910 (01)     RecordTypeEnum: ObjectNull (0x0000000a)
00001911 (01)   40: MessageEnd
00001911 (01)     RecordTypeEnum: MessageEnd (0x0000000b)