├── README.md
├── MifareOneTool
├── nfc_128.ico
├── Newtonsoft.Json.dll
├── Resources
│ ├── round_clear_black_24dp.png
│ ├── round_done_all_black_24dp.png
│ ├── round_done_all_black_36dp.png
│ ├── round_done_black_24pt_1x.png
│ ├── round_done_black_48pt_1x.png
│ ├── round_info_black_18pt_1x.png
│ ├── round_sync_black_18pt_1x.png
│ ├── round_timer_black_18pt_1x.png
│ ├── outline_info_black_18pt_1x.png
│ ├── round_update_black_18pt_1x.png
│ ├── round_update_black_24pt_1x.png
│ ├── round_chevron_right_black_24dp.png
│ ├── round_done_all_black_18pt_1x.png
│ ├── round_done_all_black_18pt_2x.png
│ ├── round_done_all_black_24pt_1x.png
│ ├── round_done_all_black_36pt_1x.png
│ └── round_done_outline_black_24pt_1x.png
├── Properties
│ ├── AssemblyInfo.cs
│ ├── Settings.settings
│ └── Settings.Designer.cs
├── Program.cs
├── GitHubUpdate.cs
├── app.config
├── FormHardNes.cs
├── FormDiff.cs
├── FormMFF08.cs
├── FormDiff.Designer.cs
├── SelectLanguage.resx
├── FormDiff.zh.resx
├── FormDiff.ru.resx
├── FormMFF08.Designer.cs
├── SelectLanguage.designer.cs
├── FormHardNes.ru.resx
├── FormHardNes.zh.resx
├── FormMFF08.zh.resx
├── FormMFF08.ru.resx
├── MifareOneTool.csproj
├── SelectLanguage.cs
├── FormHTool.zh.resx
├── FormHardNes.Designer.cs
├── FormHTool.ru.resx
├── ClassMifareS50.cs
└── FormDiff.resx
├── .github
└── ISSUE_TEMPLATE
│ ├── ---request.md
│ └── bug--.md
├── MifareOneTool.sln
└── .gitignore
/README.md:
--------------------------------------------------------------------------------
1 | # MifareOneTool
2 | A GUI Mifare Classic tool on Windows
3 |
4 | 因作者事务繁忙,软件不再更新。
5 |
--------------------------------------------------------------------------------
/MifareOneTool/nfc_128.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/nfc_128.ico
--------------------------------------------------------------------------------
/MifareOneTool/Newtonsoft.Json.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Newtonsoft.Json.dll
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_clear_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_clear_black_24dp.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_all_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_all_black_24dp.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_all_black_36dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_all_black_36dp.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_black_24pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_black_24pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_black_48pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_black_48pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_info_black_18pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_info_black_18pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_sync_black_18pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_sync_black_18pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_timer_black_18pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_timer_black_18pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/outline_info_black_18pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/outline_info_black_18pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_update_black_18pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_update_black_18pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_update_black_24pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_update_black_24pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_chevron_right_black_24dp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_chevron_right_black_24dp.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_all_black_18pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_all_black_18pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_all_black_18pt_2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_all_black_18pt_2x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_all_black_24pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_all_black_24pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_all_black_36pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_all_black_36pt_1x.png
--------------------------------------------------------------------------------
/MifareOneTool/Resources/round_done_outline_black_24pt_1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/xcicode/MifareOneTool/HEAD/MifareOneTool/Resources/round_done_outline_black_24pt_1x.png
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/---request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: 新特性Request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **提出这个新功能的要求是不是因为在使用过程中遇到了问题?**
11 | 讲讲。
12 |
13 | **说说你的看法**
14 | 简洁明了的描述一下你的设想。
15 |
16 | **有没有备选方案呢?**
17 | 说说看。
18 |
19 | **还有什么想说的?**
20 | 比如,截屏/简图?
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug--.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug报告
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **描述一下bug**
11 | 尽量简洁明了。
12 |
13 | **如何重现这个bug呢?**
14 | 写一下步骤,如:
15 | 1. 打开软件
16 | 2. 点了xxx
17 | 3. 又点了yyy
18 | 4. 出错了
19 |
20 | **你觉得应该是怎样的?**
21 | 请讲。
22 |
23 | **截屏**
24 | 尽量带截屏,以便我们更快了解情况。
25 |
26 | **环境 (请填表):**
27 | - 操作系统: [e.g. Win8]
28 | - 读写器型号 [e.g. PN532]
29 | - 连接线型号 [e.g. CH340G]
30 | - 软件版本 [e.g. v1.5.0.0]
31 | - 操作的卡片 [e.g. CUID卡]
32 |
33 | **还有什么想说的?**
34 | 写下来。
35 |
--------------------------------------------------------------------------------
/MifareOneTool/Properties/AssemblyInfo.cs:
--------------------------------------------------------------------------------
1 | using System.Reflection;
2 | using System.Runtime.CompilerServices;
3 | using System.Runtime.InteropServices;
4 |
5 | // 有关程序集的常规信息通过以下
6 | // 特性集控制。更改这些特性值可修改
7 | // 与程序集关联的信息。
8 | [assembly: AssemblyTitle("MifareOneTool")]
9 | [assembly: AssemblyDescription("")]
10 | [assembly: AssemblyConfiguration("")]
11 | [assembly: AssemblyCompany("XciCode")]
12 | [assembly: AssemblyProduct("MifareOneTool")]
13 | [assembly: AssemblyCopyright("Copyright © XciCode 2018-2019")]
14 | [assembly: AssemblyTrademark("M1T")]
15 | [assembly: AssemblyCulture("")]
16 |
17 | // 将 ComVisible 设置为 false 使此程序集中的类型
18 | // 对 COM 组件不可见。如果需要从 COM 访问此程序集中的类型,
19 | // 则将该类型上的 ComVisible 特性设置为 true。
20 | [assembly: ComVisible(false)]
21 |
22 | // 如果此项目向 COM 公开,则下列 GUID 用于类型库的 ID
23 | [assembly: Guid("fba73834-5520-4ee8-9b7c-f881d2bd44c5")]
24 |
25 | // 程序集的版本信息由下面四个值组成:
26 | //
27 | // 主版本
28 | // 次版本
29 | // 内部版本号
30 | // 修订号
31 | //
32 | // 可以指定所有这些值,也可以使用“内部版本号”和“修订号”的默认值,
33 | // 方法是按如下所示使用“*”:
34 | // [assembly: AssemblyVersion("1.0.*")]
35 | [assembly: AssemblyVersion("1.7.0.0")]
36 | [assembly: AssemblyFileVersion("1.7.0.0")]
37 |
--------------------------------------------------------------------------------
/MifareOneTool.sln:
--------------------------------------------------------------------------------
1 |
2 | Microsoft Visual Studio Solution File, Format Version 11.00
3 | # Visual Studio 2010
4 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MifareOneTool", "MifareOneTool\MifareOneTool.csproj", "{CDB26016-FC77-403F-B22A-A011F8622FCF}"
5 | EndProject
6 | Global
7 | GlobalSection(SolutionConfigurationPlatforms) = preSolution
8 | Debug|Any CPU = Debug|Any CPU
9 | Debug|Mixed Platforms = Debug|Mixed Platforms
10 | Debug|Win32 = Debug|Win32
11 | Debug|x86 = Debug|x86
12 | Release|Any CPU = Release|Any CPU
13 | Release|Mixed Platforms = Release|Mixed Platforms
14 | Release|Win32 = Release|Win32
15 | Release|x86 = Release|x86
16 | EndGlobalSection
17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution
18 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Debug|Any CPU.ActiveCfg = Debug|x86
19 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Debug|Mixed Platforms.ActiveCfg = Debug|x86
20 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Debug|Mixed Platforms.Build.0 = Debug|x86
21 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Debug|Win32.ActiveCfg = Debug|x86
22 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Debug|x86.ActiveCfg = Debug|x86
23 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Debug|x86.Build.0 = Debug|x86
24 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Release|Any CPU.ActiveCfg = Release|x86
25 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Release|Mixed Platforms.ActiveCfg = Release|x86
26 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Release|Mixed Platforms.Build.0 = Release|x86
27 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Release|Win32.ActiveCfg = Release|x86
28 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Release|x86.ActiveCfg = Release|x86
29 | {CDB26016-FC77-403F-B22A-A011F8622FCF}.Release|x86.Build.0 = Release|x86
30 | EndGlobalSection
31 | GlobalSection(SolutionProperties) = preSolution
32 | HideSolutionNode = FALSE
33 | EndGlobalSection
34 | EndGlobal
35 |
--------------------------------------------------------------------------------
/MifareOneTool/Program.cs:
--------------------------------------------------------------------------------
1 | using MifareOneTool.Properties;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Windows.Forms;
6 | using System.Diagnostics;
7 | using System.Reflection;
8 |
9 | namespace MifareOneTool
10 | {
11 | static class Program
12 | {
13 | ///
14 | /// 应用程序的主入口点。
15 | ///
16 | [STAThread]
17 | static void Main()
18 | {
19 | if (Properties.Settings.Default.MultiMode)
20 | {
21 | Application.EnableVisualStyles();
22 | Application.SetCompatibleTextRenderingDefault(false);
23 | Application.Run(new Form1());
24 | }
25 | else
26 | {
27 | bool ret;
28 | System.Threading.Mutex mutex = new System.Threading.Mutex(true, Application.ProductName, out ret);
29 | if (ret)
30 | {
31 | Application.EnableVisualStyles();
32 | Application.SetCompatibleTextRenderingDefault(false);
33 | Application.Run(new Form1());
34 | mutex.ReleaseMutex();
35 | }
36 | else
37 | {
38 | if (MessageBox.Show(Resources.您已经运行了MifareOne_Tool_打开多个本程序可能, Resources.您正在试图重复运行, MessageBoxButtons.OKCancel, MessageBoxIcon.Warning) == DialogResult.OK)
39 | {
40 | Application.EnableVisualStyles();
41 | Application.SetCompatibleTextRenderingDefault(false);
42 | Application.Run(new Form1());
43 | mutex.ReleaseMutex();
44 | }
45 | else
46 | {
47 | Application.Exit();
48 | }
49 | }
50 | }
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/MifareOneTool/Properties/Settings.settings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | xcicode/MifareOneTool
7 |
8 |
9 | True
10 |
11 |
12 | True
13 |
14 |
15 | True
16 |
17 |
18 | 192, 255, 255
19 |
20 |
21 | 9
22 |
23 |
24 | False
25 |
26 |
27 | False
28 |
29 |
30 | False
31 |
32 |
33 | ffffffffffff
34 |
35 |
36 | True
37 |
38 |
39 | False
40 |
41 |
42 | True
43 |
44 |
45 |
46 |
47 |
48 |
--------------------------------------------------------------------------------
/MifareOneTool/GitHubUpdate.cs:
--------------------------------------------------------------------------------
1 | using MifareOneTool.Properties;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Reflection;
7 | using Newtonsoft.Json;
8 | using Newtonsoft.Json.Linq;
9 | using System.Net;
10 | using System.IO;
11 |
12 | namespace MifareOneTool
13 | {
14 | class GitHubUpdate
15 | {
16 | public Version localVersion;
17 | public string remoteVersion=Resources.未知;
18 | public void Update(string GitHubR)
19 | {
20 | try
21 | {//.net4.5可用
22 | //处理HttpWebRequest访问https有安全证书的问题( 请求被中止: 未能创建 SSL/TLS 安全通道。)
23 | //System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
24 |
25 | var request = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/" + GitHubR + "/releases/latest");
26 | var response = (HttpWebResponse)request.GetResponse();
27 | var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
28 | JObject jo = JObject.Parse(responseString);
29 | if (jo.GetValue("message") == null)
30 | {
31 | dynamic json = Newtonsoft.Json.Linq.JToken.Parse(responseString) as dynamic;
32 | if (json.prerelease == false)
33 | {
34 | this.remoteVersion = (string)json.tag_name;
35 | }
36 | }
37 | else
38 | {
39 | Console.Error.WriteLine("GitHub更新失效");
40 | }
41 | }
42 | catch (Exception e)
43 | {
44 | Console.WriteLine(e.ToString());
45 | }
46 | }
47 | public GitHubUpdate(string GitHubR)
48 | {
49 | this.localVersion = Assembly.GetExecutingAssembly().GetName().Version;
50 | try
51 | {
52 | var request = (HttpWebRequest)WebRequest.Create("https://api.github.com/repos/" + GitHubR + "/releases/latest");
53 | var response = (HttpWebResponse)request.GetResponse();
54 | var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();
55 | JObject jo = JObject.Parse(responseString);
56 | if (jo.GetValue("message") == null)
57 | {
58 | dynamic json = Newtonsoft.Json.Linq.JToken.Parse(responseString) as dynamic;
59 | if(json.prerelease==false){
60 | this.remoteVersion=(string)json.tag_name;
61 | }
62 | }
63 | else
64 | {
65 | Console.Error.WriteLine("GitHub更新失效");
66 | }
67 | }
68 | catch (Exception ex)
69 | {
70 | System.Console.Error.WriteLine(ex.Message);
71 | }
72 | }
73 | }
74 | }
75 |
--------------------------------------------------------------------------------
/MifareOneTool/app.config:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | xcicode/MifareOneTool
15 |
16 |
17 |
18 |
19 |
20 |
21 | True
22 |
23 |
24 | True
25 |
26 |
27 | True
28 |
29 |
30 | 192, 255, 255
31 |
32 |
33 | 9
34 |
35 |
36 | False
37 |
38 |
39 | False
40 |
41 |
42 | False
43 |
44 |
45 | ffffffffffff
46 |
47 |
48 | True
49 |
50 |
51 | False
52 |
53 |
54 | True
55 |
56 |
57 |
58 |
59 |
60 |
61 |
--------------------------------------------------------------------------------
/MifareOneTool/FormHardNes.cs:
--------------------------------------------------------------------------------
1 | using MifareOneTool.Properties;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Data;
6 | using System.Drawing;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Windows.Forms;
10 | using System.Text.RegularExpressions;
11 |
12 | namespace MifareOneTool
13 | {
14 | public partial class FormHardNes : Form
15 | {
16 | public FormHardNes()
17 | {
18 | InitializeComponent();
19 | }
20 |
21 | static int getBlock(int sector)
22 | {//可能有bug
23 | int trailer_block = 0;
24 | if (sector < 32)
25 | {
26 | trailer_block = sector * 4 + 3;
27 | }
28 | else
29 | {
30 | trailer_block = 128 + 16 * (sector - 32) + 15;
31 | }
32 | return trailer_block;
33 | }
34 |
35 | public string GetArg()
36 | {
37 | string arg = "";
38 | arg += keyEdit.Text.ToUpper() + " ";
39 | arg += getBlock(Convert.ToInt32(sector1.Text.Trim())).ToString() + " ";
40 | arg += (radioKey1A.Checked ? "A" : "B") + " ";
41 | arg += getBlock(Convert.ToInt32(sector2.Text.Trim())).ToString() + " ";
42 | arg += radioKey2A.Checked ? "A" : "B";
43 | return arg;
44 | }
45 |
46 | public string GetFileAfter()
47 | {
48 | string a = "_";
49 | a += string.Format("{0:D3}", getBlock(Convert.ToInt32(sector2.Text.Trim())));
50 | a += radioKey2A.Checked ? "A" : "B";
51 | a += ".txt";
52 | return a;
53 | }
54 |
55 | public bool collectOnly()
56 | {
57 | return checkBoxColOnly.Checked;
58 | }
59 |
60 | private void button2_Click(object sender, EventArgs e)
61 | {
62 | this.DialogResult = DialogResult.Cancel;
63 | this.Close();
64 | }
65 |
66 | private void button1_Click(object sender, EventArgs e)
67 | {
68 | bool error = false;
69 | const string pattern = @"[0-9A-Fa-f]{12}";
70 | TextBox tb = keyEdit;
71 | string content = tb.Text.Trim();
72 | if (!(Regex.IsMatch(content, pattern) && content.Length == 12))
73 | {
74 | tb.BackColor = Color.Tomato;
75 | error = true;
76 | }
77 | else
78 | {
79 | tb.BackColor = Color.Aquamarine;
80 | tb.Text = content;
81 | }
82 | int sec1, sec2;
83 | if (!int.TryParse(sector1.Text, out sec1))
84 | {
85 | sector1.BackColor = Color.Tomato;
86 | error = true;
87 | }
88 | else
89 | {
90 | if (sec1 >= 0)
91 | {
92 | sector1.BackColor = Color.Aquamarine;
93 | }
94 | else
95 | {
96 | sector1.BackColor = Color.Tomato;
97 | error = true;
98 | }
99 | }
100 | if (!int.TryParse(sector2.Text, out sec2))
101 | {
102 | sector2.BackColor = Color.Tomato;
103 | error = true;
104 | }
105 | else
106 | {
107 | if (sec2 >= 0)
108 | {
109 | sector2.BackColor = Color.Aquamarine;
110 | }
111 | else
112 | {
113 | sector2.BackColor = Color.Tomato;
114 | error = true;
115 | }
116 | }
117 | if (error)
118 | {
119 | MessageBox.Show(Resources.设置错误_请修改);
120 | return;
121 | }
122 | this.DialogResult = DialogResult.Yes;
123 | this.Close();
124 | }
125 | }
126 | }
127 |
--------------------------------------------------------------------------------
/MifareOneTool/FormDiff.cs:
--------------------------------------------------------------------------------
1 | using MifareOneTool.Properties;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Data;
6 | using System.Drawing;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Windows.Forms;
10 | using System.IO;
11 |
12 | namespace MifareOneTool
13 | {
14 | public partial class FormDiff : Form
15 | {
16 | public FormDiff()
17 | {
18 | InitializeComponent();
19 | }
20 |
21 | private S50 sa = new S50();
22 | private S50 sb = new S50();
23 | private string fa = "";
24 | private string fb = "";
25 |
26 | private void button1_Click(object sender, EventArgs e)
27 | {
28 | OpenFileDialog ofd = new OpenFileDialog();
29 | ofd.CheckFileExists = true;
30 | ofd.Filter = Resources.MFD文件_mfd_dump;
31 | ofd.Title = Resources.请选择需要打开的MFD文件_比较A;
32 | ofd.Multiselect = false;
33 | if (ofd.ShowDialog() == DialogResult.OK)
34 | {
35 | fa = ofd.FileName;
36 | }
37 | else
38 | {
39 | return;
40 | }
41 | sa = new S50();
42 | try
43 | {
44 | sa.LoadFromMfd(fa);
45 | button1.Text = "A=" + ofd.SafeFileName;
46 | }
47 | catch (IOException ioe)
48 | {
49 | MessageBox.Show(ioe.Message, Resources.打开出错, MessageBoxButtons.OK, MessageBoxIcon.Error);
50 | sa = new S50();
51 | return;
52 | }
53 | }
54 |
55 | private void FormDiff_Load(object sender, EventArgs e)
56 | {
57 | }
58 | private void logAppend(string msg)
59 | {
60 | richTextBox1.AppendText(msg + "\n");
61 | richTextBox1.ScrollToCaret();
62 | }
63 |
64 | private void button2_Click(object sender, EventArgs e)
65 | {
66 | OpenFileDialog ofd = new OpenFileDialog();
67 | ofd.CheckFileExists = true;
68 | ofd.Filter = Resources.MFD文件_mfd_dump;
69 | ofd.Title = Resources.请选择需要打开的MFD文件_比较B;
70 | ofd.Multiselect = false;
71 | if (ofd.ShowDialog() == DialogResult.OK)
72 | {
73 | fb = ofd.FileName;
74 | }
75 | else
76 | {
77 | return;
78 | }
79 | sb = new S50();
80 | try
81 | {
82 | sb.LoadFromMfd(fb);
83 | button2.Text = "B=" + ofd.SafeFileName;
84 | }
85 | catch (IOException ioe)
86 | {
87 | MessageBox.Show(ioe.Message, Resources.打开出错, MessageBoxButtons.OK, MessageBoxIcon.Error);
88 | sb = new S50();
89 | return;
90 | }
91 | }
92 |
93 | private void button3_Click(object sender, EventArgs e)
94 | {
95 | if (File.Exists(fa) && File.Exists(fb))
96 | {
97 | richTextBox1.Clear();
98 | richTextBox1.Text = Compare();
99 | }
100 | else
101 | {
102 | logAppend(Resources.AB文件中一个或两个无效);
103 | }
104 | }
105 | private string Compare()
106 | {
107 | StringBuilder stb = new StringBuilder();
108 | int diffCount = 0;
109 | for (int i = 0; i < 16; i++)
110 | {
111 | stb.AppendLine("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
112 | stb.AppendLine(Resources.扇区0 + i.ToString());
113 | for (int a = 0; a < 4; a++)
114 | {
115 | string res = "";
116 | for (int b = 0; b < 16; b++)
117 | {
118 | if (sa.Sectors[i].Block[a][b] == sb.Sectors[i].Block[a][b])
119 | {
120 | res += "-- ";
121 | }
122 | else
123 | {
124 | res += "## ";
125 | }
126 | }
127 | stb.AppendLine("A: " + Utils.Hex2StrWithSpan(sa.Sectors[i].Block[a]));
128 | stb.AppendLine("B: " + Utils.Hex2StrWithSpan(sb.Sectors[i].Block[a]));
129 | stb.AppendLine(" " + res);
130 | if (res.Contains("##"))
131 | {
132 | diffCount++;
133 | }
134 | }
135 |
136 | }
137 | return Resources.共找到 + diffCount.ToString() + Resources._个块不同 + stb.ToString();
138 | }
139 |
140 | private void RichTextBox1_TextChanged(object sender, EventArgs e)
141 | {
142 |
143 | }
144 | }
145 | }
146 |
--------------------------------------------------------------------------------
/MifareOneTool/FormMFF08.cs:
--------------------------------------------------------------------------------
1 | using MifareOneTool.Properties;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.ComponentModel;
5 | using System.Data;
6 | using System.Drawing;
7 | using System.Linq;
8 | using System.Text;
9 | using System.Windows.Forms;
10 | using System.Diagnostics;
11 | using System.IO;
12 |
13 | namespace MifareOneTool
14 | {
15 | public partial class FormMFF08 : Form
16 | {
17 | public FormMFF08()
18 | {
19 | InitializeComponent();
20 | }
21 |
22 | private void buttonLoadKey_Click(object sender, EventArgs e)
23 | {
24 | OpenFileDialog ofd = new OpenFileDialog();
25 | ofd.CheckFileExists = true;
26 | ofd.Filter = Resources.MFD文件_mfd_DUMP文件_dump;
27 | ofd.Title = Resources.请选择最后一次写卡导致0块损坏的卡数据文件;
28 | ofd.Multiselect = false;
29 | if (ofd.ShowDialog() == DialogResult.OK)
30 | {
31 | keyfileBox.Text = ofd.FileName;
32 | }
33 | }
34 |
35 | private void buttonClr_Click(object sender, EventArgs e)
36 | {
37 | keyfileBox.Text = "";
38 | }
39 |
40 | bool lprocess = false;
41 | Process process;
42 |
43 | private void logAppend(string msg)
44 | {
45 | logBox.AppendText(msg + "\n");
46 | logBox.ScrollToCaret();
47 | }
48 |
49 | void default_rpt(object sender, ProgressChangedEventArgs e)
50 | {
51 | if (e.ProgressPercentage == 100)
52 | {
53 | logAppend((string)e.UserState);
54 | groupBox2.Enabled = true;
55 | }
56 | else if (e.ProgressPercentage == 1)
57 | {
58 | groupBox2.Enabled = false;
59 | }
60 | else
61 | {
62 | logAppend((string)e.UserState);
63 | }
64 | Application.DoEvents();
65 |
66 | }
67 |
68 | private void buttonWriteEmpty_Click(object sender, EventArgs e)
69 | {
70 | if (lprocess) { MessageBox.Show(Resources.有任务运行中_不可执行, Resources.设备忙, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; }
71 | S50 empty = new S50();
72 | empty.ExportToMfd("mff08_empty.kmf");
73 | BackgroundWorker bgw = new BackgroundWorker();
74 | bgw.DoWork += new DoWorkEventHandler(cmf_write);
75 | bgw.WorkerReportsProgress = true;
76 | bgw.ProgressChanged += new ProgressChangedEventHandler(default_rpt);
77 | bgw.RunWorkerAsync(new string[] { "mff08_empty.kmf", "A", "x", "" });
78 | }
79 |
80 | void cmf_write(object sender, DoWorkEventArgs e)
81 | {
82 | if (lprocess) { return; }
83 | ProcessStartInfo psi = new ProcessStartInfo("nfc-bin/mff08.exe");
84 | string[] args = (string[])e.Argument;
85 | psi.Arguments = "c " + args[1] + " u \"" + args[0] + "\"";
86 | if (args[3] != "" && args[2] == "")
87 | {
88 | psi.Arguments += " \"" + args[3] + "\" f";
89 | }
90 | psi.CreateNoWindow = true;
91 | psi.UseShellExecute = false;
92 | psi.RedirectStandardOutput = true;
93 | psi.RedirectStandardError = true;
94 | lprocess = true;
95 | BackgroundWorker b = (BackgroundWorker)sender;
96 | b.ReportProgress(1);
97 | process = Process.Start(psi);
98 | process.OutputDataReceived += (s, _e) => b.ReportProgress(0, _e.Data);
99 | process.ErrorDataReceived += (s, _e) => b.ReportProgress(0, _e.Data);
100 | //StreamReader stderr = process.StandardError;
101 | process.BeginOutputReadLine();
102 | process.BeginErrorReadLine();
103 | process.WaitForExit();
104 | lprocess = false;
105 | b.ReportProgress(100, Resources._运行完毕);
106 | }
107 |
108 | private void buttonKeyWrite_Click(object sender, EventArgs e)
109 | {
110 | if (lprocess) { MessageBox.Show(Resources.有任务运行中_不可执行, Resources.设备忙, MessageBoxButtons.OK, MessageBoxIcon.Warning); return; }
111 | S50 empty = new S50();
112 | empty.ExportToMfd("mff08_empty.kmf");
113 | if (keyfileBox.Text == "")
114 | {
115 | MessageBox.Show(Resources.您没有给定最后一次写卡导致0块损坏的卡数据文件来作为写卡时的, Resources.错误, MessageBoxButtons.OK, MessageBoxIcon.Error);
116 | return;
117 | }
118 | BackgroundWorker bgw = new BackgroundWorker();
119 | bgw.DoWork += new DoWorkEventHandler(cmf_write);
120 | bgw.WorkerReportsProgress = true;
121 | bgw.ProgressChanged += new ProgressChangedEventHandler(default_rpt);
122 | bgw.RunWorkerAsync(new string[] { "mff08_empty.kmf", "C", "", keyfileBox.Text });
123 | }
124 |
125 | private void FormMFF08_Load(object sender, EventArgs e)
126 | {
127 | if (!File.Exists("nfc-bin/mff08.exe"))
128 | {
129 | MessageBox.Show(Resources.无法找到MFF08程序文件_操作终止, Resources.错误, MessageBoxButtons.OK, MessageBoxIcon.Error);
130 | }
131 | }
132 | }
133 | }
134 |
--------------------------------------------------------------------------------
/MifareOneTool/FormDiff.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MifareOneTool
2 | {
3 | partial class FormDiff
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormDiff));
32 | this.richTextBox1 = new System.Windows.Forms.RichTextBox();
33 | this.button1 = new System.Windows.Forms.Button();
34 | this.button2 = new System.Windows.Forms.Button();
35 | this.button3 = new System.Windows.Forms.Button();
36 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
37 | this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
38 | this.flowLayoutPanel2 = new System.Windows.Forms.FlowLayoutPanel();
39 | this.tableLayoutPanel1.SuspendLayout();
40 | this.flowLayoutPanel1.SuspendLayout();
41 | this.flowLayoutPanel2.SuspendLayout();
42 | this.SuspendLayout();
43 | //
44 | // richTextBox1
45 | //
46 | this.richTextBox1.BackColor = System.Drawing.Color.Black;
47 | resources.ApplyResources(this.richTextBox1, "richTextBox1");
48 | this.richTextBox1.ForeColor = System.Drawing.Color.Orange;
49 | this.richTextBox1.Name = "richTextBox1";
50 | this.richTextBox1.ReadOnly = true;
51 | this.richTextBox1.TextChanged += new System.EventHandler(this.RichTextBox1_TextChanged);
52 | //
53 | // button1
54 | //
55 | resources.ApplyResources(this.button1, "button1");
56 | this.button1.Name = "button1";
57 | this.button1.UseVisualStyleBackColor = true;
58 | this.button1.Click += new System.EventHandler(this.button1_Click);
59 | //
60 | // button2
61 | //
62 | resources.ApplyResources(this.button2, "button2");
63 | this.button2.Name = "button2";
64 | this.button2.UseVisualStyleBackColor = true;
65 | this.button2.Click += new System.EventHandler(this.button2_Click);
66 | //
67 | // button3
68 | //
69 | resources.ApplyResources(this.button3, "button3");
70 | this.button3.Name = "button3";
71 | this.button3.UseVisualStyleBackColor = true;
72 | this.button3.Click += new System.EventHandler(this.button3_Click);
73 | //
74 | // tableLayoutPanel1
75 | //
76 | resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
77 | this.tableLayoutPanel1.Controls.Add(this.flowLayoutPanel1, 0, 0);
78 | this.tableLayoutPanel1.Controls.Add(this.button3, 1, 0);
79 | this.tableLayoutPanel1.Name = "tableLayoutPanel1";
80 | //
81 | // flowLayoutPanel1
82 | //
83 | resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1");
84 | this.flowLayoutPanel1.Controls.Add(this.button1);
85 | this.flowLayoutPanel1.Controls.Add(this.button2);
86 | this.flowLayoutPanel1.Name = "flowLayoutPanel1";
87 | //
88 | // flowLayoutPanel2
89 | //
90 | resources.ApplyResources(this.flowLayoutPanel2, "flowLayoutPanel2");
91 | this.flowLayoutPanel2.Controls.Add(this.tableLayoutPanel1);
92 | this.flowLayoutPanel2.Controls.Add(this.richTextBox1);
93 | this.flowLayoutPanel2.Name = "flowLayoutPanel2";
94 | //
95 | // FormDiff
96 | //
97 | this.AcceptButton = this.button3;
98 | resources.ApplyResources(this, "$this");
99 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
100 | this.Controls.Add(this.flowLayoutPanel2);
101 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
102 | this.MaximizeBox = false;
103 | this.Name = "FormDiff";
104 | this.Load += new System.EventHandler(this.FormDiff_Load);
105 | this.tableLayoutPanel1.ResumeLayout(false);
106 | this.tableLayoutPanel1.PerformLayout();
107 | this.flowLayoutPanel1.ResumeLayout(false);
108 | this.flowLayoutPanel2.ResumeLayout(false);
109 | this.flowLayoutPanel2.PerformLayout();
110 | this.ResumeLayout(false);
111 | this.PerformLayout();
112 |
113 | }
114 |
115 | #endregion
116 |
117 | private System.Windows.Forms.RichTextBox richTextBox1;
118 | private System.Windows.Forms.Button button1;
119 | private System.Windows.Forms.Button button2;
120 | private System.Windows.Forms.Button button3;
121 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
122 | private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
123 | private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel2;
124 | }
125 | }
--------------------------------------------------------------------------------
/MifareOneTool/SelectLanguage.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
--------------------------------------------------------------------------------
/MifareOneTool/FormDiff.zh.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | A
122 |
123 |
124 | B
125 |
126 |
127 | 比较
128 |
129 |
130 | DiffTool
131 |
132 |
133 | 欢迎使用M1T内置的差异工具!
134 |
135 |
136 | 说明:
137 |
138 |
139 | 点击上方的AB两个按键分别选择MFD文件。
140 |
141 |
142 | 然后点击“比较”即可看到结果。
143 |
144 |
145 | 欢迎使用M1T内置的差异工具!
146 | 说明:
147 | 点击上方的AB两个按键分别选择MFD文件。
148 | 然后点击“比较”即可看到结果。
149 |
150 |
151 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Ignore Visual Studio temporary files, build results, and
2 | ## files generated by popular Visual Studio add-ons.
3 | ##
4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
5 |
6 | # User-specific files
7 | *.suo
8 | *.user
9 | *.userosscache
10 | *.sln.docstates
11 |
12 | # User-specific files (MonoDevelop/Xamarin Studio)
13 | *.userprefs
14 |
15 | # Build results
16 | [Dd]ebug/
17 | [Dd]ebugPublic/
18 | [Rr]elease/
19 | [Rr]eleases/
20 | x64/
21 | x86/
22 | bld/
23 | [Bb]in/
24 | [Oo]bj/
25 | [Ll]og/
26 |
27 | # Visual Studio 2015/2017 cache/options directory
28 | .vs/
29 | # Uncomment if you have tasks that create the project's static files in wwwroot
30 | #wwwroot/
31 |
32 | # Visual Studio 2017 auto generated files
33 | Generated\ Files/
34 |
35 | # MSTest test Results
36 | [Tt]est[Rr]esult*/
37 | [Bb]uild[Ll]og.*
38 |
39 | # NUNIT
40 | *.VisualState.xml
41 | TestResult.xml
42 |
43 | # Build Results of an ATL Project
44 | [Dd]ebugPS/
45 | [Rr]eleasePS/
46 | dlldata.c
47 |
48 | # Benchmark Results
49 | BenchmarkDotNet.Artifacts/
50 |
51 | # .NET Core
52 | project.lock.json
53 | project.fragment.lock.json
54 | artifacts/
55 | **/Properties/launchSettings.json
56 |
57 | # StyleCop
58 | StyleCopReport.xml
59 |
60 | # Files built by Visual Studio
61 | *_i.c
62 | *_p.c
63 | *_i.h
64 | *.ilk
65 | *.meta
66 | *.obj
67 | *.iobj
68 | *.pch
69 | *.pdb
70 | *.ipdb
71 | *.pgc
72 | *.pgd
73 | *.rsp
74 | *.sbr
75 | *.tlb
76 | *.tli
77 | *.tlh
78 | *.tmp
79 | *.tmp_proj
80 | *.log
81 | *.vspscc
82 | *.vssscc
83 | .builds
84 | *.pidb
85 | *.svclog
86 | *.scc
87 |
88 | # Chutzpah Test files
89 | _Chutzpah*
90 |
91 | # Visual C++ cache files
92 | ipch/
93 | *.aps
94 | *.ncb
95 | *.opendb
96 | *.opensdf
97 | *.sdf
98 | *.cachefile
99 | *.VC.db
100 | *.VC.VC.opendb
101 |
102 | # Visual Studio profiler
103 | *.psess
104 | *.vsp
105 | *.vspx
106 | *.sap
107 |
108 | # Visual Studio Trace Files
109 | *.e2e
110 |
111 | # TFS 2012 Local Workspace
112 | $tf/
113 |
114 | # Guidance Automation Toolkit
115 | *.gpState
116 |
117 | # ReSharper is a .NET coding add-in
118 | _ReSharper*/
119 | *.[Rr]e[Ss]harper
120 | *.DotSettings.user
121 |
122 | # JustCode is a .NET coding add-in
123 | .JustCode
124 |
125 | # TeamCity is a build add-in
126 | _TeamCity*
127 |
128 | # DotCover is a Code Coverage Tool
129 | *.dotCover
130 |
131 | # AxoCover is a Code Coverage Tool
132 | .axoCover/*
133 | !.axoCover/settings.json
134 |
135 | # Visual Studio code coverage results
136 | *.coverage
137 | *.coveragexml
138 |
139 | # NCrunch
140 | _NCrunch_*
141 | .*crunch*.local.xml
142 | nCrunchTemp_*
143 |
144 | # MightyMoose
145 | *.mm.*
146 | AutoTest.Net/
147 |
148 | # Web workbench (sass)
149 | .sass-cache/
150 |
151 | # Installshield output folder
152 | [Ee]xpress/
153 |
154 | # DocProject is a documentation generator add-in
155 | DocProject/buildhelp/
156 | DocProject/Help/*.HxT
157 | DocProject/Help/*.HxC
158 | DocProject/Help/*.hhc
159 | DocProject/Help/*.hhk
160 | DocProject/Help/*.hhp
161 | DocProject/Help/Html2
162 | DocProject/Help/html
163 |
164 | # Click-Once directory
165 | publish/
166 |
167 | # Publish Web Output
168 | *.[Pp]ublish.xml
169 | *.azurePubxml
170 | # Note: Comment the next line if you want to checkin your web deploy settings,
171 | # but database connection strings (with potential passwords) will be unencrypted
172 | *.pubxml
173 | *.publishproj
174 |
175 | # Microsoft Azure Web App publish settings. Comment the next line if you want to
176 | # checkin your Azure Web App publish settings, but sensitive information contained
177 | # in these scripts will be unencrypted
178 | PublishScripts/
179 |
180 | # NuGet Packages
181 | *.nupkg
182 | # The packages folder can be ignored because of Package Restore
183 | **/[Pp]ackages/*
184 | # except build/, which is used as an MSBuild target.
185 | !**/[Pp]ackages/build/
186 | # Uncomment if necessary however generally it will be regenerated when needed
187 | #!**/[Pp]ackages/repositories.config
188 | # NuGet v3's project.json files produces more ignorable files
189 | *.nuget.props
190 | *.nuget.targets
191 |
192 | # Microsoft Azure Build Output
193 | csx/
194 | *.build.csdef
195 |
196 | # Microsoft Azure Emulator
197 | ecf/
198 | rcf/
199 |
200 | # Windows Store app package directories and files
201 | AppPackages/
202 | BundleArtifacts/
203 | Package.StoreAssociation.xml
204 | _pkginfo.txt
205 | *.appx
206 |
207 | # Visual Studio cache files
208 | # files ending in .cache can be ignored
209 | *.[Cc]ache
210 | # but keep track of directories ending in .cache
211 | !*.[Cc]ache/
212 |
213 | # Others
214 | ClientBin/
215 | ~$*
216 | *~
217 | *.dbmdl
218 | *.dbproj.schemaview
219 | *.jfm
220 | *.pfx
221 | *.publishsettings
222 | orleans.codegen.cs
223 |
224 | # Including strong name files can present a security risk
225 | # (https://github.com/github/gitignore/pull/2483#issue-259490424)
226 | #*.snk
227 |
228 | # Since there are multiple workflows, uncomment next line to ignore bower_components
229 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
230 | #bower_components/
231 |
232 | # RIA/Silverlight projects
233 | Generated_Code/
234 |
235 | # Backup & report files from converting an old project file
236 | # to a newer Visual Studio version. Backup files are not needed,
237 | # because we have git ;-)
238 | _UpgradeReport_Files/
239 | Backup*/
240 | UpgradeLog*.XML
241 | UpgradeLog*.htm
242 | ServiceFabricBackup/
243 | *.rptproj.bak
244 |
245 | # SQL Server files
246 | *.mdf
247 | *.ldf
248 | *.ndf
249 |
250 | # Business Intelligence projects
251 | *.rdl.data
252 | *.bim.layout
253 | *.bim_*.settings
254 | *.rptproj.rsuser
255 |
256 | # Microsoft Fakes
257 | FakesAssemblies/
258 |
259 | # GhostDoc plugin setting file
260 | *.GhostDoc.xml
261 |
262 | # Node.js Tools for Visual Studio
263 | .ntvs_analysis.dat
264 | node_modules/
265 |
266 | # Visual Studio 6 build log
267 | *.plg
268 |
269 | # Visual Studio 6 workspace options file
270 | *.opt
271 |
272 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
273 | *.vbw
274 |
275 | # Visual Studio LightSwitch build output
276 | **/*.HTMLClient/GeneratedArtifacts
277 | **/*.DesktopClient/GeneratedArtifacts
278 | **/*.DesktopClient/ModelManifest.xml
279 | **/*.Server/GeneratedArtifacts
280 | **/*.Server/ModelManifest.xml
281 | _Pvt_Extensions
282 |
283 | # Paket dependency manager
284 | .paket/paket.exe
285 | paket-files/
286 |
287 | # FAKE - F# Make
288 | .fake/
289 |
290 | # JetBrains Rider
291 | .idea/
292 | *.sln.iml
293 |
294 | # CodeRush
295 | .cr/
296 |
297 | # Python Tools for Visual Studio (PTVS)
298 | __pycache__/
299 | *.pyc
300 |
301 | # Cake - Uncomment if you are using it
302 | # tools/**
303 | # !tools/packages.config
304 |
305 | # Tabs Studio
306 | *.tss
307 |
308 | # Telerik's JustMock configuration file
309 | *.jmconfig
310 |
311 | # BizTalk build output
312 | *.btp.cs
313 | *.btm.cs
314 | *.odx.cs
315 | *.xsd.cs
316 |
317 | # OpenCover UI analysis results
318 | OpenCover/
319 |
320 | # Azure Stream Analytics local run output
321 | ASALocalRun/
322 |
323 | # MSBuild Binary and Structured Log
324 | *.binlog
325 |
326 | # NVidia Nsight GPU debugger configuration file
327 | *.nvuser
328 |
329 | # MFractors (Xamarin productivity tool) working folder
330 | .mfractor/
331 |
332 | nfc-bin.zip
333 | DirectOP/
334 |
--------------------------------------------------------------------------------
/MifareOneTool/FormDiff.ru.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | A
122 |
123 |
124 | В
125 |
126 |
127 | Сравнить
128 |
129 |
130 | Сравнение дампов
131 |
132 |
133 | Добро пожаловать во встроенный инструмент различий M1T!
134 |
135 |
136 | Описание:
137 |
138 |
139 | Нажмите две кнопки AB выше, чтобы выбрать файл MFD.
140 |
141 |
142 | Затем нажмите «Сравнить», чтобы увидеть результаты.
143 |
144 |
145 | Добро пожаловать во встроенный инструмент сравнения дампов!
146 | Описание:
147 | 1. Нажмите А или В, чтобы выбрать файл MFD.
148 | 2. Нажмите «Сравнить», чтобы увидеть результаты.
149 |
150 |
--------------------------------------------------------------------------------
/MifareOneTool/FormMFF08.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MifareOneTool
2 | {
3 | partial class FormMFF08
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormMFF08));
32 | this.groupBox1 = new System.Windows.Forms.GroupBox();
33 | this.label1 = new System.Windows.Forms.Label();
34 | this.groupBox2 = new System.Windows.Forms.GroupBox();
35 | this.buttonClr = new System.Windows.Forms.Button();
36 | this.buttonLoadKey = new System.Windows.Forms.Button();
37 | this.keyfileBox = new System.Windows.Forms.TextBox();
38 | this.label2 = new System.Windows.Forms.Label();
39 | this.buttonKeyWrite = new System.Windows.Forms.Button();
40 | this.buttonWriteEmpty = new System.Windows.Forms.Button();
41 | this.groupBox3 = new System.Windows.Forms.GroupBox();
42 | this.logBox = new System.Windows.Forms.RichTextBox();
43 | this.groupBox1.SuspendLayout();
44 | this.groupBox2.SuspendLayout();
45 | this.groupBox3.SuspendLayout();
46 | this.SuspendLayout();
47 | //
48 | // groupBox1
49 | //
50 | this.groupBox1.Controls.Add(this.label1);
51 | resources.ApplyResources(this.groupBox1, "groupBox1");
52 | this.groupBox1.Name = "groupBox1";
53 | this.groupBox1.TabStop = false;
54 | //
55 | // label1
56 | //
57 | resources.ApplyResources(this.label1, "label1");
58 | this.label1.ForeColor = System.Drawing.Color.Blue;
59 | this.label1.Name = "label1";
60 | //
61 | // groupBox2
62 | //
63 | this.groupBox2.Controls.Add(this.buttonClr);
64 | this.groupBox2.Controls.Add(this.buttonLoadKey);
65 | this.groupBox2.Controls.Add(this.keyfileBox);
66 | this.groupBox2.Controls.Add(this.label2);
67 | this.groupBox2.Controls.Add(this.buttonKeyWrite);
68 | this.groupBox2.Controls.Add(this.buttonWriteEmpty);
69 | resources.ApplyResources(this.groupBox2, "groupBox2");
70 | this.groupBox2.Name = "groupBox2";
71 | this.groupBox2.TabStop = false;
72 | //
73 | // buttonClr
74 | //
75 | resources.ApplyResources(this.buttonClr, "buttonClr");
76 | this.buttonClr.Name = "buttonClr";
77 | this.buttonClr.UseVisualStyleBackColor = true;
78 | this.buttonClr.Click += new System.EventHandler(this.buttonClr_Click);
79 | //
80 | // buttonLoadKey
81 | //
82 | resources.ApplyResources(this.buttonLoadKey, "buttonLoadKey");
83 | this.buttonLoadKey.Name = "buttonLoadKey";
84 | this.buttonLoadKey.UseVisualStyleBackColor = true;
85 | this.buttonLoadKey.Click += new System.EventHandler(this.buttonLoadKey_Click);
86 | //
87 | // keyfileBox
88 | //
89 | resources.ApplyResources(this.keyfileBox, "keyfileBox");
90 | this.keyfileBox.Name = "keyfileBox";
91 | //
92 | // label2
93 | //
94 | resources.ApplyResources(this.label2, "label2");
95 | this.label2.Name = "label2";
96 | //
97 | // buttonKeyWrite
98 | //
99 | resources.ApplyResources(this.buttonKeyWrite, "buttonKeyWrite");
100 | this.buttonKeyWrite.Name = "buttonKeyWrite";
101 | this.buttonKeyWrite.UseVisualStyleBackColor = true;
102 | this.buttonKeyWrite.Click += new System.EventHandler(this.buttonKeyWrite_Click);
103 | //
104 | // buttonWriteEmpty
105 | //
106 | resources.ApplyResources(this.buttonWriteEmpty, "buttonWriteEmpty");
107 | this.buttonWriteEmpty.Name = "buttonWriteEmpty";
108 | this.buttonWriteEmpty.UseVisualStyleBackColor = true;
109 | this.buttonWriteEmpty.Click += new System.EventHandler(this.buttonWriteEmpty_Click);
110 | //
111 | // groupBox3
112 | //
113 | this.groupBox3.Controls.Add(this.logBox);
114 | resources.ApplyResources(this.groupBox3, "groupBox3");
115 | this.groupBox3.Name = "groupBox3";
116 | this.groupBox3.TabStop = false;
117 | //
118 | // logBox
119 | //
120 | this.logBox.BackColor = System.Drawing.Color.Black;
121 | resources.ApplyResources(this.logBox, "logBox");
122 | this.logBox.ForeColor = System.Drawing.Color.Gold;
123 | this.logBox.Name = "logBox";
124 | this.logBox.ReadOnly = true;
125 | //
126 | // FormMFF08
127 | //
128 | resources.ApplyResources(this, "$this");
129 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
130 | this.Controls.Add(this.groupBox3);
131 | this.Controls.Add(this.groupBox2);
132 | this.Controls.Add(this.groupBox1);
133 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
134 | this.MaximizeBox = false;
135 | this.Name = "FormMFF08";
136 | this.Load += new System.EventHandler(this.FormMFF08_Load);
137 | this.groupBox1.ResumeLayout(false);
138 | this.groupBox1.PerformLayout();
139 | this.groupBox2.ResumeLayout(false);
140 | this.groupBox2.PerformLayout();
141 | this.groupBox3.ResumeLayout(false);
142 | this.ResumeLayout(false);
143 |
144 | }
145 |
146 | #endregion
147 |
148 | private System.Windows.Forms.GroupBox groupBox1;
149 | private System.Windows.Forms.Label label1;
150 | private System.Windows.Forms.GroupBox groupBox2;
151 | private System.Windows.Forms.Button buttonLoadKey;
152 | private System.Windows.Forms.TextBox keyfileBox;
153 | private System.Windows.Forms.Label label2;
154 | private System.Windows.Forms.Button buttonKeyWrite;
155 | private System.Windows.Forms.Button buttonWriteEmpty;
156 | private System.Windows.Forms.GroupBox groupBox3;
157 | private System.Windows.Forms.RichTextBox logBox;
158 | private System.Windows.Forms.Button buttonClr;
159 | }
160 | }
--------------------------------------------------------------------------------
/MifareOneTool/Properties/Settings.Designer.cs:
--------------------------------------------------------------------------------
1 | //------------------------------------------------------------------------------
2 | //
3 | // Этот код создан программой.
4 | // Исполняемая версия:4.0.30319.42000
5 | //
6 | // Изменения в этом файле могут привести к неправильной работе и будут потеряны в случае
7 | // повторной генерации кода.
8 | //
9 | //------------------------------------------------------------------------------
10 |
11 | namespace MifareOneTool.Properties {
12 |
13 |
14 | [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
15 | [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "16.0.0.0")]
16 | internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
17 |
18 | private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
19 |
20 | public static Settings Default {
21 | get {
22 | return defaultInstance;
23 | }
24 | }
25 |
26 | [global::System.Configuration.ApplicationScopedSettingAttribute()]
27 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
28 | [global::System.Configuration.DefaultSettingValueAttribute("xcicode/MifareOneTool")]
29 | public string GitHubR {
30 | get {
31 | return ((string)(this["GitHubR"]));
32 | }
33 | }
34 |
35 | [global::System.Configuration.UserScopedSettingAttribute()]
36 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
37 | [global::System.Configuration.DefaultSettingValueAttribute("True")]
38 | public bool AutoABN {
39 | get {
40 | return ((bool)(this["AutoABN"]));
41 | }
42 | set {
43 | this["AutoABN"] = value;
44 | }
45 | }
46 |
47 | [global::System.Configuration.UserScopedSettingAttribute()]
48 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
49 | [global::System.Configuration.DefaultSettingValueAttribute("True")]
50 | public bool WriteCheck {
51 | get {
52 | return ((bool)(this["WriteCheck"]));
53 | }
54 | set {
55 | this["WriteCheck"] = value;
56 | }
57 | }
58 |
59 | [global::System.Configuration.UserScopedSettingAttribute()]
60 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
61 | [global::System.Configuration.DefaultSettingValueAttribute("True")]
62 | public bool AutoLoadUidKey {
63 | get {
64 | return ((bool)(this["AutoLoadUidKey"]));
65 | }
66 | set {
67 | this["AutoLoadUidKey"] = value;
68 | }
69 | }
70 |
71 | [global::System.Configuration.UserScopedSettingAttribute()]
72 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
73 | [global::System.Configuration.DefaultSettingValueAttribute("192, 255, 255")]
74 | public global::System.Drawing.Color MainCLIColor {
75 | get {
76 | return ((global::System.Drawing.Color)(this["MainCLIColor"]));
77 | }
78 | set {
79 | this["MainCLIColor"] = value;
80 | }
81 | }
82 |
83 | [global::System.Configuration.UserScopedSettingAttribute()]
84 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
85 | [global::System.Configuration.DefaultSettingValueAttribute("9")]
86 | public float MainCLIFontSize {
87 | get {
88 | return ((float)(this["MainCLIFontSize"]));
89 | }
90 | set {
91 | this["MainCLIFontSize"] = value;
92 | }
93 | }
94 |
95 | [global::System.Configuration.UserScopedSettingAttribute()]
96 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
97 | [global::System.Configuration.DefaultSettingValueAttribute("False")]
98 | public bool DefIsAdv {
99 | get {
100 | return ((bool)(this["DefIsAdv"]));
101 | }
102 | set {
103 | this["DefIsAdv"] = value;
104 | }
105 | }
106 |
107 | [global::System.Configuration.UserScopedSettingAttribute()]
108 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
109 | [global::System.Configuration.DefaultSettingValueAttribute("False")]
110 | public bool AutoSave {
111 | get {
112 | return ((bool)(this["AutoSave"]));
113 | }
114 | set {
115 | this["AutoSave"] = value;
116 | }
117 | }
118 |
119 | [global::System.Configuration.UserScopedSettingAttribute()]
120 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
121 | [global::System.Configuration.DefaultSettingValueAttribute("False")]
122 | public bool HardLowCost {
123 | get {
124 | return ((bool)(this["HardLowCost"]));
125 | }
126 | set {
127 | this["HardLowCost"] = value;
128 | }
129 | }
130 |
131 | [global::System.Configuration.UserScopedSettingAttribute()]
132 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
133 | [global::System.Configuration.DefaultSettingValueAttribute("ffffffffffff")]
134 | public string LastTryKey {
135 | get {
136 | return ((string)(this["LastTryKey"]));
137 | }
138 | set {
139 | this["LastTryKey"] = value;
140 | }
141 | }
142 |
143 | [global::System.Configuration.UserScopedSettingAttribute()]
144 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
145 | [global::System.Configuration.DefaultSettingValueAttribute("True")]
146 | public bool NewScan {
147 | get {
148 | return ((bool)(this["NewScan"]));
149 | }
150 | set {
151 | this["NewScan"] = value;
152 | }
153 | }
154 |
155 | [global::System.Configuration.UserScopedSettingAttribute()]
156 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
157 | [global::System.Configuration.DefaultSettingValueAttribute("False")]
158 | public bool MultiMode {
159 | get {
160 | return ((bool)(this["MultiMode"]));
161 | }
162 | set {
163 | this["MultiMode"] = value;
164 | }
165 | }
166 |
167 | [global::System.Configuration.UserScopedSettingAttribute()]
168 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
169 | [global::System.Configuration.DefaultSettingValueAttribute("True")]
170 | public bool CuidKeyOver {
171 | get {
172 | return ((bool)(this["CuidKeyOver"]));
173 | }
174 | set {
175 | this["CuidKeyOver"] = value;
176 | }
177 | }
178 |
179 | [global::System.Configuration.UserScopedSettingAttribute()]
180 | [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
181 | [global::System.Configuration.DefaultSettingValueAttribute("")]
182 | public string Language {
183 | get {
184 | return ((string)(this["Language"]));
185 | }
186 | set {
187 | this["Language"] = value;
188 | }
189 | }
190 | }
191 | }
192 |
--------------------------------------------------------------------------------
/MifareOneTool/SelectLanguage.designer.cs:
--------------------------------------------------------------------------------
1 | namespace MultiLang
2 | {
3 | partial class SelectLanguage
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | this.rbSelected = new System.Windows.Forms.RadioButton();
32 | this.rbShow = new System.Windows.Forms.RadioButton();
33 | this.lblStartup = new System.Windows.Forms.Label();
34 | this.rbDefault = new System.Windows.Forms.RadioButton();
35 | this.lstCultures = new System.Windows.Forms.ListBox();
36 | this.btOK = new System.Windows.Forms.Button();
37 | this.Panel1 = new System.Windows.Forms.Panel();
38 | this.Panel1.SuspendLayout();
39 | this.SuspendLayout();
40 | //
41 | // rbSelected
42 | //
43 | this.rbSelected.AccessibleDescription = "";
44 | this.rbSelected.AccessibleName = "";
45 | this.rbSelected.FlatStyle = System.Windows.Forms.FlatStyle.System;
46 | this.rbSelected.ImeMode = System.Windows.Forms.ImeMode.NoControl;
47 | this.rbSelected.Location = new System.Drawing.Point(4, 40);
48 | this.rbSelected.Name = "rbSelected";
49 | this.rbSelected.Size = new System.Drawing.Size(209, 20);
50 | this.rbSelected.TabIndex = 2;
51 | this.rbSelected.Text = "Use the selected language";
52 | this.rbSelected.CheckedChanged += new System.EventHandler(this.OnStartup_CheckedChanged);
53 | //
54 | // rbShow
55 | //
56 | this.rbShow.AccessibleDescription = "";
57 | this.rbShow.AccessibleName = "";
58 | this.rbShow.Checked = true;
59 | this.rbShow.FlatStyle = System.Windows.Forms.FlatStyle.System;
60 | this.rbShow.ImeMode = System.Windows.Forms.ImeMode.NoControl;
61 | this.rbShow.Location = new System.Drawing.Point(4, 20);
62 | this.rbShow.Name = "rbShow";
63 | this.rbShow.Size = new System.Drawing.Size(209, 20);
64 | this.rbShow.TabIndex = 1;
65 | this.rbShow.TabStop = true;
66 | this.rbShow.Text = "Show this form again";
67 | this.rbShow.CheckedChanged += new System.EventHandler(this.OnStartup_CheckedChanged);
68 | //
69 | // lblStartup
70 | //
71 | this.lblStartup.AccessibleDescription = "";
72 | this.lblStartup.AccessibleName = "";
73 | this.lblStartup.ImeMode = System.Windows.Forms.ImeMode.NoControl;
74 | this.lblStartup.Location = new System.Drawing.Point(4, 3);
75 | this.lblStartup.Name = "lblStartup";
76 | this.lblStartup.Size = new System.Drawing.Size(209, 17);
77 | this.lblStartup.TabIndex = 0;
78 | this.lblStartup.Text = "Next time ...";
79 | //
80 | // rbDefault
81 | //
82 | this.rbDefault.AccessibleDescription = "";
83 | this.rbDefault.AccessibleName = "";
84 | this.rbDefault.FlatStyle = System.Windows.Forms.FlatStyle.System;
85 | this.rbDefault.ImeMode = System.Windows.Forms.ImeMode.NoControl;
86 | this.rbDefault.Location = new System.Drawing.Point(4, 60);
87 | this.rbDefault.Name = "rbDefault";
88 | this.rbDefault.Size = new System.Drawing.Size(209, 20);
89 | this.rbDefault.TabIndex = 3;
90 | this.rbDefault.Text = "Use the default language";
91 | this.rbDefault.CheckedChanged += new System.EventHandler(this.OnStartup_CheckedChanged);
92 | //
93 | // lstCultures
94 | //
95 | this.lstCultures.AccessibleDescription = "";
96 | this.lstCultures.AccessibleName = "";
97 | this.lstCultures.DisplayMember = "NativeName";
98 | this.lstCultures.Font = new System.Drawing.Font("Arial", 9.75F);
99 | this.lstCultures.IntegralHeight = false;
100 | this.lstCultures.ItemHeight = 16;
101 | this.lstCultures.Location = new System.Drawing.Point(4, 4);
102 | this.lstCultures.Name = "lstCultures";
103 | this.lstCultures.Size = new System.Drawing.Size(264, 220);
104 | this.lstCultures.TabIndex = 7;
105 | this.lstCultures.DoubleClick += new System.EventHandler(this.btOK_Click);
106 | //
107 | // btOK
108 | //
109 | this.btOK.AccessibleDescription = "";
110 | this.btOK.AccessibleName = "";
111 | this.btOK.ImeMode = System.Windows.Forms.ImeMode.NoControl;
112 | this.btOK.Location = new System.Drawing.Point(180, 316);
113 | this.btOK.Name = "btOK";
114 | this.btOK.Size = new System.Drawing.Size(90, 32);
115 | this.btOK.TabIndex = 8;
116 | this.btOK.Text = "OK";
117 | this.btOK.Click += new System.EventHandler(this.btOK_Click);
118 | //
119 | // Panel1
120 | //
121 | this.Panel1.AccessibleDescription = "";
122 | this.Panel1.AccessibleName = "";
123 | this.Panel1.BackColor = System.Drawing.SystemColors.Control;
124 | this.Panel1.Controls.Add(this.rbDefault);
125 | this.Panel1.Controls.Add(this.rbSelected);
126 | this.Panel1.Controls.Add(this.rbShow);
127 | this.Panel1.Controls.Add(this.lblStartup);
128 | this.Panel1.Location = new System.Drawing.Point(4, 228);
129 | this.Panel1.Name = "Panel1";
130 | this.Panel1.Size = new System.Drawing.Size(264, 84);
131 | this.Panel1.TabIndex = 9;
132 | //
133 | // SelectLanguage
134 | //
135 | this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
136 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
137 | this.ClientSize = new System.Drawing.Size(272, 352);
138 | this.Controls.Add(this.lstCultures);
139 | this.Controls.Add(this.btOK);
140 | this.Controls.Add(this.Panel1);
141 | this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
142 | this.Name = "SelectLanguage";
143 | this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
144 | this.Text = "SelectLanguage";
145 | this.Load += new System.EventHandler(this.SelectLanguage_Load);
146 | this.Panel1.ResumeLayout(false);
147 | this.ResumeLayout(false);
148 |
149 | }
150 |
151 | #endregion
152 |
153 | internal System.Windows.Forms.RadioButton rbSelected;
154 | internal System.Windows.Forms.RadioButton rbShow;
155 | internal System.Windows.Forms.Label lblStartup;
156 | internal System.Windows.Forms.RadioButton rbDefault;
157 | internal System.Windows.Forms.ListBox lstCultures;
158 | internal System.Windows.Forms.Button btOK;
159 | internal System.Windows.Forms.Panel Panel1;
160 | }
161 | }
--------------------------------------------------------------------------------
/MifareOneTool/FormHardNes.ru.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | Начать!
122 |
123 |
124 | Отмена
125 |
126 |
127 | Только сбор
128 | не засчитывается
129 |
130 |
131 | Расшифровка HardNested
132 |
133 |
134 | Известная информция о карте
135 |
136 |
137 | Настройка расшифровки сектора
138 |
139 |
140 | FFFFFFFFFFFF
141 |
142 |
143 | FFFFFFFFFFFF
144 |
145 |
146 | Обратите внимание на устройство
147 | при непрерывной работе!
148 |
149 |
150 | Известный ключ
151 |
152 |
153 | Номер сектора
154 |
155 |
156 | Тип ключа
157 |
158 |
159 | Тип ключа
160 |
161 |
162 | Номер сектора
163 |
164 |
165 | Ключ A
166 |
167 |
168 | Ключ B
169 |
170 |
171 | Ключ A
172 |
173 |
174 | Ключ B
175 |
176 |
--------------------------------------------------------------------------------
/MifareOneTool/FormHardNes.zh.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 执行!
122 |
123 |
124 | 取消
125 |
126 |
127 | 只采集不计算
128 |
129 |
130 | 初始化HardNested解密
131 |
132 |
133 | 目标卡-已知信息
134 |
135 |
136 | 目标扇区解密设置
137 |
138 |
139 | ffffffffffff
140 |
141 |
142 | ffffffffffff
143 |
144 |
145 | 连续工作时请注意设备散热!
146 |
147 |
148 | 已知的Key
149 |
150 |
151 | 扇区号
152 |
153 |
154 | 类型
155 |
156 |
157 | 类型
158 |
159 |
160 | 扇区号
161 |
162 |
163 | KeyA
164 |
165 |
166 | KeyB
167 |
168 |
169 | KeyA
170 |
171 |
172 | KeyB
173 |
174 |
175 | 0
176 |
177 |
178 | 0
179 |
180 |
--------------------------------------------------------------------------------
/MifareOneTool/FormMFF08.zh.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 清除
122 |
123 |
124 | 修复写入
125 | 有密码
126 | CUID卡
127 |
128 |
129 | 加载…
130 |
131 |
132 | 修复写入
133 | 无密空白
134 | CUID卡
135 |
136 |
137 | MFF08 Tool-CUID修复工具
138 |
139 |
140 | 说明
141 |
142 |
143 | 操作
144 |
145 |
146 | 日志
147 |
148 |
149 | 本工具由nfc-mfclassic做少许修改而来。可用于1K大小CUID卡0块损坏的修复。
150 | 本工具可以修复:SAK写错(不认卡类型)、ATQA写错(不认卡大小),对于BCC写错暂时无能为力。
151 | 请准备好你最后一次写入该卡导致0块损坏的卡数据文件(如果卡片有加密)。
152 |
153 |
154 | 最后一次写卡导致0块损坏的卡数据文件:
155 |
156 |
157 | 每个人使用CUID卡的时候,总会因不了解或是不经意犯下一些小错误。
158 |
159 |
160 | 比如使用编辑器修改UID却没有改BCC,SAK=28的卡片解密后的文件直接写入,又或是从S70卡片导入数据写入1K卡却没有更正ATQA。
161 |
162 |
163 | MFF08工具给了你一次修复这些损坏卡片的机会。
164 |
165 |
166 | ------------------------------------------------------------------------
167 |
168 |
169 | 每个人使用CUID卡的时候,总会因不了解或是不经意犯下一些小错误。
170 | 比如使用编辑器修改UID却没有改BCC,SAK=28的卡片解密后的文件直接写入,又或是从S70卡片导入数据写入1K卡却没有更正ATQA。
171 | MFF08工具给了你一次修复这些损坏卡片的机会。
172 | ------------------------------------------------------------------------
173 |
174 |
175 |
176 |
--------------------------------------------------------------------------------
/MifareOneTool/FormMFF08.ru.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | Очистить
122 |
123 |
124 | Ремонт написать
125 | Есть пароль
126 | CUID карта
127 |
128 |
129 | Loading ...
130 |
131 |
132 | Ремонт написать
133 | Нет секретного бланка
134 | CUID карта
135 |
136 |
137 | MFF08 Tool-CUID Ремонт инструмента
138 |
139 |
140 | объяснение
141 |
142 |
143 | операционная
144 |
145 |
146 | журнал
147 |
148 |
149 | Этот инструмент был слегка изменен с помощью nfc-mfclassic. Может быть использован для ремонта 0U блока карты размера 1K.
150 | Этот инструмент можно починить: неверный SAK (не распознанный тип карты), неправильный ATQA (не распознанный размер карты) и BCC невозможно записать неправильно.
151 | Пожалуйста, подготовьте файл данных карты, который вызвал последние 0 повреждений карты (если карта зашифрована).
152 |
153 |
154 | В последний раз при записи карты получено 0 поврежденных файлов данных карты:
155 |
156 |
157 | Когда все используют карту CUID, они всегда делают маленькие ошибки, потому что они не понимают или непреднамеренно.
158 |
159 |
160 | Например, если редактор используется для изменения UID, но BCC не изменяется, файл, дешифрованный картой SAK = 28, записывается напрямую или данные импортируются с карты S70 на карту 1K, но ATQA не исправляется.
161 |
162 |
163 | Инструмент MFF08 дает вам возможность исправить эти поврежденные карты сразу.
164 |
165 |
166 | -------------------------------------------------- ----------------------
167 |
168 |
169 | Когда все используют карту CUID, они всегда делают маленькие ошибки, потому что они не понимают или непреднамеренно.
170 | Например, если редактор используется для изменения UID, но BCC не изменяется, файл, дешифрованный картой SAK = 28, записывается напрямую или данные импортируются с карты S70 на карту 1K, но ATQA не исправляется.
171 | Инструмент MFF08 дает вам возможность исправить эти поврежденные карты сразу.
172 | -------------------------------------------------- ----------------------
173 |
174 |
175 |
176 |
--------------------------------------------------------------------------------
/MifareOneTool/MifareOneTool.csproj:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Debug
5 | x86
6 | 8.0.30703
7 | 2.0
8 | {CDB26016-FC77-403F-B22A-A011F8622FCF}
9 | WinExe
10 | Properties
11 | MifareOneTool
12 | MifareOneTool
13 | v4.0
14 | Client
15 | 512
16 | publish\
17 | true
18 | Disk
19 | false
20 | Foreground
21 | 7
22 | Days
23 | false
24 | false
25 | true
26 | 0
27 | 1.0.0.%2a
28 | false
29 | false
30 | true
31 | true
32 |
33 |
34 | x86
35 | true
36 | full
37 | false
38 | ..\..\Сборки\
39 | DEBUG;TRACE
40 | prompt
41 | 4
42 |
43 |
44 | x86
45 | pdbonly
46 | true
47 | bin\Release\
48 | TRACE
49 | prompt
50 | 4
51 |
52 |
53 | nfc_128.ico
54 |
55 |
56 |
57 |
58 | .\Newtonsoft.Json.dll
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 | Form
76 |
77 |
78 | Form1.cs
79 |
80 |
81 | Form
82 |
83 |
84 | FormDiff.cs
85 |
86 |
87 | Form
88 |
89 |
90 | FormHardNes.cs
91 |
92 |
93 | Form
94 |
95 |
96 | FormHTool.cs
97 |
98 |
99 | Form
100 |
101 |
102 | FormMFF08.cs
103 |
104 |
105 |
106 |
107 |
108 | Form1.cs
109 |
110 |
111 | Form1.cs
112 |
113 |
114 | Form1.cs
115 |
116 |
117 | FormDiff.cs
118 |
119 |
120 | FormDiff.cs
121 |
122 |
123 | FormDiff.cs
124 |
125 |
126 | FormHardNes.cs
127 |
128 |
129 | FormHardNes.cs
130 |
131 |
132 | FormHardNes.cs
133 |
134 |
135 | FormHTool.cs
136 |
137 |
138 | FormHTool.cs
139 |
140 |
141 | FormHTool.cs
142 |
143 |
144 | FormMFF08.cs
145 |
146 |
147 | FormMFF08.cs
148 |
149 |
150 | FormMFF08.cs
151 |
152 |
153 | PublicResXFileCodeGenerator
154 | Resources.Designer.cs
155 | Designer
156 |
157 |
158 | True
159 | Resources.resx
160 | True
161 |
162 |
163 | Resources.resx
164 |
165 |
166 | Resources.resx
167 |
168 |
169 |
170 | SettingsSingleFileGenerator
171 | Settings.Designer.cs
172 |
173 |
174 | True
175 | Settings.settings
176 | True
177 |
178 |
179 |
180 |
181 | False
182 | Microsoft .NET Framework 4 Client Profile %28x86 和 x64%29
183 | true
184 |
185 |
186 | False
187 | .NET Framework 3.5 SP1 Client Profile
188 | false
189 |
190 |
191 | False
192 | .NET Framework 3.5 SP1
193 | false
194 |
195 |
196 | False
197 | Windows Installer 3.1
198 | true
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
230 |
--------------------------------------------------------------------------------
/MifareOneTool/SelectLanguage.cs:
--------------------------------------------------------------------------------
1 | using MultiLang;
2 | using System;
3 | using System.Drawing;
4 | using System.Collections;
5 | using System.ComponentModel;
6 | using System.Windows.Forms;
7 | using System.Reflection;
8 | using System.Globalization;
9 | using System.IO;
10 | using System.IO.IsolatedStorage;
11 | using System.Threading;
12 | using System.Text;
13 | using System.Xml;
14 | using System.Collections.Generic;
15 |
16 | namespace MultiLang
17 | {
18 | public partial class SelectLanguage : Form
19 | {
20 | public SelectLanguage()
21 | {
22 | InitializeComponent();
23 | }
24 |
25 | //----------------------------------------------
26 | //Enums
27 | //----------------------------------------------
28 | public enum enumStartupMode
29 | {
30 | UseDefaultCulture = 0,
31 | UseSavedCulture = 1,
32 | ShowDialog = 2
33 | }
34 |
35 | private enum enumCultureMatch
36 | {
37 | None = 0,
38 | Language = 1,
39 | Neutral = 2,
40 | Region = 3
41 | }
42 |
43 | //----------------------------------------------
44 | //Member Variables
45 | //----------------------------------------------
46 | private enumStartupMode StartupMode;
47 | private CultureInfo SelectedCulture;
48 |
49 | // The array of supported cultures is updated automatically by Multi-Language for Visual Studio
50 | private static string[] SupportedCultures = { "ru", "zh" } ; //MLHIDE
51 |
52 | //----------------------------------------------
53 | //Public Methods
54 | //----------------------------------------------
55 | public void LoadSettingsAndShow()
56 | {
57 | LoadSettingsAndShow(false);
58 | }
59 |
60 | public void LoadSettingsAndShow(Boolean ForceShow)
61 | {
62 | LoadSettings();
63 |
64 | if (ForceShow || (StartupMode == enumStartupMode.ShowDialog))
65 | {
66 | this.ShowDialog();
67 |
68 | if (lstCultures.SelectedItem != null)
69 | {
70 | SelectedCulture = (CultureInfo)lstCultures.SelectedItem;
71 | }
72 |
73 | SaveSettings();
74 | }
75 |
76 | if (StartupMode != enumStartupMode.UseDefaultCulture)
77 | {
78 | if (SelectedCulture != null)
79 | {
80 | // Actually change the culture of the current thread.
81 | Thread.CurrentThread.CurrentUICulture = SelectedCulture;
82 |
83 | if (ForceShow)
84 | {
85 | #if true
86 | // The code generated by VS.NET cannot be used to change the
87 | // language of an active form. Show a message to this effect.
88 | MessageBox.Show("The settings have been saved.\n" +
89 | "The language change will take full effect the next time you start the program.",
90 | "Select language",
91 | MessageBoxButtons.OK);
92 | #else
93 | MLRuntime.MLRuntime.BroadcastLanguageChanged() ;
94 | #endif
95 | }
96 | }
97 | }
98 | }
99 |
100 | //----------------------------------------------
101 | //Private Methods
102 | //----------------------------------------------
103 |
104 | //
105 | // SaveSettings and LoadSettings use an XML file, saved in so called
106 | // Isolated Storage.
107 | //
108 | // I'm not convinced that this is really the best way or the best place
109 | // to store this information, but it's certainly a .NET way to do it.
110 | //
111 | private void LoadSettings()
112 | {
113 | // Set the defaults
114 | StartupMode = enumStartupMode.ShowDialog;
115 | SelectedCulture = Thread.CurrentThread.CurrentUICulture;
116 |
117 | // Create an IsolatedStorageFile object and get the store
118 | // for this application.
119 | IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForDomain();
120 |
121 | // Check whether the file exists
122 | if (isoStorage.GetFileNames("CultureSettings.xml").Length > 0) //MLHIDE
123 | {
124 | // Create isoStorage StreamReader.
125 | StreamReader stmReader = new StreamReader
126 | (new IsolatedStorageFileStream
127 | ("CultureSettings.xml",
128 | FileMode.Open,
129 | isoStorage)); //MLHIDE
130 |
131 | XmlTextReader xmlReader = new XmlTextReader(stmReader);
132 |
133 | // Loop through the XML file until all Nodes have been read and processed.
134 | while (xmlReader.Read())
135 | {
136 | switch (xmlReader.Name)
137 | {
138 | case "StartupMode": //MLHIDE
139 | StartupMode = (enumStartupMode)int.Parse(xmlReader.ReadString());
140 | break;
141 | case "Culture": //MLHIDE
142 | String CultName = xmlReader.ReadString();
143 | CultureInfo CultInfo = new CultureInfo(CultName);
144 | SelectedCulture = CultInfo;
145 | break;
146 | }
147 | }
148 |
149 | // Close the reader
150 | xmlReader.Close();
151 | stmReader.Close();
152 |
153 | }
154 |
155 | isoStorage.Close();
156 |
157 | }
158 |
159 | private void SaveSettings()
160 | {
161 |
162 | // Get an isolated store for user, domain, and assembly and put it into
163 | // an IsolatedStorageFile object.
164 | IsolatedStorageFile isoStorage = IsolatedStorageFile.GetUserStoreForDomain();
165 |
166 | // Create isoStorage StreamWriter and assign it to an XmlTextWriter variable.
167 | IsolatedStorageFileStream stmWriter = new IsolatedStorageFileStream("CultureSettings.xml", FileMode.Create, isoStorage); //MLHIDE
168 | XmlTextWriter writer = new XmlTextWriter(stmWriter, Encoding.UTF8);
169 |
170 | writer.Formatting = Formatting.Indented;
171 | writer.WriteStartDocument();
172 | writer.WriteStartElement("CultureSettings"); //MLHIDE
173 | writer.WriteStartElement("StartupMode"); //MLHIDE
174 | writer.WriteString(((int)StartupMode).ToString());
175 | writer.WriteEndElement();
176 | writer.WriteStartElement("Culture"); //MLHIDE
177 | writer.WriteString(SelectedCulture.Name);
178 | writer.WriteEndElement();
179 | writer.WriteEndElement();
180 | writer.Flush();
181 | writer.Close();
182 |
183 | stmWriter.Close();
184 | isoStorage.Close();
185 | }
186 |
187 | private void SelectLanguage_Load(object sender, System.EventArgs e)
188 | {
189 | enumCultureMatch Match = enumCultureMatch.None;
190 | enumCultureMatch NewMatch = enumCultureMatch.None;
191 |
192 | // Version 1 detected which subdirectories are present.
193 |
194 | // String AsmLocation = Assembly.GetExecutingAssembly ( ).Location;
195 | // String AsmPath = Path.GetDirectoryName ( AsmLocation );
196 | // List DirList = new List ( );
197 | //
198 | // DirList.AddRange ( Directory.GetDirectories ( AsmPath, "??" ) );
199 | // DirList.AddRange ( Directory.GetDirectories ( AsmPath, "??-??*" ) );
200 | //
201 | // foreach ( String SubDirName in DirList )
202 | // {
203 | // try
204 | // {
205 | // String BaseName = Path.GetFileName ( SubDirName );
206 | // CultureInfo Cult = new CultureInfo ( BaseName );
207 |
208 | // Version 2 used the SupportedCultures array in MlString.h,
209 | // which is autoamatically updated by Multi-Language for Visual Studio
210 | // foreach ( String IetfTag in ml.SupportedCultures )
211 |
212 | // Version 3 uses the SupportedCultures array in this file,
213 | // which is autoamatically updated by Multi-Language for Visual Studio
214 | foreach (String IetfTag in SupportedCultures)
215 | {
216 | try
217 | {
218 | CultureInfo Cult = new CultureInfo(IetfTag);
219 |
220 | // Note: The property lstCultures.DisplayName is set to "NativeName" in order to
221 | // show language name in its own language.
222 | lstCultures.Items.Add(Cult);
223 |
224 | // The rest of this logic is just to find the nearest match to the
225 | // current UI culture.
226 | // How well does this culture match?
227 | if (SelectedCulture.Equals(Cult))
228 | {
229 | NewMatch = enumCultureMatch.Region;
230 | }
231 | else if (Cult.TwoLetterISOLanguageName == SelectedCulture.TwoLetterISOLanguageName)
232 | {
233 | if (Cult.IsNeutralCulture)
234 | NewMatch = enumCultureMatch.Neutral;
235 | else
236 | NewMatch = enumCultureMatch.Language;
237 | }
238 |
239 | // Is that better than the best match so far?
240 | if (NewMatch > Match)
241 | {
242 | Match = NewMatch;
243 | lstCultures.SelectedItem = Cult;
244 | }
245 | }
246 | catch
247 | {
248 | }
249 | }
250 |
251 | switch (StartupMode)
252 | {
253 | case enumStartupMode.ShowDialog:
254 | rbShow.Checked = true;
255 | break;
256 | case enumStartupMode.UseDefaultCulture:
257 | rbDefault.Checked = true;
258 | break;
259 | case enumStartupMode.UseSavedCulture:
260 | rbSelected.Checked = true;
261 | break;
262 | }
263 |
264 | }
265 |
266 | private void btOK_Click(object sender, System.EventArgs e)
267 | {
268 | if (lstCultures.SelectedItem != null)
269 | {
270 | SelectedCulture = (CultureInfo)lstCultures.SelectedItem;
271 | }
272 | this.Close();
273 | }
274 |
275 | private void OnStartup_CheckedChanged(object sender, System.EventArgs e)
276 | {
277 | if (rbShow.Checked)
278 | StartupMode = enumStartupMode.ShowDialog;
279 | else if (rbSelected.Checked)
280 | StartupMode = enumStartupMode.UseSavedCulture;
281 | else if (rbDefault.Checked)
282 | StartupMode = enumStartupMode.UseDefaultCulture;
283 | }
284 |
285 | }
286 | }
--------------------------------------------------------------------------------
/MifareOneTool/FormHTool.zh.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | 修改扇区(Enter)
122 |
123 |
124 | 扇区
125 |
126 |
127 | KeyAB读写及增减值
128 |
129 |
130 | [只读]KeyAB读及减值/不可写及增值
131 |
132 |
133 | [只读]KeyAB读/不可写及增减值
134 |
135 |
136 | KeyB读写/不可增减值
137 |
138 |
139 | KeyAB读/KeyB写/不可增减值
140 |
141 |
142 | [只读]KeyB读/不可写及增减值
143 |
144 |
145 | KeyAB读及减值/KeyB写及增值
146 |
147 |
148 | [只读]锁死该扇区
149 |
150 |
151 | KeyAB读写及增减值
152 |
153 |
154 | [只读]KeyAB读及减值/不可写及增值
155 |
156 |
157 | [只读]KeyAB读/不可写及增减值
158 |
159 |
160 | KeyB读写/不可增减值
161 |
162 |
163 | KeyAB读/KeyB写/不可增减值
164 |
165 |
166 | [只读]KeyB读/不可写及增减值
167 |
168 |
169 | KeyAB读及减值/KeyB写及增值
170 |
171 |
172 | [只读]锁死该扇区
173 |
174 |
175 | KeyAB读写及增减值
176 |
177 |
178 | [只读]KeyAB读及减值/不可写及增值
179 |
180 |
181 | [只读]KeyAB读/不可写及增减值
182 |
183 |
184 | KeyB读写/不可增减值
185 |
186 |
187 | KeyAB读/KeyB写/不可增减值
188 |
189 |
190 | [只读]KeyB读/不可写及增减值
191 |
192 |
193 | KeyAB读及减值/KeyB写及增值
194 |
195 |
196 | [只读]锁死该扇区
197 |
198 |
199 | [不可逆]KeyA:A写/AC:A只读/KeyB:A读写
200 |
201 |
202 | KeyA:A写/AC:A读写/KeyB:A读写
203 |
204 |
205 | [不可逆]KeyA:不能读写/AC:A只读/KeyB:A读
206 |
207 |
208 | KeyA:B写/AC:A只读B读写/KeyB:B写
209 |
210 |
211 | [不可逆]KeyA:B写/AC:AB只读/KeyB:B写
212 |
213 |
214 | KeyA:不能读写/AC:A只读B读写/KeyB:不能读写
215 |
216 |
217 | [不可逆]KeyA:不能读写/AC:AB只读/KeyB:不能读写
218 |
219 |
220 | [不可逆]KeyA:不能读写/AC:AB只读/KeyB:不能读写(重复了?)
221 |
222 |
223 | S50HTool-beta
224 |
225 |
226 | 扇区列表
227 |
228 |
229 | 扇区信息
230 |
231 |
232 | 输出
233 |
234 |
235 | 第0块
236 |
237 |
238 | 第1块
239 |
240 |
241 | 第2块
242 |
243 |
244 | KeyA
245 |
246 |
247 | KeyB
248 |
249 |
250 | 0块权限
251 |
252 |
253 | 1块权限
254 |
255 |
256 | 2块权限
257 |
258 |
259 | Key/ACbits权限
260 |
261 |
262 | 当前选定扇区:??
263 |
264 |
265 | menuStrip1
266 |
267 |
268 | 欢迎使用M1T的集成编辑器S50HTool!
269 |
270 |
271 | 打开文件请点左上角文件-打开或Ctrl+O
272 |
273 |
274 | 欢迎使用M1T的集成编辑器S50HTool!
275 | 打开文件请点左上角文件-打开或Ctrl+O
276 |
277 |
278 |
279 | 保存
280 |
281 |
282 | 修改UID
283 |
284 |
285 | 列出全卡密钥
286 |
287 |
288 | 另存为
289 |
290 |
291 | 导入MCT格式
292 |
293 |
294 | 导出为MCT格式
295 |
296 |
297 | 导出密钥字典
298 |
299 |
300 | 工具
301 |
302 |
303 | 打开
304 |
305 |
306 | 文件
307 |
308 |
309 | 新建
310 |
311 |
312 | 检查全卡
313 |
314 |
315 | 检查并纠正全卡
316 |
317 |
318 | 退出
319 |
320 |
--------------------------------------------------------------------------------
/MifareOneTool/FormHardNes.Designer.cs:
--------------------------------------------------------------------------------
1 | namespace MifareOneTool
2 | {
3 | partial class FormHardNes
4 | {
5 | ///
6 | /// Required designer variable.
7 | ///
8 | private System.ComponentModel.IContainer components = null;
9 |
10 | ///
11 | /// Clean up any resources being used.
12 | ///
13 | /// true if managed resources should be disposed; otherwise, false.
14 | protected override void Dispose(bool disposing)
15 | {
16 | if (disposing && (components != null))
17 | {
18 | components.Dispose();
19 | }
20 | base.Dispose(disposing);
21 | }
22 |
23 | #region Windows Form Designer generated code
24 |
25 | ///
26 | /// Required method for Designer support - do not modify
27 | /// the contents of this method with the code editor.
28 | ///
29 | private void InitializeComponent()
30 | {
31 | System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FormHardNes));
32 | this.button1 = new System.Windows.Forms.Button();
33 | this.button2 = new System.Windows.Forms.Button();
34 | this.groupBox1 = new System.Windows.Forms.GroupBox();
35 | this.radioKey1B = new System.Windows.Forms.RadioButton();
36 | this.radioKey1A = new System.Windows.Forms.RadioButton();
37 | this.label4 = new System.Windows.Forms.Label();
38 | this.label3 = new System.Windows.Forms.Label();
39 | this.sector1 = new System.Windows.Forms.TextBox();
40 | this.keyEdit = new System.Windows.Forms.TextBox();
41 | this.label2 = new System.Windows.Forms.Label();
42 | this.label1 = new System.Windows.Forms.Label();
43 | this.radioKey2B = new System.Windows.Forms.RadioButton();
44 | this.radioKey2A = new System.Windows.Forms.RadioButton();
45 | this.label5 = new System.Windows.Forms.Label();
46 | this.label6 = new System.Windows.Forms.Label();
47 | this.groupBox2 = new System.Windows.Forms.GroupBox();
48 | this.checkBoxColOnly = new System.Windows.Forms.CheckBox();
49 | this.sector2 = new System.Windows.Forms.TextBox();
50 | this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
51 | this.tableLayoutPanel2 = new System.Windows.Forms.TableLayoutPanel();
52 | this.tableLayoutPanel3 = new System.Windows.Forms.TableLayoutPanel();
53 | this.tableLayoutPanel4 = new System.Windows.Forms.TableLayoutPanel();
54 | this.tableLayoutPanel5 = new System.Windows.Forms.TableLayoutPanel();
55 | this.flowLayoutPanel1 = new System.Windows.Forms.FlowLayoutPanel();
56 | this.groupBox1.SuspendLayout();
57 | this.groupBox2.SuspendLayout();
58 | this.tableLayoutPanel1.SuspendLayout();
59 | this.tableLayoutPanel2.SuspendLayout();
60 | this.tableLayoutPanel3.SuspendLayout();
61 | this.tableLayoutPanel4.SuspendLayout();
62 | this.tableLayoutPanel5.SuspendLayout();
63 | this.flowLayoutPanel1.SuspendLayout();
64 | this.SuspendLayout();
65 | //
66 | // button1
67 | //
68 | resources.ApplyResources(this.button1, "button1");
69 | this.button1.Name = "button1";
70 | this.button1.UseVisualStyleBackColor = true;
71 | this.button1.Click += new System.EventHandler(this.button1_Click);
72 | //
73 | // button2
74 | //
75 | resources.ApplyResources(this.button2, "button2");
76 | this.button2.DialogResult = System.Windows.Forms.DialogResult.Cancel;
77 | this.button2.Name = "button2";
78 | this.button2.UseVisualStyleBackColor = true;
79 | this.button2.Click += new System.EventHandler(this.button2_Click);
80 | //
81 | // groupBox1
82 | //
83 | resources.ApplyResources(this.groupBox1, "groupBox1");
84 | this.groupBox1.Controls.Add(this.tableLayoutPanel1);
85 | this.groupBox1.Name = "groupBox1";
86 | this.groupBox1.TabStop = false;
87 | //
88 | // radioKey1B
89 | //
90 | resources.ApplyResources(this.radioKey1B, "radioKey1B");
91 | this.radioKey1B.Name = "radioKey1B";
92 | this.radioKey1B.UseVisualStyleBackColor = true;
93 | //
94 | // radioKey1A
95 | //
96 | resources.ApplyResources(this.radioKey1A, "radioKey1A");
97 | this.radioKey1A.Checked = true;
98 | this.radioKey1A.Name = "radioKey1A";
99 | this.radioKey1A.TabStop = true;
100 | this.radioKey1A.UseVisualStyleBackColor = true;
101 | //
102 | // label4
103 | //
104 | resources.ApplyResources(this.label4, "label4");
105 | this.label4.Name = "label4";
106 | //
107 | // label3
108 | //
109 | resources.ApplyResources(this.label3, "label3");
110 | this.label3.Name = "label3";
111 | //
112 | // sector1
113 | //
114 | resources.ApplyResources(this.sector1, "sector1");
115 | this.sector1.Name = "sector1";
116 | //
117 | // keyEdit
118 | //
119 | resources.ApplyResources(this.keyEdit, "keyEdit");
120 | this.keyEdit.Name = "keyEdit";
121 | //
122 | // label2
123 | //
124 | resources.ApplyResources(this.label2, "label2");
125 | this.label2.Name = "label2";
126 | //
127 | // label1
128 | //
129 | resources.ApplyResources(this.label1, "label1");
130 | this.label1.ForeColor = System.Drawing.Color.Blue;
131 | this.label1.Name = "label1";
132 | //
133 | // radioKey2B
134 | //
135 | resources.ApplyResources(this.radioKey2B, "radioKey2B");
136 | this.radioKey2B.Name = "radioKey2B";
137 | this.radioKey2B.UseVisualStyleBackColor = true;
138 | //
139 | // radioKey2A
140 | //
141 | resources.ApplyResources(this.radioKey2A, "radioKey2A");
142 | this.radioKey2A.Checked = true;
143 | this.radioKey2A.Name = "radioKey2A";
144 | this.radioKey2A.TabStop = true;
145 | this.radioKey2A.UseVisualStyleBackColor = true;
146 | //
147 | // label5
148 | //
149 | resources.ApplyResources(this.label5, "label5");
150 | this.label5.Name = "label5";
151 | //
152 | // label6
153 | //
154 | resources.ApplyResources(this.label6, "label6");
155 | this.label6.Name = "label6";
156 | //
157 | // groupBox2
158 | //
159 | resources.ApplyResources(this.groupBox2, "groupBox2");
160 | this.groupBox2.Controls.Add(this.tableLayoutPanel4);
161 | this.groupBox2.Name = "groupBox2";
162 | this.groupBox2.TabStop = false;
163 | //
164 | // checkBoxColOnly
165 | //
166 | resources.ApplyResources(this.checkBoxColOnly, "checkBoxColOnly");
167 | this.checkBoxColOnly.Name = "checkBoxColOnly";
168 | this.checkBoxColOnly.UseVisualStyleBackColor = true;
169 | //
170 | // sector2
171 | //
172 | resources.ApplyResources(this.sector2, "sector2");
173 | this.sector2.Name = "sector2";
174 | //
175 | // tableLayoutPanel1
176 | //
177 | resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
178 | this.tableLayoutPanel1.Controls.Add(this.radioKey1B, 3, 1);
179 | this.tableLayoutPanel1.Controls.Add(this.label2, 0, 0);
180 | this.tableLayoutPanel1.Controls.Add(this.radioKey1A, 2, 1);
181 | this.tableLayoutPanel1.Controls.Add(this.keyEdit, 0, 1);
182 | this.tableLayoutPanel1.Controls.Add(this.label4, 2, 0);
183 | this.tableLayoutPanel1.Controls.Add(this.label3, 1, 0);
184 | this.tableLayoutPanel1.Controls.Add(this.sector1, 1, 1);
185 | this.tableLayoutPanel1.Name = "tableLayoutPanel1";
186 | //
187 | // tableLayoutPanel2
188 | //
189 | resources.ApplyResources(this.tableLayoutPanel2, "tableLayoutPanel2");
190 | this.tableLayoutPanel2.Controls.Add(this.radioKey2B, 3, 1);
191 | this.tableLayoutPanel2.Controls.Add(this.radioKey2A, 2, 1);
192 | this.tableLayoutPanel2.Controls.Add(this.label6, 1, 0);
193 | this.tableLayoutPanel2.Controls.Add(this.label5, 2, 0);
194 | this.tableLayoutPanel2.Controls.Add(this.sector2, 1, 1);
195 | this.tableLayoutPanel2.Name = "tableLayoutPanel2";
196 | //
197 | // tableLayoutPanel3
198 | //
199 | resources.ApplyResources(this.tableLayoutPanel3, "tableLayoutPanel3");
200 | this.tableLayoutPanel3.Controls.Add(this.groupBox1, 0, 0);
201 | this.tableLayoutPanel3.Controls.Add(this.flowLayoutPanel1, 0, 2);
202 | this.tableLayoutPanel3.Controls.Add(this.groupBox2, 0, 1);
203 | this.tableLayoutPanel3.Name = "tableLayoutPanel3";
204 | //
205 | // tableLayoutPanel4
206 | //
207 | resources.ApplyResources(this.tableLayoutPanel4, "tableLayoutPanel4");
208 | this.tableLayoutPanel4.Controls.Add(this.tableLayoutPanel2, 1, 0);
209 | this.tableLayoutPanel4.Controls.Add(this.checkBoxColOnly, 0, 0);
210 | this.tableLayoutPanel4.Name = "tableLayoutPanel4";
211 | //
212 | // tableLayoutPanel5
213 | //
214 | resources.ApplyResources(this.tableLayoutPanel5, "tableLayoutPanel5");
215 | this.tableLayoutPanel5.Controls.Add(this.button2, 0, 0);
216 | this.tableLayoutPanel5.Controls.Add(this.button1, 1, 0);
217 | this.tableLayoutPanel5.Name = "tableLayoutPanel5";
218 | //
219 | // flowLayoutPanel1
220 | //
221 | resources.ApplyResources(this.flowLayoutPanel1, "flowLayoutPanel1");
222 | this.flowLayoutPanel1.Controls.Add(this.label1);
223 | this.flowLayoutPanel1.Controls.Add(this.tableLayoutPanel5);
224 | this.flowLayoutPanel1.Name = "flowLayoutPanel1";
225 | //
226 | // FormHardNes
227 | //
228 | this.AcceptButton = this.button1;
229 | resources.ApplyResources(this, "$this");
230 | this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
231 | this.CancelButton = this.button2;
232 | this.ControlBox = false;
233 | this.Controls.Add(this.tableLayoutPanel3);
234 | this.KeyPreview = true;
235 | this.MaximizeBox = false;
236 | this.MinimizeBox = false;
237 | this.Name = "FormHardNes";
238 | this.groupBox1.ResumeLayout(false);
239 | this.groupBox1.PerformLayout();
240 | this.groupBox2.ResumeLayout(false);
241 | this.groupBox2.PerformLayout();
242 | this.tableLayoutPanel1.ResumeLayout(false);
243 | this.tableLayoutPanel1.PerformLayout();
244 | this.tableLayoutPanel2.ResumeLayout(false);
245 | this.tableLayoutPanel2.PerformLayout();
246 | this.tableLayoutPanel3.ResumeLayout(false);
247 | this.tableLayoutPanel3.PerformLayout();
248 | this.tableLayoutPanel4.ResumeLayout(false);
249 | this.tableLayoutPanel4.PerformLayout();
250 | this.tableLayoutPanel5.ResumeLayout(false);
251 | this.tableLayoutPanel5.PerformLayout();
252 | this.flowLayoutPanel1.ResumeLayout(false);
253 | this.flowLayoutPanel1.PerformLayout();
254 | this.ResumeLayout(false);
255 | this.PerformLayout();
256 |
257 | }
258 |
259 | #endregion
260 |
261 | private System.Windows.Forms.Button button1;
262 | private System.Windows.Forms.Button button2;
263 | private System.Windows.Forms.GroupBox groupBox1;
264 | private System.Windows.Forms.Label label2;
265 | private System.Windows.Forms.Label label1;
266 | private System.Windows.Forms.RadioButton radioKey1B;
267 | private System.Windows.Forms.RadioButton radioKey1A;
268 | private System.Windows.Forms.Label label4;
269 | private System.Windows.Forms.Label label3;
270 | private System.Windows.Forms.TextBox keyEdit;
271 | private System.Windows.Forms.RadioButton radioKey2B;
272 | private System.Windows.Forms.RadioButton radioKey2A;
273 | private System.Windows.Forms.Label label5;
274 | private System.Windows.Forms.Label label6;
275 | private System.Windows.Forms.GroupBox groupBox2;
276 | private System.Windows.Forms.TextBox sector2;
277 | private System.Windows.Forms.TextBox sector1;
278 | private System.Windows.Forms.CheckBox checkBoxColOnly;
279 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
280 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel2;
281 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel3;
282 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel4;
283 | private System.Windows.Forms.TableLayoutPanel tableLayoutPanel5;
284 | private System.Windows.Forms.FlowLayoutPanel flowLayoutPanel1;
285 | }
286 | }
--------------------------------------------------------------------------------
/MifareOneTool/FormHTool.ru.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | Изменить сектор (Enter)
122 |
123 |
124 | Cектор
125 |
126 |
127 | KeyAB читать, писать, увеличивать и уменьшать
128 |
129 |
130 | [только для чтения] KeyAB для чтения и амортизации / недоступен для записи и добавляет ценность
131 |
132 |
133 | [только для чтения] KeyAB для чтения / записи, а также для увеличения или уменьшения
134 |
135 |
136 | KeyB чтение / запись / не сложение и вычитание
137 |
138 |
139 | KeyAB чтение / KeyB запись / без увеличения или уменьшения
140 |
141 |
142 | [Только для чтения] KeyB для чтения / не для записи и увеличения или уменьшения
143 |
144 |
145 | KeyAB чтение и ухудшение / KeyB написание и добавленная стоимость
146 |
147 |
148 | [только для чтения] заблокировать сектор
149 |
150 |
151 | KeyAB читать, писать, увеличивать и уменьшать
152 |
153 |
154 | [только для чтения] KeyAB для чтения и амортизации / недоступен для записи и добавляет ценность
155 |
156 |
157 | [только для чтения] KeyAB для чтения / записи, а также для увеличения или уменьшения
158 |
159 |
160 | KeyB чтение / запись / не сложение и вычитание
161 |
162 |
163 | KeyAB чтение / KeyB запись / без увеличения или уменьшения
164 |
165 |
166 | [Только для чтения] KeyB для чтения / не для записи и увеличения или уменьшения
167 |
168 |
169 | KeyAB чтение и ухудшение / KeyB написание и добавленная стоимость
170 |
171 |
172 | [только для чтения] заблокировать сектор
173 |
174 |
175 | KeyAB читать, писать, увеличивать и уменьшать
176 |
177 |
178 | [только для чтения] KeyAB для чтения и амортизации / недоступен для записи и добавляет ценность
179 |
180 |
181 | [только для чтения] KeyAB для чтения / записи, а также для увеличения или уменьшения
182 |
183 |
184 | KeyB чтение / запись / не сложение и вычитание
185 |
186 |
187 | KeyAB чтение / KeyB запись / без увеличения или уменьшения
188 |
189 |
190 | [Только для чтения] KeyB для чтения / не для записи и увеличения или уменьшения
191 |
192 |
193 | KeyAB чтение и ухудшение / KeyB написание и добавленная стоимость
194 |
195 |
196 | [только для чтения] заблокировать сектор
197 |
198 |
199 | [Необратимый] KeyA: запись / AC: только чтение / KeyB: чтение и запись
200 |
201 |
202 | KeyA: запись / AC: чтение / запись / KeyB: чтение и запись
203 |
204 |
205 | [Необратимый] KeyA: невозможно чтение / запись / AC: только для чтения / KeyB: чтение
206 |
207 |
208 | KeyA: B запись / AC: A только для чтения B чтение / запись / KeyB: B запись
209 |
210 |
211 | [необратимый] KeyA: запись B / AC: только чтение AB / KeyB: запись B
212 |
213 |
214 | KeyA: невозможно чтение / запись / AC: A только для чтения B чтение / запись / KeyB: невозможно чтение или запись
215 |
216 |
217 | [Необратимый] KeyA: невозможно чтение / запись / AC: AB только для чтения / KeyB: невозможно чтение или запись
218 |
219 |
220 | [Необратимый] KeyA: невозможно чтение / запись / AC: AB только для чтения / KeyB: невозможно чтение или запись (повторяется?)
221 |
222 |
223 | Редактор дампа (бета)
224 |
225 |
226 | Список секторов
227 |
228 |
229 | Информация о секторе
230 |
231 |
232 | Просмотр
233 |
234 |
235 | Блок 0
236 |
237 |
238 | Блок 1
239 |
240 |
241 | Блок 2
242 |
243 |
244 | Ключ A
245 |
246 |
247 | Ключ B
248 |
249 |
250 | Условия доступа блока 0
251 |
252 |
253 | Условия доступа блока 1
254 |
255 |
256 | Условия доступа блока 2
257 |
258 |
259 | Ключ / ACbits разрешение
260 |
261 |
262 | Текущий выбранный сектор: ?
263 |
264 |
265 | Добро пожаловать в интегрированный редактор M1T S50HTool!
266 |
267 |
268 | Откройте файл, пожалуйста, нажмите на файл в верхнем левом углу - открыть или Ctrl + O
269 |
270 |
271 | Добро пожаловать в интегрированный редактор дампа!
272 | Чтобы открыть файл, пожалуйста, нажмите на Файл в верхнем левом углу - Открыть или Ctrl + O
273 | Вы можете обновить данные вашей карты.
274 |
275 |
276 | Сохранить
277 |
278 |
279 | Изменить UID
280 |
281 |
282 | Перечислите полный ключ карты
283 |
284 |
285 | Сохранить как
286 |
287 |
288 | Импортировать формат MCT
289 |
290 |
291 | Экспорт в формат MCT
292 |
293 |
294 | Словарь ключей экспорта
295 |
296 |
297 | Инструменты
298 |
299 |
300 | Открыть
301 |
302 |
303 | Файл
304 |
305 |
306 | Создать
307 |
308 |
309 | Проверка полной карты
310 |
311 |
312 | Проверка и исправление полной карты
313 |
314 |
315 | Выход
316 |
317 |
--------------------------------------------------------------------------------
/MifareOneTool/ClassMifareS50.cs:
--------------------------------------------------------------------------------
1 | using MifareOneTool.Properties;
2 | using System;
3 | using System.Collections.Generic;
4 | using System.Linq;
5 | using System.Text;
6 | using System.Security.Cryptography;
7 | using System.IO;
8 | using System.Text.RegularExpressions;
9 |
10 | namespace MifareOneTool
11 | {
12 | class Utils
13 | {
14 | public static string Hex2Str(byte[] bytes)
15 | {
16 | StringBuilder ret = new StringBuilder();
17 | foreach (byte b in bytes)
18 | {
19 | ret.AppendFormat("{0:x2}", b);
20 | }
21 | return ret.ToString();
22 | }
23 | public static string Hex2StrWithSpan(byte[] bytes)
24 | {
25 | StringBuilder ret = new StringBuilder();
26 | foreach (byte b in bytes)
27 | {
28 | ret.AppendFormat("{0:x2}", b);
29 | ret.Append(" ");
30 | }
31 | return ret.ToString();
32 | }
33 | public static byte[] Hex2Block(string hex, int bytelen)
34 | {
35 | hex = hex.Replace(" ", "");
36 | byte[] returnBytes = new byte[bytelen];
37 | for (int i = 0; i < bytelen; i++)
38 | returnBytes[i] = Convert.ToByte(hex.Substring(i * 2, 2), 16);
39 | return returnBytes;
40 | }
41 | public static byte[] ReadAC(byte[] ac)
42 | {
43 | byte[] acbits = new byte[4];
44 | acbits[0] = (byte)(((ac[2] & 0x10) >> 4)
45 | + ((ac[2] & 0x01) << 1)
46 | + ((ac[1] & 0x10) >> 2));
47 | acbits[1] = (byte)(((ac[2] & 0x20) >> 5)
48 | + ((ac[2] & 0x02))
49 | + ((ac[1] & 0x20) >> 3));
50 | acbits[2] = (byte)(((ac[2] & 0x40) >> 6)
51 | + ((ac[2] & 0x04) >> 1)
52 | + ((ac[1] & 0x40) >> 4));
53 | acbits[3] = (byte)(((ac[2] & 0x80) >> 7)
54 | + ((ac[2] & 0x08) >> 2)
55 | + ((ac[1] & 0x80) >> 5));
56 | return acbits;
57 | }
58 | public static byte[] ReadRAC(byte[] ac)
59 | {
60 | byte[] acbits = new byte[4];
61 | for (int i = 0; i < ac.Length; i++)
62 | {
63 | ac[i] = (byte)~ac[i];
64 | }
65 | acbits[0] = (byte)(((ac[0] & 0x01) << 2)
66 | + ((ac[0] & 0x10) >> 3)
67 | + ((ac[1] & 0x01)));
68 | acbits[1] = (byte)(((ac[0] & 0x02) << 1)
69 | + ((ac[0] & 0x20) >> 4)
70 | + ((ac[1] & 0x02) >> 1));
71 | acbits[2] = (byte)(((ac[0] & 0x04))
72 | + ((ac[0] & 0x40) >> 5)
73 | + ((ac[1] & 0x04) >> 2));
74 | acbits[3] = (byte)(((ac[0] & 0x08) >> 1)
75 | + ((ac[0] & 0x80) >> 6)
76 | + ((ac[1] & 0x08) >> 3));
77 | return acbits;
78 | }
79 | public static byte[] GenAC(byte[] ac)
80 | {
81 | byte[] acbits = new byte[4];
82 | acbits[3] = 0x00;
83 | acbits[1] = (byte)(((ac[0] << 2) & 0x10)
84 | | ((ac[1] << 3) & 0x20)
85 | | ((ac[2] << 4) & 0x40)
86 | | ((ac[3] << 5) & 0x80));
87 | acbits[2] = (byte)(((ac[0] >> 1) & 0x01)
88 | | ((ac[1]) & 0x02)
89 | | ((ac[2] << 1) & 0x04)
90 | | ((ac[3] << 2) & 0x08)
91 | | ((ac[0] << 4) & 0x10)
92 | | ((ac[1] << 5) & 0x20)
93 | | ((ac[2] << 6) & 0x40)
94 | | ((ac[3] << 7) & 0x80));
95 | for (int i = 0; i < ac.Length; i++)
96 | {
97 | ac[i] = (byte)~ac[i];
98 | }
99 | acbits[1] = (byte)(acbits[1] |
100 | ((ac[0]) & 0x01)
101 | | ((ac[1] << 1) & 0x02)
102 | | ((ac[2] << 2) & 0x04)
103 | | ((ac[3] << 3) & 0x08));
104 | acbits[0] = (byte)(((ac[0] >> 2) & 0x01)
105 | | ((ac[1] >> 1) & 0x02)
106 | | ((ac[2]) & 0x04)
107 | | ((ac[3] << 1) & 0x08)
108 | | ((ac[0] << 3) & 0x10)
109 | | ((ac[1] << 4) & 0x20)
110 | | ((ac[2] << 5) & 0x40)
111 | | ((ac[3] << 6) & 0x80));
112 | return acbits;
113 | }
114 | //public static bool DtKeyAB(byte[] ac)
115 | //{
116 | // byte[] acbits = new byte[4];
117 | // acbits[0] = (byte)(((ac[2] & 0x10) >> 4)
118 | // + ((ac[2] & 0x01) << 1)
119 | // + ((ac[1] & 0x10) >> 2));
120 | // acbits[1] = (byte)(((ac[2] & 0x20) >> 5)
121 | // + ((ac[2] & 0x02))
122 | // + ((ac[1] & 0x20) >> 3));
123 | // acbits[2] = (byte)(((ac[2] & 0x40) >> 6)
124 | // + ((ac[2] & 0x04) >> 1)
125 | // + ((ac[1] & 0x40) >> 4));
126 | // acbits[3] = (byte)(((ac[2] & 0x80) >> 7)
127 | // + ((ac[2] & 0x08) >> 2)
128 | // + ((ac[1] & 0x80) >> 5));
129 | // return acbits;
130 | //}
131 | }
132 | enum AccessBitsT
133 | {
134 | KeyAW_KeyAR_KeyARW,
135 | keyAW_KeyARW_KeyARW,
136 | Never_KeyAR_KeyAR,
137 | KeyBW_KeyABRKeyBW_KeyBW,
138 | KeyBW_KeyABR_KeyBW,
139 | Never_KeyABRKeyBW_Never,
140 | Never_KeyABR_Never,
141 | Never_KeyABR_Never2
142 | }
143 | enum AccessBitsD
144 | {
145 | AB_AB_AB_AB,
146 | AB_N_N_AB,
147 | AB_N_N_N,
148 | B_B_N_N,
149 | AB_B_N_N,
150 | B_N_N_N,
151 | AB_B_B_AB,
152 | N_N_N_N
153 | }
154 | class Sector
155 | {
156 | private byte[][] _sector = new byte[4][] { new byte[16], new byte[16], new byte[16], new byte[16], };
157 | public byte[][] Block
158 | {
159 | get { return _sector; }
160 | set { _sector = value; }
161 | }
162 | private bool _isSector0 = false;
163 | public bool IsSector0
164 | {
165 | get { return _isSector0; }
166 | set { _isSector0 = value; }
167 | }
168 | public void Wipe()
169 | {
170 | byte[] zeroBlock = this._sector[0];
171 | this._sector = new byte[4][]{
172 | new byte[16]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
173 | new byte[16]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
174 | new byte[16]{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00},
175 | new byte[16]{0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,
176 | 0xFF,0x07,0x80,0x69,
177 | 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF},
178 | };
179 | if (this._isSector0)
180 | {
181 | this._sector[0] = zeroBlock;
182 | }
183 | }
184 | public Sector(bool sector0 = false)
185 | {
186 | this._isSector0 = sector0;
187 | this.Wipe();
188 | if (sector0)
189 | {
190 | RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
191 | byte[] uid = new byte[4];
192 | rng.GetNonZeroBytes(uid);
193 | byte bcc = (byte)(uid[0] ^ uid[1] ^ uid[2] ^ uid[3]);
194 | this._sector[0] = new byte[16] { uid[0], uid[1], uid[2], uid[3], bcc, 0x08, 0x04, 0x00,
195 | 0x62, 0x63, 0x64, 0x65, 0x66,0x67,0x68,0x69 };
196 | }
197 | }
198 | public Sector(byte[] uid)
199 | {
200 | if (uid.Length != 4) { throw new Exception(Resources.不恰当的4字节UID长度); }
201 | this._isSector0 = true;
202 | this.Wipe();
203 | byte bcc = (byte)(uid[0] ^ uid[1] ^ uid[2] ^ uid[3]);
204 | this._sector[0] = new byte[16] { uid[0], uid[1], uid[2], uid[3], bcc, 0x08, 0x04, 0x00,
205 | 0x62, 0x63, 0x64, 0x65, 0x66,0x67,0x68,0x69 };
206 | }
207 | public int Verify()
208 | {
209 | /* 检验该块内容是否合法
210 | * 0块:检查BCC
211 | * 非0块:检查访问控制
212 | * ********
213 | * 0000:正常
214 | * 0001:BCC错
215 | * 0010:访问控制无效
216 | * 0100:访问控制损坏
217 | *
218 | */
219 | int retCode = 0;
220 | if (this._isSector0)
221 | {
222 | byte bc0 = (byte)(_sector[0][0] ^ _sector[0][1] ^ _sector[0][2] ^ _sector[0][3] ^ _sector[0][4]);
223 | if (bc0 != 0x00) { retCode = retCode | 0x01; }
224 | }
225 | byte[] ac = new byte[4] { _sector[3][6], _sector[3][7], _sector[3][8], _sector[3][9] };
226 | byte[] acP = Utils.ReadAC(ac);
227 | byte[] acN = Utils.ReadRAC(ac);
228 | if (!Enumerable.SequenceEqual(acP, acN))
229 | {
230 | retCode = retCode | 0x04;
231 | }
232 | foreach (byte acc in acP)
233 | {
234 | if (acc > 0x08)
235 | {
236 | retCode = retCode | 0x02;
237 | break;
238 | }
239 | }
240 | return retCode;
241 | }
242 | public string Info(int sec)
243 | {
244 | string info = Resources.扇区 + sec.ToString();
245 | if (Enumerable.SequenceEqual(
246 | new byte[16] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
247 | this._sector[0]) &&
248 | Enumerable.SequenceEqual(
249 | new byte[16] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
250 | this._sector[1]) &&
251 | Enumerable.SequenceEqual(
252 | new byte[16] { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 },
253 | this._sector[2]))
254 | {
255 | info += Resources._空扇区;
256 | }
257 | else
258 | {
259 | info += Resources._有数据;
260 | }
261 | if (this.Verify() != 0x00)
262 | {
263 | info += Resources._有错误;
264 | }
265 | return info;
266 | }
267 | public byte[] KeyA
268 | {
269 | get { return this._sector[3].Skip(0).Take(6).ToArray(); }
270 | set { for (int i = 0; i < 6; i++) { this._sector[3][i] = value[i]; } }
271 | }
272 | public byte[] KeyB
273 | {
274 | get { return this._sector[3].Skip(10).Take(6).ToArray(); }
275 | set { for (int i = 10; i < 16; i++) { this._sector[3][i] = value[i]; } }
276 | }
277 | public byte[] ACBits
278 | {
279 | get { return this._sector[3].Skip(6).Take(4).ToArray(); }
280 | set { for (int i = 6; i < 10; i++) { this._sector[3][i] = value[i]; } }
281 | }
282 | }
283 | class S50
284 | {
285 | private List _sectors = new List(16);
286 |
287 | internal byte[] SectorsRaw
288 | {
289 | get
290 | {
291 | byte[] buffer = new byte[1024];
292 | for (int i = 0; i < 16; i++)
293 | {
294 | for (int j = 0; j < 4; j++)
295 | {
296 | for (int k = 0; k < 16; k++)
297 | {
298 | buffer[i * 64 + j * 16 + k] = this._sectors[i].Block[j][k];
299 | }
300 | }
301 | }
302 | return buffer;
303 | }
304 | set
305 | {
306 | for (int i = 0; i < 16; i++)
307 | {
308 | for (int j = 0; j < 4; j++)
309 | {
310 | for (int k = 0; k < 16; k++)
311 | {
312 | this._sectors[i].Block[j][k] = value[i * 64 + j * 16 + k];
313 | }
314 | }
315 | }
316 | }
317 | }
318 |
319 | public List Sectors
320 | {
321 | get { return _sectors; }
322 | set { _sectors = value; }
323 | }
324 |
325 | public S50()
326 | {
327 | _sectors.Capacity = 16;
328 | for (int i = 0; i < 16; i++)
329 | {
330 | if (i == 0) { _sectors.Add(new Sector(true)); }
331 | else { _sectors.Add(new Sector()); }
332 | }
333 | }
334 | public S50(byte[] uid)
335 | {
336 | _sectors.Capacity = 16;
337 | if (uid.Length != 4) { throw new Exception(Resources.不恰当的4字节UID长度); }
338 | for (int i = 0; i < 16; i++)
339 | {
340 | if (i == 0) { _sectors.Add(new Sector(uid)); }
341 | else { _sectors.Add(new Sector()); }
342 | }
343 | }
344 | public void Wipe()
345 | {
346 | for (int i = 0; i < 16; i++)
347 | {
348 | _sectors[i].Wipe();
349 | }
350 | }
351 | public int[] Verify()
352 | {
353 | int[] ret = new int[17];
354 | int t = 0;
355 | for (int i = 0; i < 16; i++)
356 | {
357 | ret[i] = _sectors[i].Verify();
358 | t += ret[i];
359 | }
360 | ret[16] = t;
361 | return ret;
362 | }
363 | public int Verify(int sector)
364 | {
365 | return _sectors[sector].Verify();
366 | }
367 | public void LoadFromMfd(string file)
368 | {
369 | if (!File.Exists(file)) { throw new IOException(Resources.加载的文件不存在); }
370 | if (new FileInfo(file).Length != 1024) { throw new IOException(Resources.加载的S50卡文件大小异常); }
371 | byte[] loadByte = File.ReadAllBytes(file);
372 | this.Wipe();
373 | this.SectorsRaw = (byte[])loadByte;
374 | }
375 | public void LoadFromMctTxt(string file)
376 | {
377 | if (!File.Exists(file)) { throw new IOException(Resources.加载的文件不存在); }
378 | long fileLength=new FileInfo(file).Length;
379 | if (fileLength < 2200 || fileLength > 2400) { throw new IOException(Resources.加载的S50卡文件大小异常); }
380 | List lines = new List(File.ReadAllLines(file));
381 | List invaild = new List();
382 | foreach (string line in lines)
383 | {
384 | if (!Regex.IsMatch(line, "[0-9A-Fa-f]{32}") || line.Length != 32)
385 | {
386 | invaild.Add(line);
387 | }
388 | }
389 | foreach (string inv in invaild)
390 | {
391 | lines.Remove(inv);
392 | }
393 | if (lines.Count != 64)
394 | {
395 | throw new Exception(Resources.文件内不是含有64个块数据_可能不完整或不兼容);
396 | }
397 | this.Wipe();
398 | for (int i = 0; i < lines.Count; i++)
399 | {
400 | this._sectors[i / 4].Block[i % 4] = Utils.Hex2Block(lines[i], 16);
401 | }
402 | }
403 | public void ExportToMfd(string file)
404 | {
405 | byte[] fileBuffer = this.SectorsRaw;
406 | File.WriteAllBytes(file, fileBuffer);
407 | }
408 | public void ExportToMctTxt(string file)
409 | {
410 | StringBuilder sb = new StringBuilder();
411 | for (int i = 0; i < 16; i++)
412 | {
413 | sb.AppendLine(Resources._Sector + i.ToString());
414 | for (int j = 0; j < 4; j++)
415 | {
416 | sb.AppendLine(Utils.Hex2Str(this._sectors[i].Block[j]));
417 | }
418 | }
419 | File.WriteAllText(file, sb.ToString());
420 | }
421 | public List KeyList()
422 | {
423 | List keys = new List();
424 | foreach (Sector s in this._sectors)
425 | {
426 | keys.Add(s.KeyA);
427 | keys.Add(s.KeyB);
428 | }
429 | keys = keys.Distinct().ToList();
430 | return keys;
431 | }
432 | public List KeyListStr()
433 | {
434 | List keys = new List();
435 | foreach (Sector s in this._sectors)
436 | {
437 | keys.Add(Utils.Hex2Str(s.KeyA));
438 | keys.Add(Utils.Hex2Str(s.KeyB));
439 | }
440 | keys = keys.Distinct().ToList();
441 | return keys;
442 | }
443 | }
444 | }
445 |
--------------------------------------------------------------------------------
/MifareOneTool/FormDiff.resx:
--------------------------------------------------------------------------------
1 |
2 |
3 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | text/microsoft-resx
110 |
111 |
112 | 2.0
113 |
114 |
115 | System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
116 |
117 |
118 | System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
119 |
120 |
121 | A
122 |
123 |
124 | B
125 |
126 |
127 | 比较
128 |
129 |
130 | DiffTool
131 |
132 |
133 | 欢迎使用M1T内置的差异工具!
134 |
135 |
136 | 说明:
137 |
138 |
139 | 点击上方的AB两个按键分别选择MFD文件。
140 |
141 |
142 | 然后点击“比较”即可看到结果。
143 |
144 |
145 | 欢迎使用M1T内置的差异工具!
146 | 说明:
147 | 点击上方的AB两个按键分别选择MFD文件。
148 | 然后点击“比较”即可看到结果。
149 |
150 |
151 |
152 | True
153 |
154 |
155 |
156 | Fill
157 |
158 |
159 |
160 | 2, 69
161 |
162 |
163 | 2, 3, 2, 3
164 |
165 |
166 | ForcedVertical
167 |
168 |
169 | 348, 221
170 |
171 |
172 |
173 | 0
174 |
175 |
176 | richTextBox1
177 |
178 |
179 | System.Windows.Forms.RichTextBox, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
180 |
181 |
182 | flowLayoutPanel2
183 |
184 |
185 | 1
186 |
187 |
188 | 2, 3
189 |
190 |
191 | 2, 3, 2, 3
192 |
193 |
194 | 291, 21
195 |
196 |
197 | 1
198 |
199 |
200 | MiddleLeft
201 |
202 |
203 | button1
204 |
205 |
206 | System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
207 |
208 |
209 | flowLayoutPanel1
210 |
211 |
212 | 0
213 |
214 |
215 | 2, 30
216 |
217 |
218 | 2, 3, 2, 3
219 |
220 |
221 | 291, 21
222 |
223 |
224 | 2
225 |
226 |
227 | MiddleLeft
228 |
229 |
230 | button2
231 |
232 |
233 | System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
234 |
235 |
236 | flowLayoutPanel1
237 |
238 |
239 | 1
240 |
241 |
242 | True
243 |
244 |
245 | GrowAndShrink
246 |
247 |
248 | Fill
249 |
250 |
251 | 303, 3
252 |
253 |
254 | 2, 3, 2, 3
255 |
256 |
257 | 41, 54
258 |
259 |
260 | 3
261 |
262 |
263 | button3
264 |
265 |
266 | System.Windows.Forms.Button, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
267 |
268 |
269 | tableLayoutPanel1
270 |
271 |
272 | 1
273 |
274 |
275 | True
276 |
277 |
278 | GrowAndShrink
279 |
280 |
281 | 2
282 |
283 |
284 | True
285 |
286 |
287 | GrowAndShrink
288 |
289 |
290 | Fill
291 |
292 |
293 | TopDown
294 |
295 |
296 | 3, 3
297 |
298 |
299 | 295, 54
300 |
301 |
302 | 5
303 |
304 |
305 | flowLayoutPanel1
306 |
307 |
308 | System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
309 |
310 |
311 | tableLayoutPanel1
312 |
313 |
314 | 0
315 |
316 |
317 | Fill
318 |
319 |
320 | 3, 3
321 |
322 |
323 | 1
324 |
325 |
326 | 346, 60
327 |
328 |
329 | 4
330 |
331 |
332 | tableLayoutPanel1
333 |
334 |
335 | System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
336 |
337 |
338 | flowLayoutPanel2
339 |
340 |
341 | 0
342 |
343 |
344 | <?xml version="1.0" encoding="utf-16"?><TableLayoutSettings><Controls><Control Name="flowLayoutPanel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /><Control Name="button3" Row="0" RowSpan="1" Column="1" ColumnSpan="1" /></Controls><Columns Styles="AutoSize,0,AutoSize,0" /><Rows Styles="AutoSize,0" /></TableLayoutSettings>
345 |
346 |
347 | True
348 |
349 |
350 | GrowAndShrink
351 |
352 |
353 | Fill
354 |
355 |
356 | TopDown
357 |
358 |
359 | 0, 0
360 |
361 |
362 | 370, 456
363 |
364 |
365 | 5
366 |
367 |
368 | flowLayoutPanel2
369 |
370 |
371 | System.Windows.Forms.FlowLayoutPanel, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
372 |
373 |
374 | $this
375 |
376 |
377 | 0
378 |
379 |
380 | 6, 13
381 |
382 |
383 | True
384 |
385 |
386 | GrowAndShrink
387 |
388 |
389 | 370, 456
390 |
391 |
392 | 2, 3, 2, 3
393 |
394 |
395 | FormDiff
396 |
397 |
398 | System.Windows.Forms.Form, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
399 |
400 |
--------------------------------------------------------------------------------