# Virtualization

This protection fully virtualizes your code by using OpCodes. You code is fully sealed and can't be viewed in a decompiler.

{% hint style="warning" %}
This protection may have a very big performance impact on your program. This protection was created by Ki and you can find out more about his software here: [https://ki-host.appspot.com/KoiVM](https://ki-host.appspot.com/KoiVM)
{% endhint %}

{% code title="Before Virtualization" %}
```csharp
using System;
using System.ComponentModel;
using System.Drawing;
using System.Windows.Forms;

namespace Cunmyy
{
	// Token: 0x02000002 RID: 2
	public class Form1 : Form
	{
		// Token: 0x06000001 RID: 1 RVA: 0x00002050 File Offset: 0x00000250
		public Form1()
		{
			this.InitializeComponent();
		}

		// Token: 0x06000002 RID: 2 RVA: 0x00002073 File Offset: 0x00000273
		private void button1_Click(object sender, EventArgs e)
		{
			MessageBox.Show(this.lol);
		}

		// Token: 0x06000003 RID: 3 RVA: 0x00002084 File Offset: 0x00000284
		protected override void Dispose(bool disposing)
		{
			bool flag = disposing && this.components != null;
			if (flag)
			{
				this.components.Dispose();
			}
			base.Dispose(disposing);
		}

		// Token: 0x06000004 RID: 4 RVA: 0x000020BC File Offset: 0x000002BC
		private void InitializeComponent()
		{
			this.button1 = new Button();
			base.SuspendLayout();
			this.button1.Location = new Point(284, 190);
			this.button1.Name = "button1";
			this.button1.Size = new Size(206, 73);
			this.button1.TabIndex = 0;
			this.button1.Text = "button1";
			this.button1.UseVisualStyleBackColor = true;
			this.button1.Click += this.button1_Click;
			base.AutoScaleDimensions = new SizeF(8f, 16f);
			base.AutoScaleMode = AutoScaleMode.Font;
			base.ClientSize = new Size(800, 450);
			base.Controls.Add(this.button1);
			base.Name = "Form1";
			this.Text = "Form1";
			base.ResumeLayout(false);
		}

		// Token: 0x04000001 RID: 1
		public string lol = "Hi";

		// Token: 0x04000002 RID: 2
		private IContainer components = null;

		// Token: 0x04000003 RID: 3
		private Button button1;
	}
}

```
{% endcode %}

{% code title="After Virtualization" %}
```csharp
using System;
using System.ComponentModel;
using System.Windows.Forms;
using KoiVM.Runtime;

namespace Cunmyy
{
	// Token: 0x02000003 RID: 3
	public class Form1 : Form
	{
		// Token: 0x06000003 RID: 3 RVA: 0x0000206B File Offset: 0x0000026B
		public Form1()
		{
			Virtualization.Run(typeof(Form1).TypeHandle, 3u, new object[]
			{
				this
			});
		}

		// Token: 0x06000004 RID: 4 RVA: 0x00002083 File Offset: 0x00000283
		protected override void Dispose(bool disposing)
		{
			Virtualization.Run(typeof(Form1).TypeHandle, 4u, new object[]
			{
				this,
				disposing
			});
		}

		// Token: 0x04000001 RID: 1
		public string lol;

		// Token: 0x04000002 RID: 2
		private IContainer components;

		// Token: 0x04000003 RID: 3
		private Button button1;
	}
}

```
{% endcode %}
