houyuyu878 发表于 2023-8-3 02:18

逆向c#注册码求助

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;
                        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));
                        }
                        return stringBuilder.ToString();
                }
        }
}

设备id 转换注册id代码
string GetRegeditIDByDeviceID(string S)
                {
                        byte[] bytes = Encoding.get_ASCII().GetBytes(S);
                        int num = bytes.Length;
                        byte[] array = new byte;
                        for (int i = 0; i < num; i++)
                        {
                                array = bytes;
                        }
                        uint cRC = this.GetCRC(array);
                        array = (byte)(cRC & 255u);
                        array = (byte)(cRC / 256u & 255u);
                        return array.ToString() + array.ToString() + array.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生成工具,谢谢

Rooking 发表于 2023-8-5 09:54

有时候也需要调试一下的

houyuyu878 发表于 2023-8-5 11:13

我调试了生成的字符串是对的,但是好像正版的有加密字符串我生成的没有

jyjjf 发表于 2023-8-10 08:44

houyuyu878 发表于 2023-8-5 11:13
我调试了生成的字符串是对的,但是好像正版的有加密字符串我生成的没有

能不能私一下软件安装包?

houyuyu878 发表于 2023-8-10 21:46

我弄个链接吧

houyuyu878 发表于 2023-8-10 21:48

jyjjf 发表于 2023-8-10 08:44
能不能私一下软件安装包?

https://wwmu.lanzouj.com/b01qwrxqb
密码:ddddddd

houyuyu878 发表于 2023-8-10 21:49

https://wwmu.lanzouj.com/b01qwrxqb
密码:ddddddd

houyuyu878 发表于 2023-8-12 01:39

jyjjf 发表于 2023-8-10 08:44
能不能私一下软件安装包?

怎么样,可以吗

houyuyu878 发表于 2023-8-15 20:12

jyjjf 发表于 2023-8-10 08:44
能不能私一下软件安装包?

咋样了大佬

jyjjf 发表于 2023-8-16 08:13

houyuyu878 发表于 2023-8-15 20:12
咋样了大佬

要安装调试一下才行,要等空了再看看{:5_191:}
页: [1] 2 3
查看完整版本: 逆向c#注册码求助