|
本站严厉禁止求脱求破行为(包含无自我分析直接求思路),如发现此类求助主题请点击“举报”,让我们共同维护优质的学习环境!
30HB
C#注册机制作逆向,对于c#不太熟悉,希望大老指导附上代码 string regeditIDByDeviceID = this.GetRegeditIDByDeviceID(deviceID); string regeditIDByDeviceID2 = this.GetRegeditIDByDeviceID(regeditIDByDeviceID);
string regeditIDByDeviceID3 = this.GetRegeditIDByDeviceID(regeditIDByDeviceID + regeditIDByDeviceID2);
string text = string.Concat(new string[]
{
"Z-",
regeditIDByDeviceID3,
"-L-",
regeditIDByDeviceID2,
"-W-",
regeditIDByDeviceID,
"-B"
});
regeditIDByDeviceID = this.GetRegeditIDByDeviceID(text);
regeditIDByDeviceID2 = this.GetRegeditIDByDeviceID(regeditIDByDeviceID);
regeditIDByDeviceID3 = this.GetRegeditIDByDeviceID(regeditIDByDeviceID + regeditIDByDeviceID2);
string password = string.Concat(new string[]
{
"C-",
regeditIDByDeviceID3,
"-D-",
regeditIDByDeviceID2,
"-A-",
regeditIDByDeviceID,
"-R"
});
string regiditFileName = "\\My Documents\\Regedit(CPIII).reg";
注册逻辑是根据获取的设备I'd转换成注册id 然后拼接显示为Z-xxxxx-L-xxxxx-w-xxxxx-B
然后和注册文件对比验证注册文件里面的注册密码格式为C-xxx-D-xxxx-A-xxxx-R
现在核心是根据设备id 转换注册id 和注册码的逻辑关系和函数逆向转换出id 随后按照正向逻辑生成注册文件即可:下面是转换需要用的参数和函数:
设备I'd 获取代码
static string GetDeviceID()
{
byte[] array = new byte[256];
int outputBufferSize = array.Length;
int num = 0;
if (!FrmMain.KernelIoControl(FrmMain.IOCTL_HAL_GET_DEVICEID, IntPtr.Zero, 0, array, outputBufferSize, ref num))
{
return null;
}
int num2 = BitConverter.ToInt32(array, 4);
int num3 = BitConverter.ToInt32(array, 12);
int num4 = BitConverter.ToInt32(array, 16);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append(string.Format("{0:X8}-{1:X4}-{2:X4}-{3:X4}-", new object[]
{
BitConverter.ToInt32(array, num2),
BitConverter.ToInt16(array, num2 + 4),
BitConverter.ToInt16(array, num2 + 6),
BitConverter.ToInt16(array, num2 + 8)
}));
for (int i = num3; i < num3 + num4; i++)
{
stringBuilder.Append(string.Format("{0:X2}", array[i]));
}
return stringBuilder.ToString();
}
}
}
设备id [s]转换注册id代码
string GetRegeditIDByDeviceID(string S)
{
byte[] bytes = Encoding.get_ASCII().GetBytes(S);
int num = bytes.Length;
byte[] array = new byte[num + 2];
for (int i = 0; i < num; i++)
{
array[i] = bytes[i];
}
uint cRC = this.GetCRC(array);
array[array.Length - 2] = (byte)(cRC & 255u);
array[array.Length - 1] = (byte)(cRC / 256u & 255u);
return array[array.Length - 2].ToString() + array[array.Length - 3].ToString() + array[array.Length - 1].ToString();
}
}
}
转换注册I'd 用的参数crc
uint GetCRC(byte[] crc_array)
{
uint num = 65535u;
uint num2 = 0u;
while ((ulong)num2 < (ulong)((long)(crc_array.Length - 2)))
{
num = ((num & 65280u) | ((num & 255u) ^ (uint)crc_array[(int)((UIntPtr)num2)]));
for (uint num3 = 1u; num3 <= 8u; num3 += 1u)
{
if ((num & 1u) == 1u)
{
num >>= 1;
num ^= 40961u;
}
else
{
num >>= 1;
}
}
num2 += 1u;
}
return num;
}
}
}
希望大佬帮忙做一个注册密码.reg生成工具,谢谢
|
-
-
|