public void ArrayOfRelationTest() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Number name=\"Length\" size=\"32\">"+ " <Relation type=\"size\" of=\"Data\" />"+ " </Number>"+ " <Blob name=\"Data\" value=\"Hello World\" minOccurs=\"100\"/>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Dom.Array array = dom.dataModels[0][1] as Dom.Array; Assert.NotNull(array); Assert.AreEqual(100, array.Count); Assert.AreEqual(1, array.relations.Count); Assert.AreEqual(0, array[0].relations.Count); }
public void TooMuchDataCrackingTest() { string xml = @" <Peach> <DataModel name='DM'> <String name='IP'> <Transformer class='Ipv6StringToOctet'/> </String> </DataModel> </Peach>" ; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0}", new byte[] { 0x3F, 0xFE, 0x19, 0x00, 0x45, 0x45, 0x00, 0x03, 0x02, 0x00, 0xF8, 0xFF, 0xFE, 0x21, 0x67, 0xCF, 0xFF, 0xFF }); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); }
public void TestNoValue() { string xml = "<Peach><DataModel name=\"DM\"><Number size=\"12\"/></DataModel></Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Number num = dom.dataModels[0][0] as Number; var defaultValue = num.DefaultValue; Assert.NotNull(defaultValue); Assert.AreEqual(0, (int)defaultValue); var final = num.Value; Assert.NotNull(final); Assert.AreEqual(12, final.LengthBits); Assert.AreEqual(1, final.Length); Assert.AreEqual(new byte[] { 0, 0 }, final.ToArray()); }
public void NumberValues() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Number name=\"TheNumber\" size=\"8\" signed='true'/>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Number num = dom.dataModels[0][0] as Number; Assert.AreEqual(0, (int)num.DefaultValue); num.DefaultValue = new Variant("100"); Assert.AreEqual(100, (int)num.DefaultValue); num.DefaultValue = new Variant(-10.0); Assert.AreEqual(-10, (int)num.DefaultValue); }
public void Utf8Test() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <String name=\"TheString\" type=\"utf8\" value=\"abc\"/>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Dom.String str = dom.dataModels[0][0] as Dom.String; Assert.AreNotEqual(null, str); Assert.AreEqual(Dom.StringType.utf8, str.stringType); Assert.AreEqual("abc", (string)str.DefaultValue); BitwiseStream value = str.Value; Assert.AreEqual(Encoding.UTF8.GetBytes("abc"), value.ToArray()); }
public void GeneratePadding3() { string xml = template.Fmt(2, "11 22"); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = dom.dataModels[0].Value; Assert.AreEqual(16, data.LengthBits); var block = dom.dataModels[0][0] as Block; var blob = block[0]; Assert.AreEqual(16, blob.Value.LengthBits); var padding = block[1]; Assert.AreEqual(0, padding.Value.LengthBits); }
public void StringDefaults() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <Defaults>"+ " <String lengthType=\"chars\" padCharacter=\"z\" nullTerminated=\"true\" type=\"utf8\"/>"+ " </Defaults>"+ " <DataModel name=\"TheDataModel\">"+ " <String name=\"TheNumber\"/>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Dom.String str = dom.dataModels[0][0] as Dom.String; Assert.IsTrue(str.nullTerminated); Assert.IsTrue(str.stringType == StringType.utf8); Assert.IsTrue(str.lengthType == LengthType.Chars); Assert.IsTrue(str.padCharacter == 'z'); }
public void ArrayNoNameTest() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Blob value=\"Hello World\" minOccurs=\"100\"/>"+ " </DataModel>"+ "</Peach>"; Resetter.Reset(); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Dom.Array array = dom.dataModels[0][0] as Dom.Array; Assert.NotNull(array); Assert.AreEqual(100, array.Count); Assert.AreEqual("TheDataModel.DataElement_0", array.fullName); Assert.AreEqual("TheDataModel.DataElement_0.DataElement_0", array[0].fullName); Assert.AreEqual("TheDataModel.DataElement_0.DataElement_0_1", array[1].fullName); }
public Dom.Dom SharedTokensAfterChoiceWithUnsizedElements(string value) { string xml = @"<?xml version='1.0' encoding='utf-8'?> <Peach> <DataModel name='r1'> <Blob name='FirstToken' value='31' valueType='hex' token='true' /> <Blob name='SecondToken' /> <String /> </DataModel> <DataModel name='r2' ref='r1'> <Blob name='SecondToken' value='32' valueType='hex' token='true'/> </DataModel> <DataModel name='r3' ref='r1'> <Blob name='SecondToken' value='33' valueType='hex' token='true'/> </DataModel> <DataModel name='r4'> <Choice minOccurs='0'> <Block ref='r2' /> </Choice> <Block ref='r3' /> </DataModel> </Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0}", value); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[3], data); return(dom); }
private void DoEndian(string endian, byte[] expected) { string template = @" <Peach> <DataModel name=""DM""> <Flags size=""16"" endian=""{0}""> <Flag position=""0"" size=""4"" valueType=""hex"" value=""0x0a""/> <Flag position=""4"" size=""4"" valueType=""hex"" value=""0x0b""/> <Flag position=""8"" size=""4"" valueType=""hex"" value=""0x0c""/> <Flag position=""12"" size=""4"" valueType=""hex"" value=""0x0d""/> </Flags> </DataModel> </Peach>"; string xml = string.Format(template, endian); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Assert.AreEqual(1, dom.dataModels.Count); Flags flags = dom.dataModels[0][0] as Flags; Assert.NotNull(flags); Assert.AreEqual(4, flags.Count); var value = dom.dataModels[0].Value; Assert.NotNull(value); Assert.AreEqual(2, value.LengthBytes); MemoryStream ms = value.Stream as MemoryStream; Assert.NotNull(ms); byte[] actual = new byte[expected.Length]; Buffer.BlockCopy(ms.GetBuffer(), 0, actual, 0, actual.Length); Assert.AreEqual(expected, actual); }
public void IncludeBadChildRelation() { string tmp = Path.GetTempFileName(); string xml1 = @" <Peach> <DataModel name='TLV'> <Number name='Type' size='8' endian='big'/> <Number name='Length' size='8'> <Relation type='size' of='Value'/> </Number> <Block name='Out'> <Block name='Value'/> </Block> </DataModel> </Peach>"; string xml2 = @" <Peach> <Include ns='ns' src='{0}'/> <DataModel name='DM'> <Block ref='ns:TLV' name='Type1'> <Number name='Type' size='8' endian='big' value='201'/> <Block name='Out'/> </Block> </DataModel> </Peach>".Fmt(tmp); File.WriteAllText(tmp, xml1); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml2))); var final = dom.dataModels[0].Value.Value; var expected = new byte[] { 201, 0 }; Assert.AreEqual(expected, final); }
public void PeachXPath() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + "<Peach>" + " <DataModel name=\"TheDataModel\">"+ " <Number name=\"TheNumber\" size=\"8\"/>"+ " </DataModel>"+ " <StateModel name=\"TheStateModel\" initialState=\"InitialState\">" + " <State name=\"InitialState\">" + " <Action name=\"Action1\" type=\"output\">" + " <DataModel ref=\"TheDataModel\"/>" + " </Action>" + " </State>" + " </StateModel>" + " <Test name=\"Default\">" + " <StateModel ref=\"TheStateModel\"/>" + " <Publisher class=\"Null\"/>" + " </Test>" + "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); PeachXPathNavigator nav = new PeachXPathNavigator(dom); XPathNodeIterator it = nav.Select("//TheNumber"); List <string> res = new List <string>(); while (it.MoveNext()) { var val = it.Current.Name; res.Add(val); } Assert.AreEqual(1, res.Count); Assert.AreEqual("TheNumber", res[0]); }
public void CrackTokenFlag() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Flags name=\"Flags1\" size=\"8\">"+ " <Flag name=\"Flag1\" size=\"1\" position=\"0\" value=\"1\" token=\"true\"/> "+ " </Flags>"+ " <String value=\"Foo Bar\" />"+ " </DataModel>"+ "</Peach>"; { // Positive test PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0}{1}", (byte)255, "Hello World"); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.AreEqual(1, (int)((Flags)dom.dataModels[0][0])[0].DefaultValue); Assert.AreEqual("Hello World", (string)dom.dataModels[0][1].DefaultValue); } { // Negative test PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0:L16}{1}", 0, "Hello World"); DataCracker cracker = new DataCracker(); TestDelegate myTestDelegate = () => cracker.CrackData(dom.dataModels[0], data); Assert.Throws <CrackingFailure>(myTestDelegate); Assert.AreEqual(1, (int)((Flags)dom.dataModels[0][0])[0].DefaultValue); Assert.AreEqual("Foo Bar", (string)dom.dataModels[0][1].DefaultValue); } }
public void MultipleFromRelations() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Number name=\"num\" size=\"8\">"+ " <Relation type=\"size\" of=\"Data1\" />"+ " <Relation type=\"size\" of=\"Data2\" />"+ " </Number>"+ " <Blob name=\"Data1\" />"+ " <Blob name=\"Data2\" />"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0:L8}{1}", 5, "HelloWorldMore"); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.AreEqual(3, dom.dataModels[0].Count); Number num = dom.dataModels[0][0] as Number; Variant val = num.InternalValue; Assert.AreEqual(5, (int)val); Blob blob1 = dom.dataModels[0][1] as Blob; Variant val2 = blob1.InternalValue; Assert.AreEqual("Hello", val2.BitsToString()); Blob blob2 = dom.dataModels[0][2] as Blob; Variant val3 = blob2.InternalValue; Assert.AreEqual("World", val3.BitsToString()); }
public void CrackBlock6() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Number size=\"8\">"+ " <Relation type=\"count\" of=\"b1\"/>"+ " </Number>"+ " <String name=\"unsized\"/>"+ " <Block name=\"b1\" minOccurs=\"1\">"+ " <String name=\"str1\" length=\"5\" />"+ " <String name=\"str2\" length=\"5\" />"+ " </Block>"+ " <Block name=\"b2\">"+ " <String name=\"str3\" length=\"1\"/>"+ " </Block>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); BitStream data = new BitStream(); data.LittleEndian(); data.WriteBytes(ASCIIEncoding.ASCII.GetBytes("\x02.....HelloWorldHelloWorld!")); data.SeekBits(0, SeekOrigin.Begin); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.AreEqual(".....", (string)dom.dataModels[0].find("unsized").DefaultValue); Assert.AreEqual("Hello", (string)dom.dataModels[0].find("b1.str1").DefaultValue); Assert.AreEqual("World", (string)dom.dataModels[0].find("b1.str2").DefaultValue); Assert.AreEqual("Hello", (string)dom.dataModels[0].find("b1_1.str1").DefaultValue); Assert.AreEqual("World", (string)dom.dataModels[0].find("b1_1.str2").DefaultValue); Assert.AreEqual("!", (string)dom.dataModels[0].find("str3").DefaultValue); }
public void ExcludeThenIncludeAll() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Blob />"+ " <Blob name=\"Blob2\" />"+ " <Blob />"+ " </DataModel>"+ " <StateModel name=\"TheStateModel\" initialState=\"TheState\">"+ " <State name=\"TheState\">"+ " <Action type=\"output\">"+ " <DataModel ref=\"TheDataModel\"/>"+ " </Action>"+ " </State>"+ " </StateModel>"+ " <Agent name=\"AgentWindows\"> " + " <Monitor class=\"WindowsDebugEngine\"> "+ " <Param name=\"CommandLine\" value=\"C:\\Peach3\\Release\\CrashableServer.exe 127.0.0.1 4244\" /> "+ " <Param name=\"WinDbgPath\" value=\"C:\\Program Files (x86)\\Debugging Tools for Windows (x86)\" /> "+ " </Monitor>"+ " </Agent>"+ " <Test name=\"Default\">"+ " <Agent ref=\"AgentWindows\" platform=\"windows\"/>"+ " <StateModel ref=\"TheStateModel\" />"+ " <Publisher class=\"File\">"+ " <Param name=\"FileName\" value=\"test.fuzzed.txt\" /> "+ " </Publisher>"+ " <Exclude/>"+ " <Include xpath=\"//Blob2\"/>"+ " </Test> "+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Assert.AreEqual(false, dom.tests[0].stateModel.states.Values.ElementAt(0).actions[0].dataModel[0].isMutable); Assert.AreEqual(true, dom.tests[0].stateModel.states.Values.ElementAt(0).actions[0].dataModel[1].isMutable); Assert.AreEqual(false, dom.tests[0].stateModel.states.Values.ElementAt(0).actions[0].dataModel[2].isMutable); }
public void TopDataElement() { string temp1 = Path.GetTempFileName(); File.WriteAllBytes(temp1, Encoding.ASCII.GetBytes("Hello World")); string xml = @"<Peach> <Data name='data' fileName='{0}'/> <DataModel name='TheDataModel'> <String name='str' value='Hello World!'/> </DataModel> <StateModel name='TheState' initialState='Initial'> <State name='Initial'> <Action type='output'> <DataModel ref='TheDataModel'/> <Data ref='data'/> </Action> </State> </StateModel> <Test name='Default'> <StateModel ref='TheState'/> <Publisher class='Null'/> </Test> </Peach>"; xml = string.Format(xml, temp1); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var ds = dom.stateModels[0].states["Initial"].actions[0].dataSet; Assert.NotNull(ds); Assert.AreEqual(1, ds.Datas.Count); Assert.AreEqual(temp1, ds.Datas[0].FileName); }
public void Test1() { // standard test of generating 5000 random values for each <Number> element string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + "<Peach>" + " <DataModel name=\"TheDataModel\">" + " <Number name=\"num1\" size=\"32\" signed=\"true\"/>" + " </DataModel>" + " <StateModel name=\"TheState\" initialState=\"Initial\">" + " <State name=\"Initial\">" + " <Action type=\"output\">" + " <DataModel ref=\"TheDataModel\"/>" + " </Action>" + " </State>" + " </StateModel>" + " <Test name=\"Default\">" + " <StateModel ref=\"TheState\"/>" + " <Publisher class=\"Null\"/>" + " <Strategy class=\"Sequential\"/>" + " </Test>" + "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); dom.tests[0].includedMutators = new List <string>(); dom.tests[0].includedMutators.Add("FiniteRandomNumbersMutator"); RunConfiguration config = new RunConfiguration(); Engine e = new Engine(null); e.startFuzzing(dom, config); // verify values Assert.AreEqual(5000, mutations.Count); }
public void CrackCountOf3() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Number size=\"8\" name=\"numbers\" minOccurs=\"5\" maxOccurs=\"5\"/>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0}", new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0xFF, 0xFF, 0xFF, 0xFF }); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.IsInstanceOf <Dom.Array>(dom.dataModels[0][0]); Assert.AreEqual(5, ((Dom.Array)dom.dataModels[0][0]).Count); Assert.AreEqual(new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05 }, dom.dataModels[0][0].InternalValue.BitsToArray()); }
public void TcpClient(bool serverShutdown) { ushort port = TestBase.MakePort(56000, 57000); SimpleTcpServer cli = new SimpleTcpServer(port, serverShutdown); cli.Start(); string xml = string.Format(template, "ClientState", "TcpClient", "Host", port); PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); Assert.AreEqual(2, actions.Count); var de1 = actions[0].dataModel.find("TheDataModel.str"); Assert.NotNull(de1); var de2 = actions[1].dataModel.find("TheDataModel2.str"); Assert.NotNull(de2); string send = (string)de2.DefaultValue; string recv = (string)de1.DefaultValue; Assert.AreEqual("Hello World", send); Assert.AreEqual("Test buffer", recv); Assert.NotNull(cli.Result); Assert.AreEqual("Hello World", cli.Result); }
public void CrackFlagsSecond() { string xml = @" <Peach> <DataModel name=""TheDataModel""> <Number size=""8""/> <Flags size=""8"" endian=""big""> <Flag position=""0"" size=""4""/> <Flag position=""4"" size=""4""/> </Flags> </DataModel> </Peach> "; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); BitStream data = new BitStream(); data.LittleEndian(); data.WriteBytes(new byte[] { 0x00, 0xff }); data.SeekBits(0, SeekOrigin.Begin); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.AreEqual(2, dom.dataModels[0].Count); var flags = dom.dataModels[0][1] as Flags; Assert.AreEqual(2, flags.Count); var flag1 = flags[0] as Flag; Assert.AreEqual(0xf, (int)flag1.DefaultValue); var flag2 = flags[1] as Flag; Assert.AreEqual(0xf, (int)flag2.DefaultValue); }
public void CrackString2() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <String length=\"5\" />"+ " <String />"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0}", "12345Hello World"); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.AreEqual("12345", (string)dom.dataModels[0][0].DefaultValue); Assert.AreEqual("Hello World", (string)dom.dataModels[0][1].DefaultValue); }
public void FailingOutputTest1() { string xml = @" <Peach> <DataModel name='output'> <String name='str'/> </DataModel> <StateModel name='SM' initialState='InitialState'> <State name='InitialState'> <Action type='output' publisher='Server'> <DataModel ref='output'/> </Action> </State> </StateModel> <Test name='Default'> <StateModel ref='SM'/> <Publisher class='TcpListener' name='Server'> <Param name='Interface' value='127.0.0.1'/> <Param name='Port' value='0'/> <Param name='Timeout' value='1000'/> </Publisher> </Test> </Peach>" ; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); }
public void CrackTokenNext() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <String type=\"utf8\"/>"+ " <String type=\"utf8\" value=\"\u00abX\" token=\"true\" />"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(Encoding.UTF8.GetBytes(xml))); var data = Bits.Fmt("{0:utf8}", "Hello World\u00abX"); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.AreEqual("Hello World", (string)dom.dataModels[0][0].DefaultValue); Assert.AreEqual("\u00abX", (string)dom.dataModels[0][1].DefaultValue); }
public void CrackNumericalOff() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <String value=\"100\"/>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(Encoding.UTF8.GetBytes(xml))); Assert.True(dom.dataModels[0][0].Hints.ContainsKey("NumericalString")); var data = Bits.Fmt("{0:utf8}", "Hello World"); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.False(dom.dataModels[0][0].Hints.ContainsKey("NumericalString")); }
public void CrackNullTermLengthToken() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <String value=\"Hello\" length=\"6\" nullTerminated=\"true\" token=\"true\" />"+ " <String value=\"World\"/>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); var data = Bits.Fmt("{0:utf8}", "Hello\0World"); DataCracker cracker = new DataCracker(); cracker.CrackData(dom.dataModels[0], data); Assert.AreEqual("Hello\0", (string)dom.dataModels[0][0].DefaultValue); Assert.AreEqual("World", (string)dom.dataModels[0][1].DefaultValue); }
public void WantBytes() { string xml = @" <Peach> <DataModel name='DM'> <Blob/> </DataModel> <StateModel name='SM' initialState='initial'> <State name='initial'> <Action type='input'> <DataModel ref='DM'/> </Action> </State> </StateModel> <Test name='Default'> <StateModel ref='SM'/> <Publisher class='Null'/> </Test> </Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); dom.tests[0].publishers[0] = new WantBytesPub("", new Dictionary <string, Variant>()); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); var value = dom.tests[0].stateModel.states["initial"].actions[0].dataModel.Value; Assert.AreEqual(8, value.Length); }
public void ArrayHintsTest() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel\">"+ " <Blob value=\"Hello World\" minOccurs=\"100\">"+ " <Hint name=\"Hello\" value=\"World\"/>"+ " </Blob>"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Dom.Array array = dom.dataModels[0][0] as Dom.Array; Assert.NotNull(array); Assert.AreEqual(100, array.Count); Assert.NotNull(array.Hints); Assert.AreEqual(1, array.Hints.Count); Assert.AreEqual("World", array.Hints["Hello"].Value); }
public void Test1() { // standard test string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + "<Peach>" + " <DataModel name=\"TheDataModel\">" + " <Number name=\"num1\" size=\"32\" signed=\"false\" endian=\"little\"/>" + " <Blob name=\"Data\" value=\"Hello\"/>" + " </DataModel>" + " <StateModel name=\"TheState\" initialState=\"Initial\">" + " <State name=\"Initial\">" + " <Action type=\"output\">" + " <DataModel ref=\"TheDataModel\"/>" + " </Action>" + " </State>" + " </StateModel>" + " <Test name=\"Default\">" + " <StateModel ref=\"TheState\"/>" + " <Publisher class=\"Null\"/>" + " </Test>" + "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); RunConfiguration config = new RunConfiguration(); config.singleIteration = true; Engine e = new Engine(null); e.startFuzzing(dom, config); // verify values }
public void BasicTest() { string xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n<Peach>\n" + " <DataModel name=\"TheDataModel1\">"+ " <String name=\"Str1\" />"+ " <String name=\"Str2\" />"+ " <String name=\"Str3\" />"+ " </DataModel>"+ " <DataModel name=\"TheDataModel2\" ref=\"TheDataModel1\">"+ " </DataModel>"+ "</Peach>"; PitParser parser = new PitParser(); Dom.Dom dom = parser.asParser(null, new MemoryStream(ASCIIEncoding.ASCII.GetBytes(xml))); Assert.AreEqual(3, dom.dataModels[0].Count); Assert.AreEqual(3, dom.dataModels[1].Count); Assert.AreEqual("Str1", dom.dataModels[1][0].name); Assert.AreEqual("Str2", dom.dataModels[1][1].name); Assert.AreEqual("Str3", dom.dataModels[1][2].name); }