diff options
author | jmpoep <OriginalEntryPoint@qq.com> | 2023-12-07 16:51:07 +0800 |
---|---|---|
committer | jmpoep <OriginalEntryPoint@qq.com> | 2023-12-07 16:51:07 +0800 |
commit | 28008a746a31abb7909dd86cb0cd413ac8943b0b (patch) | |
tree | a30b74b8cad548048c3c1551d652828ab76fa9bd /examples | |
download | vmprotect-3.5.1-master.tar vmprotect-3.5.1-master.tar.gz vmprotect-3.5.1-master.tar.bz2 vmprotect-3.5.1-master.zip |
Diffstat (limited to 'examples')
-rw-r--r-- | examples/dotnet/dotnet.sln | 128 | ||||
-rw-r--r-- | examples/dotnet/forms_cil/App.config | 6 | ||||
-rw-r--r-- | examples/dotnet/forms_cil/Form1.Designer.cs | 86 | ||||
-rw-r--r-- | examples/dotnet/forms_cil/Form1.cs | 33 | ||||
-rw-r--r-- | examples/dotnet/forms_cil/Form1.resx | 120 | ||||
-rw-r--r-- | examples/dotnet/forms_cil/Program.cs | 19 | ||||
-rw-r--r-- | examples/dotnet/forms_cil/Properties/AssemblyInfo.cs | 19 | ||||
-rw-r--r-- | examples/dotnet/forms_cil/forms_cil.csproj | 68 | ||||
-rw-r--r-- | examples/dotnet/forms_mixed/AssemblyInfo.cpp | 21 | ||||
-rw-r--r-- | examples/dotnet/forms_mixed/Form1.cpp | 95 | ||||
-rw-r--r-- | examples/dotnet/forms_mixed/forms_mixed.vcxproj | 90 | ||||
-rw-r--r-- | examples/scripts/Delphi Resources/Project1.exe.vmp | 31 | ||||
-rw-r--r-- | examples/scripts/Environment Variables/Project1.exe.vmp | 20 | ||||
-rw-r--r-- | examples/scripts/External DLL/Project1.exe.vmp | 26 | ||||
-rw-r--r-- | examples/scripts/Random Section Names/Project1.exe.vmp | 32 | ||||
-rw-r--r-- | examples/scripts/Script Events/Project1.exe.vmp | 26 |
16 files changed, 820 insertions, 0 deletions
diff --git a/examples/dotnet/dotnet.sln b/examples/dotnet/dotnet.sln new file mode 100644 index 0000000..98c68de --- /dev/null +++ b/examples/dotnet/dotnet.sln @@ -0,0 +1,128 @@ +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25123.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "forms_mixed", "forms_mixed\forms_mixed.vcxproj", "{ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAppLicensing", "..\licensing\Net\TestAppLicensing.csproj", "{401554DC-5C8F-4A81-908E-D3CB6EFDF861}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TestAppMarkers", "..\code markers\Net\TestAppMarkers.csproj", "{A4B06446-0E0E-468B-B07C-AA45583A031A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "KeyGen", "..\keygen\Net\KeyGen\KeyGen.csproj", "{BFC747EF-B590-469E-9534-E576B78E9499}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VMProtect.SDK", "..\..\sdk\VMProtect.SDK\VMProtect.SDK.csproj", "{946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "VMProtect.Runtime", "..\..\runtime\VMProtect.Runtime\VMProtect.Runtime.csproj", "{946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Examples", "Examples", "{35152C6E-EE24-4BE3-A022-FC83407183B9}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Todo", "Todo", "{627D2E95-D2A1-4AF5-8969-A12322DAAC00}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{35FF6948-F124-4361-8719-632162DFB865}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTestProject", "..\..\runtime\VMProtect.Runtime\Tests\UnitTestProject\UnitTestProject.csproj", "{85318BED-28D8-4B31-A7BA-9ED7882D11FC}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|Mixed Platforms = Debug|Mixed Platforms + Debug|Win32 = Debug|Win32 + Release|Any CPU = Release|Any CPU + Release|Mixed Platforms = Release|Mixed Platforms + Release|Win32 = Release|Win32 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Debug|Any CPU.ActiveCfg = Debug|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Debug|Mixed Platforms.ActiveCfg = Debug|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Debug|Mixed Platforms.Build.0 = Debug|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Debug|Win32.ActiveCfg = Debug|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Debug|Win32.Build.0 = Debug|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Release|Any CPU.ActiveCfg = Release|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Release|Mixed Platforms.ActiveCfg = Release|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Release|Mixed Platforms.Build.0 = Release|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Release|Win32.ActiveCfg = Release|Win32 + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}.Release|Win32.Build.0 = Release|Win32 + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Debug|Any CPU.Build.0 = Debug|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Debug|Win32.ActiveCfg = Debug|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Debug|Win32.Build.0 = Debug|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Release|Any CPU.ActiveCfg = Release|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Release|Any CPU.Build.0 = Release|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Release|Win32.ActiveCfg = Release|Any CPU + {401554DC-5C8F-4A81-908E-D3CB6EFDF861}.Release|Win32.Build.0 = Release|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Debug|Win32.ActiveCfg = Debug|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Debug|Win32.Build.0 = Debug|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Release|Any CPU.Build.0 = Release|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Release|Win32.ActiveCfg = Release|Any CPU + {A4B06446-0E0E-468B-B07C-AA45583A031A}.Release|Win32.Build.0 = Release|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Debug|Any CPU.Build.0 = Debug|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Debug|Win32.ActiveCfg = Debug|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Debug|Win32.Build.0 = Debug|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Release|Any CPU.ActiveCfg = Release|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Release|Any CPU.Build.0 = Release|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Release|Win32.ActiveCfg = Release|Any CPU + {BFC747EF-B590-469E-9534-E576B78E9499}.Release|Win32.Build.0 = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Debug|Win32.ActiveCfg = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Debug|Win32.Build.0 = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Release|Any CPU.Build.0 = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Release|Win32.ActiveCfg = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B5}.Release|Win32.Build.0 = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Debug|Win32.ActiveCfg = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Debug|Win32.Build.0 = Debug|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Release|Any CPU.Build.0 = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Release|Win32.ActiveCfg = Release|Any CPU + {946D07D4-1AE4-4FC3-9A8C-563B5F64B0B6}.Release|Win32.Build.0 = Release|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Debug|Mixed Platforms.ActiveCfg = Debug|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Debug|Mixed Platforms.Build.0 = Debug|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Debug|Win32.ActiveCfg = Debug|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Debug|Win32.Build.0 = Debug|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Release|Any CPU.Build.0 = Release|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Release|Mixed Platforms.ActiveCfg = Release|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Release|Mixed Platforms.Build.0 = Release|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Release|Win32.ActiveCfg = Release|Any CPU + {85318BED-28D8-4B31-A7BA-9ED7882D11FC}.Release|Win32.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {ED79A565-8639-4BCF-B4EB-1E4718FFBFDF} = {627D2E95-D2A1-4AF5-8969-A12322DAAC00} + {401554DC-5C8F-4A81-908E-D3CB6EFDF861} = {35152C6E-EE24-4BE3-A022-FC83407183B9} + {A4B06446-0E0E-468B-B07C-AA45583A031A} = {35152C6E-EE24-4BE3-A022-FC83407183B9} + {BFC747EF-B590-469E-9534-E576B78E9499} = {35152C6E-EE24-4BE3-A022-FC83407183B9} + {85318BED-28D8-4B31-A7BA-9ED7882D11FC} = {35FF6948-F124-4361-8719-632162DFB865} + EndGlobalSection +EndGlobal diff --git a/examples/dotnet/forms_cil/App.config b/examples/dotnet/forms_cil/App.config new file mode 100644 index 0000000..58262a1 --- /dev/null +++ b/examples/dotnet/forms_cil/App.config @@ -0,0 +1,6 @@ +<?xml version="1.0"?> +<configuration> + <startup> + <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/> + </startup> +</configuration> diff --git a/examples/dotnet/forms_cil/Form1.Designer.cs b/examples/dotnet/forms_cil/Form1.Designer.cs new file mode 100644 index 0000000..f9d0410 --- /dev/null +++ b/examples/dotnet/forms_cil/Form1.Designer.cs @@ -0,0 +1,86 @@ +namespace forms_cil +{ + partial class Form1 + { + /// <summary> + /// Required designer variable. + /// </summary> + private System.ComponentModel.IContainer components = null; + + /// <summary> + /// Clean up any resources being used. + /// </summary> + /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// <summary> + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// </summary> + private void InitializeComponent() + { + this.label1 = new System.Windows.Forms.Label(); + this.txtPassword = new System.Windows.Forms.TextBox(); + this.btnCheckPassword = new System.Windows.Forms.Button(); + this.SuspendLayout(); + // + // label1 + // + this.label1.AutoSize = true; + this.label1.Location = new System.Drawing.Point(13, 13); + this.label1.Name = "label1"; + this.label1.Size = new System.Drawing.Size(56, 13); + this.label1.TabIndex = 0; + this.label1.Text = "Password:"; + // + // txtPassword + // + this.txtPassword.Location = new System.Drawing.Point(75, 10); + this.txtPassword.Name = "txtPassword"; + this.txtPassword.Size = new System.Drawing.Size(192, 20); + this.txtPassword.TabIndex = 1; + // + // btnCheckPassword + // + this.btnCheckPassword.DialogResult = System.Windows.Forms.DialogResult.OK; + this.btnCheckPassword.Location = new System.Drawing.Point(273, 8); + this.btnCheckPassword.Name = "btnCheckPassword"; + this.btnCheckPassword.Size = new System.Drawing.Size(98, 23); + this.btnCheckPassword.TabIndex = 2; + this.btnCheckPassword.Text = "Check password"; + this.btnCheckPassword.UseVisualStyleBackColor = true; + this.btnCheckPassword.Click += new System.EventHandler(this.btnCheckPassword_Click); + // + // Form1 + // + this.AcceptButton = this.btnCheckPassword; + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(384, 40); + this.Controls.Add(this.btnCheckPassword); + this.Controls.Add(this.txtPassword); + this.Controls.Add(this.label1); + this.Name = "Form1"; + this.Text = "VMProtect test [FormsCIL]"; + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.Label label1; + private System.Windows.Forms.TextBox txtPassword; + private System.Windows.Forms.Button btnCheckPassword; + } +} + diff --git a/examples/dotnet/forms_cil/Form1.cs b/examples/dotnet/forms_cil/Form1.cs new file mode 100644 index 0000000..a19ec42 --- /dev/null +++ b/examples/dotnet/forms_cil/Form1.cs @@ -0,0 +1,33 @@ +using System; +using System.Reflection; +using System.Windows.Forms; + +namespace forms_cil +{ + public partial class Form1 : Form + { + public Form1() + { + InitializeComponent(); + } + + private bool CheckPassword(string pwd) + { + UInt64 magicNum; + return (UInt64.TryParse(pwd, out magicNum) && magicNum % 17 == 13); + } + + [VMProtect.BeginVirtualization] + private void btnCheckPassword_Click(object sender, EventArgs e) + { + if (CheckPassword(txtPassword.Text)) + { + MessageBox.Show(VMProtect.SDK.DecryptString("Correct password"), VMProtect.SDK.DecryptString("Password check"), MessageBoxButtons.OK, MessageBoxIcon.Information); + } else + { + MessageBox.Show(VMProtect.SDK.DecryptString("Incorrect password"), VMProtect.SDK.DecryptString("Password check"), MessageBoxButtons.OK, MessageBoxIcon.Error); + txtPassword.Focus(); + } + } + } +}
\ No newline at end of file diff --git a/examples/dotnet/forms_cil/Form1.resx b/examples/dotnet/forms_cil/Form1.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/examples/dotnet/forms_cil/Form1.resx @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<root> + <!-- + Microsoft ResX Schema + + Version 2.0 + + The primary goals of this format is to allow a simple XML format + that is mostly human readable. The generation and parsing of the + various data types are done through the TypeConverter classes + associated with the data types. + + Example: + + ... ado.net/XML headers & schema ... + <resheader name="resmimetype">text/microsoft-resx</resheader> + <resheader name="version">2.0</resheader> + <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader> + <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader> + <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data> + <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data> + <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64"> + <value>[base64 mime encoded serialized .NET Framework object]</value> + </data> + <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> + <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value> + <comment>This is a comment</comment> + </data> + + There are any number of "resheader" rows that contain simple + name/value pairs. + + Each data row contains a name, and value. The row also contains a + type or mimetype. Type corresponds to a .NET class that support + text/value conversion through the TypeConverter architecture. + Classes that don't support this are serialized and stored with the + mimetype set. + + The mimetype is used for serialized objects, and tells the + ResXResourceReader how to depersist the object. This is currently not + extensible. For a given mimetype the value must be set accordingly: + + Note - application/x-microsoft.net.object.binary.base64 is the format + that the ResXResourceWriter will generate, however the reader can + read any of the formats listed below. + + mimetype: application/x-microsoft.net.object.binary.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.soap.base64 + value : The object must be serialized with + : System.Runtime.Serialization.Formatters.Soap.SoapFormatter + : and then encoded with base64 encoding. + + mimetype: application/x-microsoft.net.object.bytearray.base64 + value : The object must be serialized into a byte array + : using a System.ComponentModel.TypeConverter + : and then encoded with base64 encoding. + --> + <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> + <xsd:import namespace="http://www.w3.org/XML/1998/namespace" /> + <xsd:element name="root" msdata:IsDataSet="true"> + <xsd:complexType> + <xsd:choice maxOccurs="unbounded"> + <xsd:element name="metadata"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" /> + </xsd:sequence> + <xsd:attribute name="name" use="required" type="xsd:string" /> + <xsd:attribute name="type" type="xsd:string" /> + <xsd:attribute name="mimetype" type="xsd:string" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="assembly"> + <xsd:complexType> + <xsd:attribute name="alias" type="xsd:string" /> + <xsd:attribute name="name" type="xsd:string" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="data"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" /> + <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" /> + <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" /> + <xsd:attribute ref="xml:space" /> + </xsd:complexType> + </xsd:element> + <xsd:element name="resheader"> + <xsd:complexType> + <xsd:sequence> + <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" /> + </xsd:sequence> + <xsd:attribute name="name" type="xsd:string" use="required" /> + </xsd:complexType> + </xsd:element> + </xsd:choice> + </xsd:complexType> + </xsd:element> + </xsd:schema> + <resheader name="resmimetype"> + <value>text/microsoft-resx</value> + </resheader> + <resheader name="version"> + <value>2.0</value> + </resheader> + <resheader name="reader"> + <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> + <resheader name="writer"> + <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value> + </resheader> +</root>
\ No newline at end of file diff --git a/examples/dotnet/forms_cil/Program.cs b/examples/dotnet/forms_cil/Program.cs new file mode 100644 index 0000000..a9d0f2c --- /dev/null +++ b/examples/dotnet/forms_cil/Program.cs @@ -0,0 +1,19 @@ +using System; +using System.Windows.Forms; + +namespace forms_cil +{ + static class Program + { + /// <summary> + /// The main entry point for the application. + /// </summary> + [STAThread] + static void Main() + { + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new Form1()); + } + } +} diff --git a/examples/dotnet/forms_cil/Properties/AssemblyInfo.cs b/examples/dotnet/forms_cil/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..bc8caf9 --- /dev/null +++ b/examples/dotnet/forms_cil/Properties/AssemblyInfo.cs @@ -0,0 +1,19 @@ +using System.Diagnostics; +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; +using System.Runtime.Versioning; + +[assembly: AssemblyDescription("")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("")] +[assembly: RuntimeCompatibility(WrapNonExceptionThrows=true)] +[assembly: AssemblyTrademark("")] +[assembly: CompilationRelaxations(8)] +[assembly: AssemblyTitle("forms_cil")] +[assembly: AssemblyProduct("forms_cil")] +[assembly: AssemblyCopyright("Copyright © 2014")] +[assembly: ComVisible(false)] +[assembly: Guid("31c4f344-7d2d-4fcc-8cf5-3c6d368ad135")] +[assembly: AssemblyFileVersion("1.0.0.0")] +[assembly: Debuggable((DebuggableAttribute.DebuggingModes.DisableOptimizations | (DebuggableAttribute.DebuggingModes.EnableEditAndContinue | (DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.Default))))]
\ No newline at end of file diff --git a/examples/dotnet/forms_cil/forms_cil.csproj b/examples/dotnet/forms_cil/forms_cil.csproj new file mode 100644 index 0000000..60fe8ca --- /dev/null +++ b/examples/dotnet/forms_cil/forms_cil.csproj @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> + <PropertyGroup> + <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> + <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> + <ProjectGuid>{A4B06446-0E0E-468B-B07C-AA45583A031A}</ProjectGuid> + <OutputType>WinExe</OutputType> + <AppDesignerFolder>Properties</AppDesignerFolder> + <RootNamespace>forms_cil</RootNamespace> + <AssemblyName>forms_cil</AssemblyName> + <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> + <FileAlignment>512</FileAlignment> + <TargetFrameworkProfile /> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugSymbols>true</DebugSymbols> + <DebugType>full</DebugType> + <Optimize>false</Optimize> + <OutputPath>bin\Debug\</OutputPath> + <DefineConstants>DEBUG;TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> + <PlatformTarget>AnyCPU</PlatformTarget> + <DebugType>pdbonly</DebugType> + <Optimize>true</Optimize> + <OutputPath>bin\Release\</OutputPath> + <DefineConstants>TRACE</DefineConstants> + <ErrorReport>prompt</ErrorReport> + <WarningLevel>4</WarningLevel> + </PropertyGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Core" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="VMProtect.SDK"> + <HintPath>..\..\..\bin\VMProtect.SDK.dll</HintPath> + </Reference> + </ItemGroup> + <ItemGroup> + <Compile Include="Form1.cs"> + <SubType>Form</SubType> + </Compile> + <Compile Include="Form1.Designer.cs"> + <DependentUpon>Form1.cs</DependentUpon> + </Compile> + <Compile Include="Program.cs" /> + <Compile Include="Properties\AssemblyInfo.cs" /> + <EmbeddedResource Include="Form1.resx"> + <DependentUpon>Form1.cs</DependentUpon> + </EmbeddedResource> + </ItemGroup> + <ItemGroup> + <None Include="App.config" /> + </ItemGroup> + <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> + <!-- To modify your build process, add your task inside one of the targets below and uncomment it. + Other similar extension points exist, see Microsoft.Common.targets. + <Target Name="BeforeBuild"> + </Target> + <Target Name="AfterBuild"> + </Target> + --> +</Project>
\ No newline at end of file diff --git a/examples/dotnet/forms_mixed/AssemblyInfo.cpp b/examples/dotnet/forms_mixed/AssemblyInfo.cpp new file mode 100644 index 0000000..1805707 --- /dev/null +++ b/examples/dotnet/forms_mixed/AssemblyInfo.cpp @@ -0,0 +1,21 @@ +// Assembly forms_mixed, Version 1.0.0.0 + +using namespace System::Reflection; +using namespace System::Runtime::CompilerServices; +using namespace System::Runtime::Versioning; +using namespace System::Runtime::InteropServices; +using namespace System::Diagnostics; + +[assembly: AssemblyDescriptionAttribute("")]; +[assembly: AssemblyConfigurationAttribute("")]; +[assembly: AssemblyCompanyAttribute("")]; +[assembly: RuntimeCompatibilityAttribute(WrapNonExceptionThrows=true)]; +[assembly: AssemblyTrademarkAttribute("")]; +[assembly: CompilationRelaxations(8)]; +[assembly: AssemblyTitleAttribute("forms_mixed")]; +[assembly: AssemblyProductAttribute("forms_mixed")]; +[assembly: AssemblyCopyrightAttribute("Copyright © 2014")]; +[assembly: TargetFrameworkAttribute(".NETFramework,Version=v4.0", FrameworkDisplayName=".NET Framework 4")]; +[assembly: ComVisibleAttribute(false)]; +[assembly: GuidAttribute("31c4f344-7d2d-4fcc-8cf5-3c6d368ad136")]; +[assembly: AssemblyFileVersionAttribute("1.0.0.0")]; diff --git a/examples/dotnet/forms_mixed/Form1.cpp b/examples/dotnet/forms_mixed/Form1.cpp new file mode 100644 index 0000000..dadae49 --- /dev/null +++ b/examples/dotnet/forms_mixed/Form1.cpp @@ -0,0 +1,95 @@ +using namespace System; +using namespace System::Drawing; +using namespace System::Windows; +using namespace System::Windows::Forms; +using namespace System::Runtime::InteropServices; + + +#pragma unmanaged +#include "stdlib.h" +bool CheckPassword(const char *pwd) +{ + __int64 val = _atoi64(pwd); + return (val% 0x11) == 13; +} +#pragma managed + +namespace forms_mixed +{ + public ref class Form1 : public Form + { + public: + Form1() + { + label1 = gcnew Label(); + txtPassword = gcnew TextBox(); + btnCheckPassword = gcnew Button(); + Form::SuspendLayout(); + label1->AutoSize = true; + label1->Location = Point(13, 13); + label1->Name = "label1"; + label1->Size = System::Drawing::Size(0x38, 13); + label1->TabIndex = 0; + label1->Text = "Password:"; + txtPassword->Location = Point(0x4b, 10); + txtPassword->Name = "txtPassword"; + txtPassword->Size = System::Drawing::Size(0xc0, 20); + txtPassword->TabIndex = 1; + btnCheckPassword->DialogResult = Forms::DialogResult::OK; + btnCheckPassword->Location = Point(0x111, 8); + btnCheckPassword->Name = "btnCheckPassword"; + btnCheckPassword->Size = System::Drawing::Size(0x62, 0x17); + btnCheckPassword->TabIndex = 2; + btnCheckPassword->Text = "Check password"; + btnCheckPassword->UseVisualStyleBackColor = true; + btnCheckPassword->Click += gcnew EventHandler(this, &Form1::btnCheckPassword_Click); + Form::AcceptButton = btnCheckPassword; + Form::AutoScaleDimensions = System::Drawing::Size(6, 13); + Form::AutoScaleMode = Forms::AutoScaleMode::Font; + Form::ClientSize = System::Drawing::Size(0x180, 40); + Form::Controls->Add(btnCheckPassword); + Form::Controls->Add(txtPassword); + Form::Controls->Add(label1); + Form::Name = "Form1"; + Text = "VMProtect test [FormsMixed]"; + Form::ResumeLayout(false); + Form::PerformLayout(); + } + + private: + [VMProtect::Begin] + void btnCheckPassword_Click(Object^ sender, EventArgs^ e) + { + IntPtr pwd = Marshal::StringToCoTaskMemAnsi(txtPassword->Text); + try + { + if (CheckPassword((const char *)((void *)pwd))) + { + MessageBox::Show(VMProtect::SDK::DecryptString("Correct password"), VMProtect::SDK::DecryptString("Password check"), MessageBoxButtons::OK, MessageBoxIcon::Asterisk); + } + else + { + MessageBox::Show(VMProtect::SDK::DecryptString("Incorrect password"), VMProtect::SDK::DecryptString("Password check"), MessageBoxButtons::OK, MessageBoxIcon::Hand); + txtPassword->Focus(); + } + } catch(...) + { + Marshal::FreeCoTaskMem(pwd); + throw; + } + } + + Button^ btnCheckPassword; + System::ComponentModel::IContainer^ components; + Label^ label1; + TextBox^ txtPassword; + }; +} + +int __stdcall WinMain (void *hInstance, void *hPrevInstance, void *lpCmdLine, int nShowCmd) +{ + Application::EnableVisualStyles(); + Application::SetCompatibleTextRenderingDefault(false); + Application::Run(gcnew forms_mixed::Form1()); + return 0; +} diff --git a/examples/dotnet/forms_mixed/forms_mixed.vcxproj b/examples/dotnet/forms_mixed/forms_mixed.vcxproj new file mode 100644 index 0000000..59f4221 --- /dev/null +++ b/examples/dotnet/forms_mixed/forms_mixed.vcxproj @@ -0,0 +1,90 @@ +<?xml version="1.0" encoding="utf-8"?> +<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> + <ItemGroup Label="ProjectConfigurations"> + <ProjectConfiguration Include="Debug|Win32"> + <Configuration>Debug</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + <ProjectConfiguration Include="Release|Win32"> + <Configuration>Release</Configuration> + <Platform>Win32</Platform> + </ProjectConfiguration> + </ItemGroup> + <PropertyGroup Label="Globals"> + <ProjectGuid>{ED79A565-8639-4BCF-B4EB-1E4718FFBFDF}</ProjectGuid> + <TargetFrameworkVersion>v4.0</TargetFrameworkVersion> + <Keyword>ManagedCProj</Keyword> + <RootNamespace>forms_mixed</RootNamespace> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>true</UseDebugLibraries> + <PlatformToolset>v100</PlatformToolset> + <CLRSupport>true</CLRSupport> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> + <ConfigurationType>Application</ConfigurationType> + <UseDebugLibraries>false</UseDebugLibraries> + <PlatformToolset>v100</PlatformToolset> + <CLRSupport>true</CLRSupport> + <CharacterSet>Unicode</CharacterSet> + </PropertyGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> + <ImportGroup Label="ExtensionSettings"> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> + </ImportGroup> + <PropertyGroup Label="UserMacros" /> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <LinkIncremental>true</LinkIncremental> + </PropertyGroup> + <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <LinkIncremental>false</LinkIncremental> + </PropertyGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <Optimization>Disabled</Optimization> + <PreprocessorDefinitions>WIN32;_DEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies /> + <SubSystem>Windows</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> + <ClCompile> + <WarningLevel>Level3</WarningLevel> + <PreprocessorDefinitions>WIN32;NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions> + </ClCompile> + <Link> + <GenerateDebugInformation>true</GenerateDebugInformation> + <AdditionalDependencies /> + <SubSystem>Windows</SubSystem> + </Link> + </ItemDefinitionGroup> + <ItemGroup> + <ClCompile Include="AssemblyInfo.cpp" /> + <ClCompile Include="Form1.cpp" /> + </ItemGroup> + <ItemGroup> + <Reference Include="System" /> + <Reference Include="System.Configuration" /> + <Reference Include="System.Core" /> + <Reference Include="System.Drawing" /> + <Reference Include="System.Windows.Forms" /> + <Reference Include="VMProtect.SDK"> + <HintPath>..\..\..\bin\VMProtect.SDK.dll</HintPath> + </Reference> + </ItemGroup> + <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> + <ImportGroup Label="ExtensionTargets"> + </ImportGroup> +</Project>
\ No newline at end of file diff --git a/examples/scripts/Delphi Resources/Project1.exe.vmp b/examples/scripts/Delphi Resources/Project1.exe.vmp new file mode 100644 index 0000000..8045223 --- /dev/null +++ b/examples/scripts/Delphi Resources/Project1.exe.vmp @@ -0,0 +1,31 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Document> + <Protection InputFileName="Project1.exe" Options="32768" RunParameters=""> + <Folders /> + <Procedures> + <Procedure MapAddress='VMProtectMarker "Test marker"' Options="1" /> + <Procedure MapAddress='string "Correct password"' Options="1" /> + <Procedure MapAddress='string "Incorrect password"' Options="1" /> + </Procedures> + <Messages /> + </Protection> + <DLLBox /> + <Script> + <![CDATA[function OnBeforeSaveFile() + local file = vmprotect:core():outputArchitecture() + local rc_data = file:resources():itemByType(PE.RT_RCDATA) + if (rc_data) then + local names = {} + table.insert(names, "PACKAGEINFO") + table.insert(names, "DVCLAL") + for _, line in ipairs(names) do + local resource = rc_data:itemByName(line) + if (resource) then + print(string.format("Resource \"%s\" is deleted", line)) + resource:destroy() + end + end + end +end]]> +</Script> +</Document> diff --git a/examples/scripts/Environment Variables/Project1.exe.vmp b/examples/scripts/Environment Variables/Project1.exe.vmp new file mode 100644 index 0000000..03de3d0 --- /dev/null +++ b/examples/scripts/Environment Variables/Project1.exe.vmp @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Document Version="2"> + <Protection InputFileName="Project1.exe" Options="819200" RunParameters="" OutputFileName="%MYVAR%.exe"> + <Folders /> + <Procedures> + <Procedure MapAddress='VMProtectMarker "Test marker"' Options="1" /> + <Procedure MapAddress='string "Correct password"' Options="1" /> + <Procedure MapAddress='string "Incorrect password"' Options="1" /> + </Procedures> + <Messages /> + <Objects /> + </Protection> + <DLLBox> + <Folders /> + </DLLBox> + <Script> + <![CDATA[vmprotect.setEnvironmentVariable("MYVAR", "output")]]> +</Script> + <LicenseManager /> +</Document> diff --git a/examples/scripts/External DLL/Project1.exe.vmp b/examples/scripts/External DLL/Project1.exe.vmp new file mode 100644 index 0000000..365e56a --- /dev/null +++ b/examples/scripts/External DLL/Project1.exe.vmp @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Document> + <Protection InputFileName="Project1.exe" Options="32768" RunParameters=""> + <Folders /> + <Procedures> + <Procedure MapAddress='VMProtectMarker "Test marker"' Options="1" /> + <Procedure MapAddress='string "Correct password"' Options="1" /> + <Procedure MapAddress='string "Incorrect password"' Options="1" /> + </Procedures> + <Messages /> + </Protection> + <DLLBox /> + <Script> + <![CDATA[function OnBeforeCompilation() + MessageBox(0, 'OnBeforeCompilation', 'MessageBox from user32.dll', 0x40) +end + +function OnAfterCompilation() + MessageBox(0, 'OnAfterCompilation', 'MessageBox from user32.dll', 0x40) +end + +user32 = vmprotect.openLib('user32.dll') +MessageBox = user32:getFunction('MessageBoxA', {ret = 'int', 'size_t', 'string', 'string', 'uint'})]]> +</Script> + <LicenseManager /> +</Document> diff --git a/examples/scripts/Random Section Names/Project1.exe.vmp b/examples/scripts/Random Section Names/Project1.exe.vmp new file mode 100644 index 0000000..bb0c9e2 --- /dev/null +++ b/examples/scripts/Random Section Names/Project1.exe.vmp @@ -0,0 +1,32 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Document> + <Protection InputFileName="Project1.exe" Options="32768" RunParameters=""> + <Folders /> + <Procedures> + <Procedure MapAddress='VMProtectMarker "Test marker"' Options="1" /> + <Procedure MapAddress='string "Correct password"' Options="1" /> + <Procedure MapAddress='string "Incorrect password"' Options="1" /> + </Procedures> + <Messages /> + </Protection> + <DLLBox /> + <Script> + <![CDATA[function GetRandomSectionName() + local res = "" + for i = 1, 8 do + res = res .. string.char(32 + math.random(string.byte("z") - 32)) + end + return res +end + +function OnAfterSaveFile() + local file = vmprotect.core():outputArchitecture() + for i = 1, file:segments():count() do + segment = file:segments():item(i) + name = GetRandomSectionName() + print(string.format("Section \"%s\" is renamed to \"%s\"", segment:name(), name)) + segment:setName(name) + end +end]]> +</Script> +</Document> diff --git a/examples/scripts/Script Events/Project1.exe.vmp b/examples/scripts/Script Events/Project1.exe.vmp new file mode 100644 index 0000000..f09e93f --- /dev/null +++ b/examples/scripts/Script Events/Project1.exe.vmp @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<Document> + <Protection InputFileName="Project1.exe" Options="32768" RunParameters=""> + <Folders /> + <Procedures> + <Procedure MapAddress='VMProtectMarker "Test marker"' Options="1" /> + <Procedure MapAddress='string "Correct password"' Options="1" /> + <Procedure MapAddress='string "Incorrect password"' Options="1" /> + </Procedures> + <Messages /> + </Protection> + <DLLBox /> + <Script> + <![CDATA[function OnBeforeCompilation() + print("OnBeforeCompilation") +end + +function OnAfterCompilation() + print("OnAfterCompilation") +end + +function OnAfterSaveFile() + print("OnAfterSaveFile") +end]]> +</Script> +</Document> |