We're given a Windows/Linux Unity maze game and we can extract the relevant source code by decompiling `/CTF_DATA/Managed/Assembly-CSharp.dll`. We used we used JetBrain's [dotPeek](https://www.jetbrains.com/decompiler/) to decompile the dll file. We find 3 relevant files:
GameManager.cs 
	public class GameManager : MonoBehaviour	{		private bool isCollidingBox1;		private bool isCollidingBox2;		private bool isCollidingBox3;		private bool isCollidingBox4;		private bool isCollidingBox5;		private bool isCollidingBox6;		[SerializeField]		private string Box1;		[SerializeField]		private string Box2;		[SerializeField]		private string Box3;		[SerializeField]		private string Box4;		[SerializeField]		private string Box5;		[SerializeField]		private string Box6;
		private void OnTriggerEnter(Collider other)		{			if (other.tag == "Box1")			{				if (this.isCollidingBox1)					return;				this.isCollidingBox1 = true;				UiManager.current.UpdateTexte(this.Box1);				Object.Destroy((Object) other.gameObject);			}			if (other.tag == "Box2")			{				if (this.isCollidingBox2)		  			return;				this.isCollidingBox2 = true;				UiManager.current.UpdateTexte(this.Box2);				Object.Destroy((Object) other.gameObject);			}			if (other.tag == "Box3")			{				if (this.isCollidingBox3)				  	return;				this.isCollidingBox3 = true;				UiManager.current.UpdateTexte(this.Box3);				Object.Destroy((Object) other.gameObject);			}			if (other.tag == "Box4")			{				if (this.isCollidingBox4)					return;				this.isCollidingBox4 = true;				UiManager.current.UpdateTexte(this.Box4);				Object.Destroy((Object) other.gameObject);			}			if (other.tag == "Box5")			{				if (this.isCollidingBox5)					return;				this.isCollidingBox5 = true;				UiManager.current.UpdateTexte(this.Box5);				Object.Destroy((Object) other.gameObject);			}			if (!(other.tag == "Box6") || this.isCollidingBox6)				return;			this.isCollidingBox6 = true;			UiManager.current.UpdateTexte(this.Box6);			Object.Destroy((Object) other.gameObject);		}	}
UiManager.cs.
	public class UiManager : MonoBehaviour	{	[SerializeField]	private Text textHolder;	private string cText;	private int counter;
		public void UpdateTexte(string textToAdd)		{			++this.counter;			this.textHolder.text += textToAdd;			if (this.counter != 6)				return;			this.cText = Encrypt.current.DecryptString(this.textHolder.text);			this.textHolder.text = this.cText;		}	}
Encrypt.cs
	public class Encrypt : MonoBehaviour	{		[SerializeField]		private string cipherText;
		public string DecryptString(string key)		{			byte[] buffer = Convert.FromBase64String(this.cipherText);			using (Aes aes = Aes.Create())			{				Rfc2898DeriveBytes rfc2898DeriveBytes = new Rfc2898DeriveBytes(key, new byte[13]				{					(byte) 73,					(byte) 118,					(byte) 97,					(byte) 110,					(byte) 32,					(byte) 77,					(byte) 101,					(byte) 100,					(byte) 118,					(byte) 101,					(byte) 100,					(byte) 101,					(byte) 118				});			((SymmetricAlgorithm) aes).Key = rfc2898DeriveBytes.GetBytes(32);			((SymmetricAlgorithm) aes).IV = rfc2898DeriveBytes.GetBytes(16);			try			{				using (MemoryStream memoryStream = new MemoryStream())				{					using (CryptoStream cryptoStream = new CryptoStream((Stream) memoryStream, ((SymmetricAlgorithm) aes).CreateDecryptor(), CryptoStreamMode.Write))				{				  	cryptoStream.Write(buffer, 0, buffer.Length);				  	cryptoStream.Close();				}					this.cipherText = Encoding.Unicode.GetString(memoryStream.ToArray());				}				return this.cipherText;			}			catch (Exception ex)			{			  return "wrong Order mate ";			}		}    }
We see that the program takes a permutation of the strings of box1 to box6 and attempts to decrypt it.
What we need now is to find what the values of strings are, specifically those with `[SerializeField]`.
We use a [Asset Bundle Extractor](https://github.com/DerPopo/UABE/releases) and import the level0 asset file in `/CTF_DATA` find files MonoBehaviour:CTF.Encrypt, MonoBehaviour:CTF.UiManager, MonoBehaviour:CTF.GameManager.
Viewing the raw data of those files, we find the values to each string
	cipherText="jR9MDCzkFQFzZtHjzszeYL1g6kG9+eXaATlf0wCGmnf62QJ9AjmemY0Ao3mFaubhEfVbXfeRrne/VAD59ESYrQ=="	textHolder.text="";	Box1="Tanit";    Box2="Astarté";    Box3="Amilcar";    Box4="Melqart";    Box5="Dido";    Box6="Hannibal";
We the brute force all possible permutations and the permutation `HannibalDidoMelqartAmilcarAstartéTanit` gets us the flag.
**Flag:** `3K-CTF-GamingIsNotACrime`
*Note: the flags for game1 and game2 seemed to be switch as this flag was accepted for game1*