最近在用CoolCHM制作电子文档.发现这是一个共享版.在网上搜索到相关的破解方法.即C盘序列号与数字97648123相异或.再把得得到的二进制转换成为整型即得到注册码.
所以写了一个小程序学习一下.
界面如下
主要是一个button1和一个textBox1
代码如下:
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
using Microsoft.VisualBasic;
9
using System.Management;
10
namespace CrackCoolCHM
11
{
12
public partial class Form1 : Form
13
{
14
public Form1()
15
{
16
InitializeComponent();
17
}
18
19
private void button1_Click(object sender, EventArgs e)
20
{
21
try
22
{
23
//获取C盘序列号
24
ManagementObject m_objDisk = new ManagementObject("win32_logicaldisk.deviceid='c:'");
25
string strSN = (string)m_objDisk.GetPropertyValue("VolumeSerialNumber");
26
//label2.Text = strSN;
27
//异或的代码
28
char[] YHCode = "97648123".ToCharArray();
29
string YHCodeResult = string.Empty;
30
foreach (char c in YHCode)
31
{
32
string s1 = Convert.ToString(Convert.ToInt32(c.ToString()), 2);
33
switch (s1.Trim().Length)
34
{
35
case 1:
36
s1 = "000" + s1;
37
break;
38
case 2:
39
s1 = "00" + s1;
40
break;
41
case 3:
42
s1 = "0" + s1;
43
break;
44
}
45
YHCodeResult += s1;
46
}
47
string Code16 = YHCodeResult;
48
//机器C盘的序列号
49
string MCCode = string.Empty;
50
char[] MachineCode = strSN.ToCharArray();
51
foreach (char c in MachineCode)
52
{
53
string s1 = Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2);
54
switch (s1.Trim().Length)
55
{
56
case 1:
57
s1 = "000" + s1;
58
break;
59
case 2:
60
s1 = "00" + s1;
61
break;
62
case 3:
63
s1 = "0" + s1;
64
break;
65
}
66
67
MCCode += s1;
68
}
69
textBox1.Text = Convert.ToUInt32(ReturnXorValue(Code16, MCCode), 2).ToString();
70
}
71
catch(Exception ex)
72
{
73
MessageBox.Show("程序出错:" + ex.Message, "提示信息", MessageBoxButtons.OK);
74
}
75
}
76
string ReturnXorValue(string str1, string str2)
77
{
78
string ret = string.Empty;
79
string tempstr=string.Empty;
80
byte[] b1 = System.Text.Encoding.Default.GetBytes(str1);
81
byte[] b2 = System.Text.Encoding.Default.GetBytes(str2);
82
if (b1.Length != b2.Length) throw new ArgumentException("获取参数出错");
83
else
84
{
85
for (int i = 0; i < b1.Length; i++)
86
{
87
tempstr = (b1[i] ^ b2[i]).ToString();
88
ret += tempstr;
89
}
90
}
91
return ret;
92
}
93
94
private void exitToolStripMenuItem_Click(object sender, EventArgs e)
95
{
96
Application.Exit();
97
}
98
}
99
}
using System;2
using System.Collections.Generic;3
using System.ComponentModel;4
using System.Data;5
using System.Drawing;6
using System.Text;7
using System.Windows.Forms;8
using Microsoft.VisualBasic;9
using System.Management;10
namespace CrackCoolCHM11
{12
public partial class Form1 : Form13
{14
public Form1()15
{16
InitializeComponent();17
}18

19
private void button1_Click(object sender, EventArgs e)20
{21
try22
{23
//获取C盘序列号24
ManagementObject m_objDisk = new ManagementObject("win32_logicaldisk.deviceid='c:'");25
string strSN = (string)m_objDisk.GetPropertyValue("VolumeSerialNumber");26
//label2.Text = strSN;27
//异或的代码28
char[] YHCode = "97648123".ToCharArray();29
string YHCodeResult = string.Empty;30
foreach (char c in YHCode)31
{32
string s1 = Convert.ToString(Convert.ToInt32(c.ToString()), 2);33
switch (s1.Trim().Length)34
{35
case 1:36
s1 = "000" + s1;37
break;38
case 2:39
s1 = "00" + s1;40
break;41
case 3:42
s1 = "0" + s1;43
break;44
}45
YHCodeResult += s1;46
}47
string Code16 = YHCodeResult;48
//机器C盘的序列号49
string MCCode = string.Empty;50
char[] MachineCode = strSN.ToCharArray();51
foreach (char c in MachineCode)52
{53
string s1 = Convert.ToString(Convert.ToInt32(c.ToString(), 16), 2);54
switch (s1.Trim().Length)55
{56
case 1:57
s1 = "000" + s1;58
break;59
case 2:60
s1 = "00" + s1;61
break;62
case 3:63
s1 = "0" + s1;64
break;65
}66

67
MCCode += s1;68
}69
textBox1.Text = Convert.ToUInt32(ReturnXorValue(Code16, MCCode), 2).ToString();70
}71
catch(Exception ex)72
{73
MessageBox.Show("程序出错:" + ex.Message, "提示信息", MessageBoxButtons.OK);74
}75
}76
string ReturnXorValue(string str1, string str2)77
{78
string ret = string.Empty;79
string tempstr=string.Empty;80
byte[] b1 = System.Text.Encoding.Default.GetBytes(str1);81
byte[] b2 = System.Text.Encoding.Default.GetBytes(str2);82
if (b1.Length != b2.Length) throw new ArgumentException("获取参数出错");83
else84
{85
for (int i = 0; i < b1.Length; i++)86
{87
tempstr = (b1[i] ^ b2[i]).ToString();88
ret += tempstr;89
}90
}91
return ret;92
}93

94
private void exitToolStripMenuItem_Click(object sender, EventArgs e)95
{96
Application.Exit();97
}98
}99
}
posted @ 2008-06-18 09:17 青铜时代 阅读(1016) 评论(0) 编辑


