From 217c6974dbc4398e031964edcd3ea3eebdf690e3 Mon Sep 17 00:00:00 2001 From: XAS-712 Date: Mon, 21 Jan 2019 23:41:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96S50=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=BB=93=E6=9E=84=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=8E=92=E9=87=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- MifareOneTool/ClassMifareS50.cs | 37 +++++++++ MifareOneTool/Form1.Designer.cs | 70 ++++++++-------- MifareOneTool/Form1.resx | 3 - MifareOneTool/FormDiff.Designer.cs | 58 ++++++++++++++ MifareOneTool/FormDiff.cs | 19 +++++ MifareOneTool/FormDiff.resx | 120 ++++++++++++++++++++++++++++ MifareOneTool/FormHTool.Designer.cs | 73 ++++++++++------- MifareOneTool/FormHTool.cs | 21 +++++ MifareOneTool/FormHTool.resx | 3 - MifareOneTool/MifareOneTool.csproj | 9 +++ 10 files changed, 341 insertions(+), 72 deletions(-) create mode 100644 MifareOneTool/FormDiff.Designer.cs create mode 100644 MifareOneTool/FormDiff.cs create mode 100644 MifareOneTool/FormDiff.resx diff --git a/MifareOneTool/ClassMifareS50.cs b/MifareOneTool/ClassMifareS50.cs index e959078..2d844a6 100644 --- a/MifareOneTool/ClassMifareS50.cs +++ b/MifareOneTool/ClassMifareS50.cs @@ -227,6 +227,21 @@ namespace MifareOneTool } return info; } + public byte[] KeyA + { + get { return this._sector[3].Skip(0).Take(6).ToArray(); } + set { for (int i = 0; i < 6; i++) { this._sector[3][i] = value[i]; } } + } + public byte[] KeyB + { + get { return this._sector[3].Skip(10).Take(6).ToArray(); } + set { for (int i = 10; i < 16; i++) { this._sector[3][i] = value[i]; } } + } + public byte[] ACBits + { + get { return this._sector[3].Skip(6).Take(4).ToArray(); } + set { for (int i = 6; i < 10; i++) { this._sector[3][i] = value[i]; } } + } } class S50 { @@ -337,5 +352,27 @@ namespace MifareOneTool } File.WriteAllText(file, sb.ToString()); } + public List KeyList() + { + List keys = new List(); + foreach (Sector s in this._sectors) + { + keys.Add(s.KeyA); + keys.Add(s.KeyB); + } + keys = keys.Distinct().ToList(); + return keys; + } + public List KeyListStr() + { + List keys = new List(); + foreach (Sector s in this._sectors) + { + keys.Add(Utils.Hex2Str(s.KeyA)); + keys.Add(Utils.Hex2Str(s.KeyB)); + } + keys = keys.Distinct().ToList(); + return keys; + } } } diff --git a/MifareOneTool/Form1.Designer.cs b/MifareOneTool/Form1.Designer.cs index f3ca0de..bb6187f 100644 --- a/MifareOneTool/Form1.Designer.cs +++ b/MifareOneTool/Form1.Designer.cs @@ -51,9 +51,10 @@ this.buttonConClr = new System.Windows.Forms.Button(); this.buttonMfcuk = new System.Windows.Forms.Button(); this.buttonHexTool = new System.Windows.Forms.Button(); - this.buttonTool1 = new System.Windows.Forms.Button(); + this.buttonDiffTool = new System.Windows.Forms.Button(); this.toolTipHelp = new System.Windows.Forms.ToolTip(this.components); this.groupBox4 = new System.Windows.Forms.GroupBox(); + this.buttonCheckEncrypt = new System.Windows.Forms.Button(); this.buttonEnAcr122u = new System.Windows.Forms.Button(); this.buttonMfFormat = new System.Windows.Forms.Button(); this.buttonLockUfuid = new System.Windows.Forms.Button(); @@ -67,6 +68,7 @@ this.button4 = new System.Windows.Forms.Button(); this.buttonEMfWrite = new System.Windows.Forms.Button(); this.groupBox6 = new System.Windows.Forms.GroupBox(); + this.buttonECheckEncrypt = new System.Windows.Forms.Button(); this.buttonEUpdate = new System.Windows.Forms.Button(); this.buttoEScanCard = new System.Windows.Forms.Button(); this.buttonEscan = new System.Windows.Forms.Button(); @@ -82,8 +84,6 @@ this.localVersionLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.remoteVersionLabel = new System.Windows.Forms.ToolStripStatusLabel(); this.timer1 = new System.Windows.Forms.Timer(this.components); - this.buttonCheckEncrypt = new System.Windows.Forms.Button(); - this.buttonECheckEncrypt = new System.Windows.Forms.Button(); this.groupBox1.SuspendLayout(); this.groupBox2.SuspendLayout(); this.groupBox3.SuspendLayout(); @@ -346,20 +346,20 @@ this.buttonHexTool.Name = "buttonHexTool"; this.buttonHexTool.Size = new System.Drawing.Size(110, 23); this.buttonHexTool.TabIndex = 1; - this.buttonHexTool.Text = "Hex工具"; + this.buttonHexTool.Text = "Hex编辑器"; this.buttonHexTool.UseVisualStyleBackColor = true; this.buttonHexTool.Click += new System.EventHandler(this.buttonHexTool_Click); // - // buttonTool1 + // buttonDiffTool // - this.buttonTool1.Enabled = false; - this.buttonTool1.Font = new System.Drawing.Font("宋体", 8.5F); - this.buttonTool1.Location = new System.Drawing.Point(6, 24); - this.buttonTool1.Name = "buttonTool1"; - this.buttonTool1.Size = new System.Drawing.Size(110, 23); - this.buttonTool1.TabIndex = 0; - this.buttonTool1.Text = "key.mfd工具"; - this.buttonTool1.UseVisualStyleBackColor = true; + this.buttonDiffTool.Enabled = false; + this.buttonDiffTool.Font = new System.Drawing.Font("宋体", 8.5F); + this.buttonDiffTool.Location = new System.Drawing.Point(6, 24); + this.buttonDiffTool.Name = "buttonDiffTool"; + this.buttonDiffTool.Size = new System.Drawing.Size(110, 23); + this.buttonDiffTool.TabIndex = 0; + this.buttonDiffTool.Text = "差异比较"; + this.buttonDiffTool.UseVisualStyleBackColor = true; // // toolTipHelp // @@ -377,7 +377,7 @@ this.groupBox4.Controls.Add(this.buttonLockUfuid); this.groupBox4.Controls.Add(this.buttonCmfWrite); this.groupBox4.Controls.Add(this.buttonMfcuk); - this.groupBox4.Controls.Add(this.buttonTool1); + this.groupBox4.Controls.Add(this.buttonDiffTool); this.groupBox4.Controls.Add(this.buttonHexTool); this.groupBox4.Location = new System.Drawing.Point(3, 95); this.groupBox4.Name = "groupBox4"; @@ -386,6 +386,16 @@ this.groupBox4.TabStop = false; this.groupBox4.Text = "工具"; // + // buttonCheckEncrypt + // + this.buttonCheckEncrypt.Location = new System.Drawing.Point(360, 23); + this.buttonCheckEncrypt.Name = "buttonCheckEncrypt"; + this.buttonCheckEncrypt.Size = new System.Drawing.Size(75, 23); + this.buttonCheckEncrypt.TabIndex = 13; + this.buttonCheckEncrypt.Text = "检加密"; + this.buttonCheckEncrypt.UseVisualStyleBackColor = true; + this.buttonCheckEncrypt.Click += new System.EventHandler(this.buttonCheckEncrypt_Click); + // // buttonEnAcr122u // this.buttonEnAcr122u.Location = new System.Drawing.Point(279, 52); @@ -525,6 +535,16 @@ this.groupBox6.TabStop = false; this.groupBox6.Text = "[1]检测"; // + // buttonECheckEncrypt + // + this.buttonECheckEncrypt.Location = new System.Drawing.Point(6, 87); + this.buttonECheckEncrypt.Name = "buttonECheckEncrypt"; + this.buttonECheckEncrypt.Size = new System.Drawing.Size(116, 25); + this.buttonECheckEncrypt.TabIndex = 5; + this.buttonECheckEncrypt.Text = "[3]检测加密"; + this.buttonECheckEncrypt.UseVisualStyleBackColor = true; + this.buttonECheckEncrypt.Click += new System.EventHandler(this.buttonECheckEncrypt_Click); + // // buttonEUpdate // this.buttonEUpdate.Location = new System.Drawing.Point(6, 140); @@ -667,26 +687,6 @@ this.timer1.Enabled = true; this.timer1.Tick += new System.EventHandler(this.timer1_Tick); // - // buttonCheckEncrypt - // - this.buttonCheckEncrypt.Location = new System.Drawing.Point(360, 23); - this.buttonCheckEncrypt.Name = "buttonCheckEncrypt"; - this.buttonCheckEncrypt.Size = new System.Drawing.Size(75, 23); - this.buttonCheckEncrypt.TabIndex = 13; - this.buttonCheckEncrypt.Text = "检加密"; - this.buttonCheckEncrypt.UseVisualStyleBackColor = true; - this.buttonCheckEncrypt.Click += new System.EventHandler(this.buttonCheckEncrypt_Click); - // - // buttonECheckEncrypt - // - this.buttonECheckEncrypt.Location = new System.Drawing.Point(6, 87); - this.buttonECheckEncrypt.Name = "buttonECheckEncrypt"; - this.buttonECheckEncrypt.Size = new System.Drawing.Size(116, 25); - this.buttonECheckEncrypt.TabIndex = 5; - this.buttonECheckEncrypt.Text = "[3]检测加密"; - this.buttonECheckEncrypt.UseVisualStyleBackColor = true; - this.buttonECheckEncrypt.Click += new System.EventHandler(this.buttonECheckEncrypt_Click); - // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); @@ -740,7 +740,7 @@ private System.Windows.Forms.Button buttonConClr; private System.Windows.Forms.Button buttonKill; private System.Windows.Forms.LinkLabel linkLabel1; - private System.Windows.Forms.Button buttonTool1; + private System.Windows.Forms.Button buttonDiffTool; private System.Windows.Forms.Button buttonHexTool; private System.Windows.Forms.Button buttonMfcuk; private System.Windows.Forms.ToolTip toolTipHelp; diff --git a/MifareOneTool/Form1.resx b/MifareOneTool/Form1.resx index 9f65069..e3a46f8 100644 --- a/MifareOneTool/Form1.resx +++ b/MifareOneTool/Form1.resx @@ -120,9 +120,6 @@ 17, 17 - - 17, 17 - 157, 17 diff --git a/MifareOneTool/FormDiff.Designer.cs b/MifareOneTool/FormDiff.Designer.cs new file mode 100644 index 0000000..2a122e5 --- /dev/null +++ b/MifareOneTool/FormDiff.Designer.cs @@ -0,0 +1,58 @@ +namespace MifareOneTool +{ + partial class FormDiff + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + this.richTextBox1 = new System.Windows.Forms.RichTextBox(); + this.SuspendLayout(); + // + // richTextBox1 + // + this.richTextBox1.Location = new System.Drawing.Point(12, 43); + this.richTextBox1.Name = "richTextBox1"; + this.richTextBox1.Size = new System.Drawing.Size(421, 505); + this.richTextBox1.TabIndex = 0; + this.richTextBox1.Text = "A: 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11"; + // + // FormDiff + // + this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(445, 560); + this.Controls.Add(this.richTextBox1); + this.Name = "FormDiff"; + this.Text = "FormDiff"; + this.ResumeLayout(false); + + } + + #endregion + + private System.Windows.Forms.RichTextBox richTextBox1; + } +} \ No newline at end of file diff --git a/MifareOneTool/FormDiff.cs b/MifareOneTool/FormDiff.cs new file mode 100644 index 0000000..19d0be6 --- /dev/null +++ b/MifareOneTool/FormDiff.cs @@ -0,0 +1,19 @@ +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Data; +using System.Drawing; +using System.Linq; +using System.Text; +using System.Windows.Forms; + +namespace MifareOneTool +{ + public partial class FormDiff : Form + { + public FormDiff() + { + InitializeComponent(); + } + } +} diff --git a/MifareOneTool/FormDiff.resx b/MifareOneTool/FormDiff.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/MifareOneTool/FormDiff.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/MifareOneTool/FormHTool.Designer.cs b/MifareOneTool/FormHTool.Designer.cs index 1db0996..a781950 100644 --- a/MifareOneTool/FormHTool.Designer.cs +++ b/MifareOneTool/FormHTool.Designer.cs @@ -39,7 +39,11 @@ this.退出ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.工具ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.修改UIDToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); this.检查全卡ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.检查并纠正全卡ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.导出为MCT格式ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.groupBox1 = new System.Windows.Forms.GroupBox(); this.dataGridView1 = new System.Windows.Forms.DataGridView(); this.Column1 = new System.Windows.Forms.DataGridViewTextBoxColumn(); @@ -67,10 +71,7 @@ this.groupBox3 = new System.Windows.Forms.GroupBox(); this.richTextBox1 = new System.Windows.Forms.RichTextBox(); this.s50BindingSource = new System.Windows.Forms.BindingSource(this.components); - this.检查并纠正全卡ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); - this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); - this.导出为MCT格式ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.导出密钥字典ToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.menuStrip1.SuspendLayout(); this.groupBox1.SuspendLayout(); ((System.ComponentModel.ISupportInitialize)(this.dataGridView1)).BeginInit(); @@ -157,7 +158,8 @@ this.检查全卡ToolStripMenuItem, this.检查并纠正全卡ToolStripMenuItem, this.toolStripSeparator3, - this.导出为MCT格式ToolStripMenuItem}); + this.导出为MCT格式ToolStripMenuItem, + this.导出密钥字典ToolStripMenuItem}); this.工具ToolStripMenuItem.Name = "工具ToolStripMenuItem"; this.工具ToolStripMenuItem.Size = new System.Drawing.Size(51, 24); this.工具ToolStripMenuItem.Text = "工具"; @@ -166,18 +168,44 @@ // this.修改UIDToolStripMenuItem.Name = "修改UIDToolStripMenuItem"; this.修改UIDToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.U))); - this.修改UIDToolStripMenuItem.Size = new System.Drawing.Size(239, 24); + this.修改UIDToolStripMenuItem.Size = new System.Drawing.Size(248, 24); this.修改UIDToolStripMenuItem.Text = "修改UID"; this.修改UIDToolStripMenuItem.Click += new System.EventHandler(this.修改UIDToolStripMenuItem_Click); // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(245, 6); + // // 检查全卡ToolStripMenuItem // this.检查全卡ToolStripMenuItem.Name = "检查全卡ToolStripMenuItem"; this.检查全卡ToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.J))); - this.检查全卡ToolStripMenuItem.Size = new System.Drawing.Size(239, 24); + this.检查全卡ToolStripMenuItem.Size = new System.Drawing.Size(248, 24); this.检查全卡ToolStripMenuItem.Text = "检查全卡"; this.检查全卡ToolStripMenuItem.Click += new System.EventHandler(this.检查全卡ToolStripMenuItem_Click); // + // 检查并纠正全卡ToolStripMenuItem + // + this.检查并纠正全卡ToolStripMenuItem.Name = "检查并纠正全卡ToolStripMenuItem"; + this.检查并纠正全卡ToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K))); + this.检查并纠正全卡ToolStripMenuItem.Size = new System.Drawing.Size(248, 24); + this.检查并纠正全卡ToolStripMenuItem.Text = "检查并纠正全卡"; + this.检查并纠正全卡ToolStripMenuItem.Click += new System.EventHandler(this.检查并纠正全卡ToolStripMenuItem_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(245, 6); + // + // 导出为MCT格式ToolStripMenuItem + // + this.导出为MCT格式ToolStripMenuItem.Name = "导出为MCT格式ToolStripMenuItem"; + this.导出为MCT格式ToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.M))); + this.导出为MCT格式ToolStripMenuItem.Size = new System.Drawing.Size(248, 24); + this.导出为MCT格式ToolStripMenuItem.Text = "导出为MCT格式"; + this.导出为MCT格式ToolStripMenuItem.Click += new System.EventHandler(this.导出为MCT格式ToolStripMenuItem_Click); + // // groupBox1 // this.groupBox1.Controls.Add(this.dataGridView1); @@ -492,31 +520,13 @@ // this.s50BindingSource.DataSource = typeof(MifareOneTool.S50); // - // 检查并纠正全卡ToolStripMenuItem + // 导出密钥字典ToolStripMenuItem // - this.检查并纠正全卡ToolStripMenuItem.Name = "检查并纠正全卡ToolStripMenuItem"; - this.检查并纠正全卡ToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.K))); - this.检查并纠正全卡ToolStripMenuItem.Size = new System.Drawing.Size(239, 24); - this.检查并纠正全卡ToolStripMenuItem.Text = "检查并纠正全卡"; - this.检查并纠正全卡ToolStripMenuItem.Click += new System.EventHandler(this.检查并纠正全卡ToolStripMenuItem_Click); - // - // toolStripSeparator2 - // - this.toolStripSeparator2.Name = "toolStripSeparator2"; - this.toolStripSeparator2.Size = new System.Drawing.Size(245, 6); - // - // toolStripSeparator3 - // - this.toolStripSeparator3.Name = "toolStripSeparator3"; - this.toolStripSeparator3.Size = new System.Drawing.Size(245, 6); - // - // 导出为MCT格式ToolStripMenuItem - // - this.导出为MCT格式ToolStripMenuItem.Name = "导出为MCT格式ToolStripMenuItem"; - this.导出为MCT格式ToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.M))); - this.导出为MCT格式ToolStripMenuItem.Size = new System.Drawing.Size(248, 24); - this.导出为MCT格式ToolStripMenuItem.Text = "导出为MCT格式"; - this.导出为MCT格式ToolStripMenuItem.Click += new System.EventHandler(this.导出为MCT格式ToolStripMenuItem_Click); + this.导出密钥字典ToolStripMenuItem.Name = "导出密钥字典ToolStripMenuItem"; + this.导出密钥字典ToolStripMenuItem.ShortcutKeys = ((System.Windows.Forms.Keys)((System.Windows.Forms.Keys.Control | System.Windows.Forms.Keys.N))); + this.导出密钥字典ToolStripMenuItem.Size = new System.Drawing.Size(248, 24); + this.导出密钥字典ToolStripMenuItem.Text = "导出密钥字典"; + this.导出密钥字典ToolStripMenuItem.Click += new System.EventHandler(this.导出密钥字典ToolStripMenuItem_Click); // // FormHTool // @@ -590,5 +600,6 @@ private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; private System.Windows.Forms.ToolStripMenuItem 导出为MCT格式ToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem 导出密钥字典ToolStripMenuItem; } } \ No newline at end of file diff --git a/MifareOneTool/FormHTool.cs b/MifareOneTool/FormHTool.cs index 3a1a23e..093b514 100644 --- a/MifareOneTool/FormHTool.cs +++ b/MifareOneTool/FormHTool.cs @@ -426,5 +426,26 @@ namespace MifareOneTool } logAppend("已导出MCT文件" + filename + "。"); } + + private void 导出密钥字典ToolStripMenuItem_Click(object sender, EventArgs e) + { + string filename; + SaveFileDialog ofd = new SaveFileDialog(); + ofd.AddExtension = true; + ofd.DefaultExt = ".dic"; + ofd.Title = "请选择密钥字典文件保存位置及文件名"; + ofd.OverwritePrompt = true; + ofd.Filter = "字典文件|*.dic"; + if (ofd.ShowDialog() == DialogResult.OK) + { + filename = ofd.FileName; + } + else + { + return; + } + File.WriteAllLines(filename, this.currentS50.KeyListStr().ToArray()); + logAppend("已导出密钥字典文件" + filename + "。"); + } } } diff --git a/MifareOneTool/FormHTool.resx b/MifareOneTool/FormHTool.resx index 279a098..b3bd9fb 100644 --- a/MifareOneTool/FormHTool.resx +++ b/MifareOneTool/FormHTool.resx @@ -123,9 +123,6 @@ True - - True - 155, 17 diff --git a/MifareOneTool/MifareOneTool.csproj b/MifareOneTool/MifareOneTool.csproj index a576e5e..6494404 100644 --- a/MifareOneTool/MifareOneTool.csproj +++ b/MifareOneTool/MifareOneTool.csproj @@ -73,6 +73,12 @@ Form1.cs + + Form + + + FormDiff.cs + Form @@ -91,6 +97,9 @@ Form1.cs + + FormDiff.cs + FormHTool.cs