155 lines
5.2 KiB
C#
155 lines
5.2 KiB
C#
using System.Runtime.InteropServices;
|
||
using System.Text;
|
||
using static System.Windows.Forms.VisualStyles.VisualStyleElement.TaskbarClock;
|
||
|
||
namespace keygen1
|
||
{
|
||
public partial class Form1 : Form
|
||
{
|
||
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Unicode)]
|
||
static extern IntPtr FindWindow(string? lpClassName, string lpWindowName);
|
||
|
||
[DllImport("user32.dll", SetLastError = true)]
|
||
static extern IntPtr GetDlgItem(IntPtr hDlg, int nIDDlgItem);
|
||
|
||
[DllImport("user32.dll", CharSet = CharSet.Unicode, SetLastError = false)]
|
||
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, StringBuilder? lParam);
|
||
|
||
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
|
||
static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
|
||
|
||
const uint WM_SETTEXT = 0x000C;
|
||
const uint BM_CLICK = 0x00F5;
|
||
|
||
public Form1()
|
||
{
|
||
InitializeComponent();
|
||
}
|
||
|
||
private void Button1_Click(object sender, EventArgs e)
|
||
{
|
||
if (string.IsNullOrEmpty(textBox1.Text))
|
||
{
|
||
MessageBox.Show("Name不能为空");
|
||
return;
|
||
}
|
||
//if (string.IsNullOrEmpty(textBox2.Text))
|
||
//{
|
||
// MessageBox.Show("First Name不能为空");
|
||
// return;
|
||
//}
|
||
//if (string.IsNullOrEmpty(textBox3.Text))
|
||
//{
|
||
// MessageBox.Show("Company不能为空");
|
||
// return;
|
||
//}
|
||
//Generate(textBox1.Text, textBox2.Text, textBox3.Text);
|
||
Generate(textBox1.Text);
|
||
}
|
||
|
||
private void Generate(string username)
|
||
{
|
||
if (username.Length <= 3 || username.Length > 14)
|
||
{
|
||
MessageBox.Show("Name长度要求4~14位");
|
||
return;
|
||
}
|
||
|
||
string? key = GenerateKey(username);
|
||
if (key == null)
|
||
{
|
||
MessageBox.Show("生成Key失败");
|
||
return;
|
||
}
|
||
//if (!int.TryParse(username, out int serial1))
|
||
//{
|
||
// MessageBox.Show("Serial1不是有效数字");
|
||
// return;
|
||
//}
|
||
//string key = GenerateKey(serial1);
|
||
//textBox4.Text = string.Join("-", key);
|
||
textBox2.Text = key;
|
||
//if (checkBox1.Checked) AutoMode(username,key);
|
||
//禁用,由于controlId不固定
|
||
}
|
||
|
||
private static string? GenerateKey(string name)
|
||
{
|
||
string part = "-[#]]=}&&&+(=$*,,)&.*/+++[][;/..§0";
|
||
string name_p1 = string.Join(" ", name.Select(c => c.ToString())) + " ";
|
||
string part_p1 = new(part.Select(c => (char)(c + 1)).ToArray());
|
||
char[] p2 = part_p1.ToCharArray();
|
||
for (int i = 0; i < name_p1.Length; i++)
|
||
{
|
||
p2[i] ^= name_p1[i];
|
||
}
|
||
char[] p2_rev = (char[])p2.Clone();
|
||
Array.Reverse(p2_rev);
|
||
char[] p3 = new char[0x22];
|
||
for (int i = 0; i < 0x11; i++)
|
||
{
|
||
p3[2 * i] = (char)((p2_rev[i] <= 0x1F || p2_rev[i] > 0x7A) ? 0x36 : p2_rev[i]);
|
||
p3[2 * i + 1] = (char)((p2[i] <= 0x1F || p2[i] > 0x7A) ? 0x36 : p2[i]);
|
||
}
|
||
return new string(p3);
|
||
}
|
||
|
||
private static void AutoMode(string username, string key)
|
||
{
|
||
string windowTitle = "ArturDents CrackMe #2";
|
||
IntPtr hWnd = FindWindow(null, windowTitle);
|
||
|
||
if (hWnd == IntPtr.Zero)
|
||
{
|
||
MessageBox.Show("窗口未找到");
|
||
return;
|
||
}
|
||
|
||
int usernameControlId = 0xBB8;
|
||
int serialControlId = 0xBB9;
|
||
int submitButtonId = 0xBBA;
|
||
|
||
IntPtr usernameHwnd = GetDlgItem(hWnd, usernameControlId);
|
||
IntPtr serialHwnd = GetDlgItem(hWnd, serialControlId);
|
||
IntPtr submitButtonHwnd = GetDlgItem(hWnd, submitButtonId);
|
||
|
||
if (usernameHwnd == IntPtr.Zero || serialHwnd == IntPtr.Zero || submitButtonHwnd == IntPtr.Zero)
|
||
{
|
||
MessageBox.Show("控件未找到");
|
||
return;
|
||
}
|
||
|
||
StringBuilder usernameToSet = new(username);
|
||
StringBuilder serialToSet = new(key);
|
||
|
||
SendMessage(usernameHwnd, WM_SETTEXT, IntPtr.Zero, usernameToSet);
|
||
SendMessage(serialHwnd, WM_SETTEXT, IntPtr.Zero, serialToSet);
|
||
SendMessage(submitButtonHwnd, BM_CLICK, IntPtr.Zero, IntPtr.Zero);
|
||
}
|
||
|
||
private void Button2_Click(object sender, EventArgs e)
|
||
{
|
||
if (!string.IsNullOrEmpty(textBox1.Text))
|
||
{
|
||
Clipboard.SetText(textBox1.Text);
|
||
}
|
||
}
|
||
|
||
private void Button3_Click(object sender, EventArgs e)
|
||
{
|
||
if (!string.IsNullOrEmpty(textBox2.Text))
|
||
{
|
||
Clipboard.SetText(textBox2.Text);
|
||
}
|
||
}
|
||
|
||
private void Button4_Click(object sender, EventArgs e)
|
||
{
|
||
if (!string.IsNullOrEmpty(textBox3.Text))
|
||
{
|
||
Clipboard.SetText(textBox3.Text);
|
||
}
|
||
}
|
||
}
|
||
}
|