中星睿典信息技术考试V2021注册流程分析

查看 380|回复 13
作者:lmze2000   
前言
前段时间简单分析了一下中星睿典,后简称为zxrd,通过修改pcIsReg属性的方式来达到注册的目的,但是在使用中,由于不同的省份会出现一些问题。最开始的想法是能不能通过山寨服务器的方法来实现,但是没有成功注册的返回结果,不太好猜测。经过一段时间的分析,大致已经收集到部分返回结果的结构了,同时也为了解决单一的修改pcIsReg属性的缺点,才有了这篇笔记。这其中仍有一些疑惑的地方,大家一起来交流,同时这笔记主要是用来交流技术的。
大家在能力范围内还是要支持正版授权。
zxrd为64位程序,使用到的工具:
Dnspy 64位: Dnspy下载地址
zxrd计算工具  https://lmze2000.lanzoux.com/iHyrnp5cslg



计算验证工具.png (67.84 KB, 下载次数: 2)
下载附件
计算验证工具
2021-5-15 15:05 上传

一、注册方式与流程
1.1 在线注册、离线注册
ZXrd注册方式共分为两种,一种是线上注册,另一种是离线注册。
1.2 Zxrd注册流程及关键点


Zxrd注册流程及关键点.png (117.65 KB, 下载次数: 1)
下载附件
2021-5-15 10:24 上传

1.3 关键函数查找
  • 先随便输入客户号与授权码,让其弹出错误信息,然后在Dnspy中搜索对应的信息**



    注册错误提示.png (98.41 KB, 下载次数: 1)
    下载附件
    注册错误 提示
    2021-5-15 11:50 上传

  • 打开Dnspy打开zxrd加载上来,点击放大镜来搜索“客户号或授权"来查找注册关键函数。在查找出来的两个过程中,btnReg_ClickbtnOffline_Click,这两个一个是用离线注册、一个是在线注册的调用。



    客户号有误.png (128.09 KB, 下载次数: 1)
    下载附件
    2021-5-15 11:36 上传

    1.4 在线注册代码
  • 下面是在线注册的代码。

                    private void btnReg_Click(object sender, EventArgs e)
                    {
                            if (!this.checkAgreement.Checked)
                            {
                                    MessageBox.Show("请先阅读并同意许可协议!");
                                    return;
                            }
                            string text = StringOper.GetSimpleString(this.txtRegKhh.Text);
                            string text2 = StringOper.GetSimpleString(this.txtRegSqm.Text);
                            text = StringOper.FullToHalf(text);
                            text2 = StringOper.FullToHalf(text2);
                            int zcmtype = new SysRegInfo().GetZCMType(text, text2);
                            if (zcmtype == 0)
                            {
                                    MessageBox.Show("客户号或授权码有错误,请仔细认真检查后重新输入!");
                                    return;
                            }
                            if (zcmtype != 2)
                            {
                                    if (zcmtype == 1)
                                    {
                                            if (CommonData.curPC.pcIsReg == 0 && MessageBox.Show("在本机注册后,就不能在其它电脑注册了。\r\n也不能更换主机内硬件。\r\n有何疑问可以先阅读许可协议。\r\n\r\n确认要在本机注册码? ", "请谨慎注册", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.No)
                                            {
                                                    return;
                                            }
                                            CommonData.curPC.pcNumZcm = new SysRegInfo().GetNumZcmByKhh(text2, text);
                                            this.RegOnline();
                                    }
                                    return;
                            }
                            SysRegInfo sysRegInfo = new SysRegInfo();
                            if (!sysRegInfo.isRightLetter(text) && !sysRegInfo.isRightLetter(text2))
                            {
                                    MessageBox.Show("非法授权码!");
                                    return;
                            }
                            new SysRegInfo().WriteRegCC(text, text2);
                            MessageBox.Show("已写入注册信息,请重新打开本考试软件!");
                            Environment.Exit(0);
                    }
    二、客户号与授权码验证
    2.1 客户号与授权码
  • 这里是对客户号与授权码是否符合进行验证的地方。验证函数GetZCMType,验证流程见下图,

           GetZCMType返回1,表示客户号和授权码是符合验证要求的。


    构造客户号与授权码.png (140.29 KB, 下载次数: 1)
    下载附件
    构造客户号授权码
    2021-5-15 12:03 上传

    2.2 GetZCMType调用BLL模块SysRegInfo类的isRightNumberZcm进行验证。
                    public bool isRightNumberZcm(string zcmNumber, string n1 = "0123456789", string n6 = "0123456789", string n13 = "0123456789")
                    {
                            string text = zcmNumber.Trim();
                            if (text.Length != 23)
                            {
                                    return false;
                            }
                            text = this.GetPureNumber(text);
                            if (text.Length != 23)
                            {
                                    return false;
                            }
                            if (n1.IndexOf(text[0])
    客户号与授权码,只要满足上面的5个条件,即可通过。
    2.3 Khh与Sqm的合体,ZCM
    在我们构造Khh、Sqm的时候,一般是用Zcm逆推回去的,也就是将khh/sqm不同位置重新组合成23位长的字符串,khh/sqm与zcm的对应位置见下表。
    [table]
    [tr]
    ZCM[/td]
    0[/td]
    1[/td]
    2[/td]
    3[/td]
    4[/td]
    5[/td]
    6[/td]
    7[/td]
    8[/td]
    9[/td]
    10[/td]
    11[/td]
    12[/td]
    13[/td]
    14[/td]
    15[/td]
    16[/td]
    17[/td]
    18[/td]
    19[/td]
    20[/td]
    21[/td]
    22[/td]
    [/tr]
    [tr]
    [td]Khh

    客户, 下载次数

  • song1900   


    lmze2000 发表于 2021-5-16 19:22
    开头那个工具就可以计算注册码,弄不好,给我留言

    有没什么软件直接算出注册码的,太复杂了,这么大段文字,我个菜鸟不会
    lmze2000
    OP
      


    wxf617 发表于 2022-3-19 09:37
    大神,现在修改了BLL.dl还是显示注册失败呢,山东滨州的,jbdn:20

    把正确的码在BLL.dll里面修改,然后在把文件替换了。执行注册。
    lmze2000
    OP
      


    qiaobi1992 发表于 2022-2-21 12:14
    大佬,按照这个方法最后的时候加了一个随机6位字母的验证,这个咋办呀

    随机6位那个,可以不用管。
    你先用修改在线授权的方法BLL.dll那个文件注册一次。
    然后在断网,用计算出来 的离线注册码在注册一次。
    基本上应该可以正常使用。
    但还有一个问题是,修改BLL.dll注册成功后,最好是把原始没有修改的BLL.dll在换回去。这样就没有"满分"bug.,,
    还有现在它们的验证好像很频繁,当发现又没有注册了,就重复上面的步骤。
    lmze2000
    OP
      


    matao5168 发表于 2021-6-10 17:04
    BLL.dll,Models.dl这2个都修改了,重启提示成功注册,但一直提示程序正在启动中

    不用修改Models.dll,我这测试了一下,注册后之后,重启就变成未注册的了。
    应该是官方又修改了一些内容。我告诉你个法子,不用改文件。。你用防火墙,或者其它工具,把教师端禁止联网。就可以了。
    几个修改的地方你参照下
    注册表位置:\HKEY_CURRENT_USER\SOFTWARE\Microsoft


    Snipaste_2021-06-10_17-15-39.png (77.43 KB, 下载次数: 0)
    下载附件
    2021-6-10 17:17 上传



    Snipaste_2021-06-10_17-12-33.png (50.02 KB, 下载次数: 0)
    下载附件
    2021-6-10 17:17 上传

    dlzc   

    支持起来,强大,有个注册机就更完美了。
    我是一只小小   

    同上,求注册机
    犭王人曰女支   

    谢谢楼主分享!
    wgsls   

    同上,求注册机
    52油猴   

    教程非常详细
    您需要登录后才可以回帖 登录 | 立即注册

    返回顶部