Trinity Obfuscator
  • Welcome to Trinity Info Desk
  • FAQ
    • File won't work after obfuscation
    • File detected as virus
    • My personal data
    • My file didn't come through
  • Protections
    • Code Protection
      • Control Flow
        • Dynamic Control Flow
        • Duplicate Control Flow
      • Constants
        • Mutate Constants
        • Constants Melt
        • Expression Constants
        • Math Protection
      • Junk Dump
      • Invalid Metadata
      • Module Flood
    • Name Protections
      • Name Protection
      • Reference Proxy
      • Locals to Fields
      • Decompiler Crash
      • Type Scrambler
    • Code Convertion
      • Virtualization
      • Call to Calli Conversion
    • Anti Protections
      • Force Elevation
      • Anti VM
      • Anti DnSpy
      • Anti Debug
      • Anti Dump
      • Anti Tamper
      • Anti De4dot
      • Process Monitor
      • Integrity Check
    • Free Protections
      • Executable Packer
      • String Encryptor
Powered by GitBook
On this page

Was this helpful?

  1. Protections
  2. Code Convertion

Virtualization

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

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

Before Virtualization
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;
	}
}
After Virtualization
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;
	}
}
PreviousCode ConvertionNextCall to Calli Conversion

Last updated 6 years ago

Was this helpful?