Exemplo n.º 1
0
        public FileMutatedBKG(BasylKeyGenerator keyGen, Stream stream)
        {
            this.generator = keyGen;
            this.cipher    = new BESCipher(keyGen);


            byte[] extra  = new byte[100];
            byte[] extra2 = new byte[64];

            int amount = 65536;

            while (amount != 0)
            {
                byte[] buffer = new byte[amount];
                while (stream.Position + amount < stream.Length)
                {
                    stream.Read(buffer, 0, amount);
                    cipher.EncryptRight(ref buffer);
                    cipher.EncryptLeft(ref extra);
                    cipher.EncryptRight(ref extra2);
                }
                cipher.EncryptLeft(ref extra2);
                cipher.Shuffle(2);
                amount /= 2;
            }

            prg = new PseudoRandomGenerator(256 * 256, "MutatedBKG", 500);
            prg.ExpandKey(1);
            prg.SetSeedKey(extra);
            prg.SetSHA(extra2);
            prg.Recycle();


            stream.Close();
        }
Exemplo n.º 2
0
        private string GenerateRandomFunction(string keyPhrase)
        {
            BasylKeyGenerator generator = new BasylKeyGenerator(keyPhrase, BasylKeyGenerator.INITIAL / 4, BasylKeyGenerator.ROUNDS, BasylKeyGenerator.LEFTOFF, BasylKeyGenerator.EXPANSION / 20, BasylKeyGenerator.ADDITIONALKEY, new byte[32], new byte[4], new byte[4], true, new StrongerBasylPseudoAdaptor());

            List <String> variables = new List <string>();
            List <String> operators = new List <string>();

            variables.Add("seed");
            variables.Add("pos");

            operators.AddRange("+,*,%,^,|,&,+,*,*,+".Split(','));

            bool   operMode = false;
            String res      = "pos * seed + pos + ";

            while ((generator.GetRandomByte() % 29) != (generator.GetRandomByte() % 29) || !operMode)
            {
                if (operMode)
                {
                    res += operators[generator.GetRandomByte() % operators.Count] + " ";


                    operMode = false;
                }
                else
                {
                    if (generator.GetRandomByte() % 8 == 0)
                    {
                        //literal
                        res += (Math.Abs(BitConverter.ToInt32(new byte[] { generator.GetRandomByte(), generator.GetRandomByte(), generator.GetRandomByte(), generator.GetRandomByte() }, 0)) % 256 * 256 * 12 + " ");
                    }
                    else
                    {
                        //variable
                        res += variables[generator.GetRandomByte() % variables.Count] + " ";
                    }



                    operMode = true;
                }
            }
            return(res);
        }
        private string GenerateRandomFunction(string keyPhrase)
        {
            BasylKeyGenerator generator = new BasylKeyGenerator(keyPhrase, BasylKeyGenerator.INITIAL / 4, BasylKeyGenerator.ROUNDS, BasylKeyGenerator.LEFTOFF, BasylKeyGenerator.EXPANSION / 20, BasylKeyGenerator.ADDITIONALKEY, new byte[32], new byte[4], new byte[4], true, new StrongerBasylPseudoAdaptor());

            List<String> variables = new List<string>();
            List<String> operators = new List<string>();

            variables.Add("seed");
            variables.Add("pos");

            operators.AddRange("+,*,%,^,|,&,+,*,*,+".Split(','));

            bool operMode = false;
            String res = "pos * seed + pos + ";
            while ((generator.GetRandomByte() % 29) != (generator.GetRandomByte() % 29) || !operMode)
            {

                if (operMode)
                {

                    res += operators[generator.GetRandomByte() % operators.Count] + " ";

                    operMode = false;
                }
                else
                {
                    if (generator.GetRandomByte() % 8 == 0)
                    {
                        //literal
                        res += (Math.Abs(BitConverter.ToInt32(new byte[] { generator.GetRandomByte(), generator.GetRandomByte(), generator.GetRandomByte(), generator.GetRandomByte() }, 0)) % 256 * 256 * 12 + " ");
                    }
                    else
                    {
                        //variable
                        res += variables[generator.GetRandomByte() % variables.Count] + " ";
                    }

                    operMode = true;
                }

            }
            return res;
        }