Пример #1
0
        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);
        }
Пример #2
0
        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);
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
        }
Пример #5
0
        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());
        }
Пример #6
0
        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);
        }
Пример #7
0
        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');
        }
Пример #8
0
        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);
        }
Пример #9
0
        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);
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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]);
        }
Пример #13
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);
            }
        }
Пример #14
0
        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());
        }
Пример #15
0
        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);
        }
Пример #16
0
        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);
        }
Пример #17
0
        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);
        }
Пример #19
0
        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());
        }
Пример #20
0
        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);
        }
Пример #21
0
        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);
        }
Пример #22
0
        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);
        }
Пример #24
0
        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);
        }
Пример #25
0
        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"));
        }
Пример #26
0
        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);
        }
Пример #27
0
        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);
        }
Пример #28
0
        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);
        }
Пример #29
0
        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
        }
Пример #30
0
        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);
        }