云在天 发表于 2018-1-29 16:48

【注册机制作】 某二手车发票管理系统

本帖最后由 云在天 于 2019-6-7 13:10 编辑

前言:最近一直忙着弄MacOS上的一些东西,没怎么写Win程序,这次就先写一篇注册机的制作,Net程序,如果不加强壳,混淆,做一个注册机很容易,复制粘贴到IDE就搞定。
软件去看我原创区的帖子
【0x1】查壳

这种不知道什么壳,De4又支持的就直接放到De4里脱一脱,是骡子是马拉出来溜达溜达。
PS:其实这个不脱也是可以看到的。
【0x2】反编译
De4搞完后,直接拖进Dnspy里

结构很清楚,不过这个作者一会中文拼音,一会英文的,不纠结吗{:301_1002:}


我们先从类名入手,找有关注册【register/zhuce】的字段,如果这里能找到就恭喜你了,如果找不到就用搜索搜关键字吧。还好还好,找到了。看一下代码,找到关键部分,这里不截图了,直接放代码
1.注册窗体的加载
private void Register_Load(object sender, EventArgs e)
                {
                        CUntily cuntily = new CUntily();
                        string[] departmentAndYXQ = cuntily.GetDepartmentAndYXQ();
                        if (cuntily.IsCorrentSearial())//这里判断是不是已经注册,如果注册就显示下面的已授权,如果没有就显示默认文本
                        {
                              this.RegisterInformation.Text = "本产品已授权给" + departmentAndYXQ + ",授权截止日期为" + departmentAndYXQ;
                        }
                        ToolTip toolTip = new ToolTip();
                        toolTip.SetToolTip(this.ck_IDCard, "若没有购买此功能,请不要勾选。");
                }
2.点击注册按钮时的动作
private void OK_Click(object sender, EventArgs e)
                {
                        string text = this.DepartName.Text.Trim();//企业名称
                        string text2 = this.XQDate.Text;//授权时间
                        string text3 = this.ck_IDCard.Checked ? "是" : "否";//身份证检测
                        DateTime dateTime;//系统时间

                        if (text == "")
                        {
                              MessageBox.Show("单位名称不能为空!");
                        }
//判断输入是否正确,检查了很多,这里省略,直接看检验注册码的过程
                        else
                        {
                              CUntily cuntily = new CUntily();//新建了一个类
                              if (cuntily.MakeSearial(new string[]
                              {
                                        text,
                                        text2,
                                        text3
                              }) == this.ZhuCeMa.Text)//通过MakeSearial与输入的注册码对比,一致就注册成功,不一致失败。
                              {
                                        this.IsCorrect = true;
                                        MessageBox.Show("注册成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
                                        base.Close();
                              }
                              else
                              {
                                        this.IsCorrect = false;
                                        MessageBox.Show("注册失败!\n\n1、请检查单位名称、授权截止日期、注册码是否正确;\n2、输入法改成半角,再重新输入。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                              }
                        }
                }
通过上面的分析,我们知道获取正确注册码的关键是在MakeSearial这个函数里面,那我们就跳到这里分析注册码构成。PS:Serial才对,作者可能多打了一个a。
3.MakeSearial代码
public string MakeSearial(string[] deanddate)
                {
                        string text;
                        if (deanddate == "是")//这里是选择身份证那个选择框的值
                        {
                              text = deanddate + deanddate + "&8$dZ|3%G#@";
                        }
                        else
                        {
                              text = deanddate + deanddate + "Ze34@!-+d93";
                        }
                        text = this.GetMd5(text);//获取输入内容的MD5
                        string text2 = text.Substring(0, 5);
                        string text3 = text.Substring(5, 5);
                        string text4 = text.Substring(10, 5);
                        string text5 = text.Substring(15, 5);
                        string text6 = text.Substring(20, 5);
//上面就是一次取5个字符,取5次。
                        return string.Concat(new string[]
                        {
                              text2,
                              "-",
                              text3,
                              "-",
                              text4,
                              "-",
                              text5,
                              "-",
                              text6
                        });//通过-连接,然后返回
                }
4.编写注册机
通过上面的分析,就是获取输入的内容然后构造一个String然后MD5,然后在取文本,组合成注册码


只要把上面的代码都复制到IDE里面,在画几个控件就完成了


附上我写的代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
      public Form1()
      {
            InitializeComponent();
      }

      private void Form1_Load(object sender, EventArgs e)
      {

      }
      private void InitializeComponent()
      {
            this.label5 = new System.Windows.Forms.Label();
            this.OK = new System.Windows.Forms.Button();
            this.ZhuCeMa = new System.Windows.Forms.TextBox();
            this.label4 = new System.Windows.Forms.Label();
            this.linkLabel1 = new System.Windows.Forms.LinkLabel();
            this.label3 = new System.Windows.Forms.Label();
            this.DepartName = new System.Windows.Forms.TextBox();
            this.label6 = new System.Windows.Forms.Label();
            this.richTextBox1 = new System.Windows.Forms.RichTextBox();
            this.XQDate = new System.Windows.Forms.TextBox();
            this.ck_IDCard = new System.Windows.Forms.CheckBox();
            this.label7 = new System.Windows.Forms.Label();
            this.SuspendLayout();
            //
            // label5
            //
            this.label5.AutoSize = true;
            this.label5.Font = new System.Drawing.Font("宋体", 9F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(134)));
            this.label5.ForeColor = System.Drawing.Color.Black;
            this.label5.Location = new System.Drawing.Point(3, 276);
            this.label5.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.label5.Name = "label5";
            this.label5.Size = new System.Drawing.Size(357, 75);
            this.label5.TabIndex = 25;
            this.label5.Text = " 注册机制作: 云在天(Harry)吾爱破解论坛\n\r\n\r 邮箱:harry@521harry.site\r\n\n\r 微博:";
            //
            // OK
            //
            this.OK.Location = new System.Drawing.Point(242, 231);
            this.OK.Margin = new System.Windows.Forms.Padding(4);
            this.OK.Name = "OK";
            this.OK.Size = new System.Drawing.Size(100, 29);
            this.OK.TabIndex = 22;
            this.OK.Text = "生成注册码";
            this.OK.UseVisualStyleBackColor = true;
            this.OK.Click += new System.EventHandler(this.OK_Click);
            //
            // ZhuCeMa
            //
            this.ZhuCeMa.Location = new System.Drawing.Point(206, 193);
            this.ZhuCeMa.Margin = new System.Windows.Forms.Padding(4);
            this.ZhuCeMa.Name = "ZhuCeMa";
            this.ZhuCeMa.Size = new System.Drawing.Size(301, 25);
            this.ZhuCeMa.TabIndex = 3;
            //
            // label4
            //
            this.label4.AutoSize = true;
            this.label4.ForeColor = System.Drawing.Color.Black;
            this.label4.Location = new System.Drawing.Point(98, 198);
            this.label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.label4.Name = "label4";
            this.label4.Size = new System.Drawing.Size(97, 15);
            this.label4.TabIndex = 20;
            this.label4.Text = "产品注册码:";
            //
            // linkLabel1
            //
            this.linkLabel1.AutoSize = true;
            this.linkLabel1.Location = new System.Drawing.Point(59, 335);
            this.linkLabel1.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.linkLabel1.Name = "linkLabel1";
            this.linkLabel1.Size = new System.Drawing.Size(223, 15);
            this.linkLabel1.TabIndex = 28;
            this.linkLabel1.TabStop = true;
            this.linkLabel1.Text = "https://weibo.com/279977366";
            this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.linkLabel1_LinkClicked);
            //
            // label3
            //
            this.label3.AutoSize = true;
            this.label3.ForeColor = System.Drawing.Color.Black;
            this.label3.Location = new System.Drawing.Point(114, 108);
            this.label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.label3.Name = "label3";
            this.label3.Size = new System.Drawing.Size(82, 15);
            this.label3.TabIndex = 30;
            this.label3.Text = "单位名称:";
            //
            // DepartName
            //
            this.DepartName.Location = new System.Drawing.Point(206, 103);
            this.DepartName.Margin = new System.Windows.Forms.Padding(4);
            this.DepartName.Name = "DepartName";
            this.DepartName.Size = new System.Drawing.Size(301, 25);
            this.DepartName.TabIndex = 1;
            //
            // label6
            //
            this.label6.AutoSize = true;
            this.label6.ForeColor = System.Drawing.Color.Black;
            this.label6.Location = new System.Drawing.Point(82, 138);
            this.label6.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.label6.Name = "label6";
            this.label6.Size = new System.Drawing.Size(112, 15);
            this.label6.TabIndex = 32;
            this.label6.Text = "授权截止日期:";
            //
            // richTextBox1
            //
            this.richTextBox1.BackColor = System.Drawing.SystemColors.Control;
            this.richTextBox1.BorderStyle = System.Windows.Forms.BorderStyle.None;
            this.richTextBox1.Enabled = false;
            this.richTextBox1.ForeColor = System.Drawing.Color.Red;
            this.richTextBox1.Location = new System.Drawing.Point(6, 5);
            this.richTextBox1.Margin = new System.Windows.Forms.Padding(4);
            this.richTextBox1.Name = "richTextBox1";
            this.richTextBox1.ReadOnly = true;
            this.richTextBox1.ScrollBars = System.Windows.Forms.RichTextBoxScrollBars.None;
            this.richTextBox1.Size = new System.Drawing.Size(589, 90);
            this.richTextBox1.TabIndex = 36;
            this.richTextBox1.Text = "Crack By 云在天 (Harry) www.52Pojie.cn \n此补丁仅限用于学习和研究目的,不得将上述内容用于商业或者非法用途,否则,一切后果请用户自" +
    "负。\n您必须在下载后的24小时之内,从您的电脑中彻底删除上述内容。\n\n如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。\n\n如有侵权请联系harr" +
    "y@521harry.site。";
            //
            // XQDate
            //
            this.XQDate.Location = new System.Drawing.Point(206, 133);
            this.XQDate.Margin = new System.Windows.Forms.Padding(4);
            this.XQDate.Name = "XQDate";
            this.XQDate.Size = new System.Drawing.Size(301, 25);
            this.XQDate.TabIndex = 2;
            //
            // ck_IDCard
            //
            this.ck_IDCard.AutoSize = true;
            this.ck_IDCard.Location = new System.Drawing.Point(206, 166);
            this.ck_IDCard.Margin = new System.Windows.Forms.Padding(4);
            this.ck_IDCard.Name = "ck_IDCard";
            this.ck_IDCard.Size = new System.Drawing.Size(119, 19);
            this.ck_IDCard.TabIndex = 4;
            this.ck_IDCard.Text = "身份证阅读器";
            this.ck_IDCard.UseVisualStyleBackColor = true;
            //
            // label7
            //
            this.label7.AutoSize = true;
            this.label7.ForeColor = System.Drawing.Color.Black;
            this.label7.Location = new System.Drawing.Point(114, 167);
            this.label7.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0);
            this.label7.Name = "label7";
            this.label7.Size = new System.Drawing.Size(82, 15);
            this.label7.TabIndex = 39;
            this.label7.Text = "附加功能:";
            //
            // Form1
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 15F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(592, 372);
            this.Controls.Add(this.label7);
            this.Controls.Add(this.ck_IDCard);
            this.Controls.Add(this.XQDate);
            this.Controls.Add(this.richTextBox1);
            this.Controls.Add(this.label6);
            this.Controls.Add(this.DepartName);
            this.Controls.Add(this.label3);
            this.Controls.Add(this.linkLabel1);
            this.Controls.Add(this.label5);
            this.Controls.Add(this.OK);
            this.Controls.Add(this.ZhuCeMa);
            this.Controls.Add(this.label4);
            this.ForeColor = System.Drawing.SystemColors.ControlText;
            this.Margin = new System.Windows.Forms.Padding(4);
            this.Name = "Form1";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "二手车注册机";
            this.Load += new System.EventHandler(this.Form1_Load_1);
            this.ResumeLayout(false);
            this.PerformLayout();

      }

      // Token: 0x04000352 RID: 850
      public bool IsCorrect = false;

      // Token: 0x04000353 RID: 851
      private IContainer components = null;

      // Token: 0x04000354 RID: 852
      private Label label5;

      // Token: 0x04000357 RID: 855
      private Button OK;

      // Token: 0x04000358 RID: 856
      private TextBox ZhuCeMa;

      // Token: 0x04000359 RID: 857
      private Label label4;

      // Token: 0x0400035B RID: 859
      private LinkLabel linkLabel1;

      // Token: 0x0400035D RID: 861
      private Label label3;

      // Token: 0x0400035E RID: 862
      private TextBox DepartName;

      // Token: 0x0400035F RID: 863
      private Label label6;

      // Token: 0x04000360 RID: 864
      private RichTextBox richTextBox1;

      // Token: 0x04000362 RID: 866
      private TextBox XQDate;

      // Token: 0x04000363 RID: 867
      private CheckBox ck_IDCard;

      // Token: 0x04000364 RID: 868
      private Label label7;

      private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
      {
            System.Diagnostics.Process.Start("https://weibo.com/279977366");
      }
      public string MakeSearial(string[] deanddate)
      {
            string text;
            if (deanddate == "是")
            {
                text = deanddate + deanddate + "&8$dZ|3%G#@";
            }
            else
            {
                text = deanddate + deanddate + "Ze34@!-+d93";
            }
            text = this.GetMd5(text);
            string text2 = text.Substring(0, 5);
            string text3 = text.Substring(5, 5);
            string text4 = text.Substring(10, 5);
            string text5 = text.Substring(15, 5);
            string text6 = text.Substring(20, 5);
            return string.Concat(new string[]
            {
                text2,
                "-",
                text3,
                "-",
                text4,
                "-",
                text5,
                "-",
                text6
            });
      }
      public string GetMd5(string ss)
      {
            MD5 md = MD5.Create();
            string text = "";
            byte[] array = md.ComputeHash(Encoding.UTF8.GetBytes(ss));
            for (int i = 0; i < array.Length; i++)
            {
                text += array.ToString("X");
            }
            return text;
      }

      private void OK_Click(object sender, EventArgs e)
      {
            string text = this.DepartName.Text.Trim();
            string text2 = this.XQDate.Text;
            string text3 = this.ck_IDCard.Checked ? "是" : "否";
            if (text == "")
            {
                MessageBox.Show("单位名称不能为空!");
                return;
            }
            if (text2.IndexOf("-") > -1)
            {
                MessageBox.Show("请将输入法转换为半角方式,再重新输入!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                return;
            }
            DateTime dateTime;
            if (!DateTime.TryParse(text2, out dateTime))
            {
                MessageBox.Show("日期格式输入错误!格式:2017-02-01", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                return;
            }
            if (this.ZhuCeMa.Text.IndexOf("-") > -1)
            {
                MessageBox.Show("请将输入法转换为半角方式,再重新输入!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Hand);
                return;
            }
            this.ZhuCeMa.Text = MakeSearial(new string[]
            {
                text,
                text2,
                text3
            });

      }

      private void Form1_Load_1(object sender, EventArgs e)
      {

      }

      
    }
}


效果图:


奇卡无比 发表于 2018-1-30 09:45

的确是这样的不过就是去壳有难度有的dll不会去壳导致没法看到算法

236381673 发表于 2018-1-29 18:10

下载地址呢楼主,你弄一个一键注册的吧

zyw_zjk 发表于 2018-1-29 18:59

楼主软件下载在哪儿?谢谢!

XXTK 发表于 2018-1-29 19:39

软件放出来更好

caige2008 发表于 2018-1-29 19:54

分析的不错啊!

170077000 发表于 2018-1-29 20:51

对NET不了解   求源码和软件做练习

metty 发表于 2018-1-29 22:31

表示叹服

whdfog 发表于 2018-1-29 23:16

支持作者!

萌萌哒的小白 发表于 2018-1-29 23:41

6666!支持!!!

badboytcq 发表于 2018-1-30 02:08

发出来吧需要
页: [1] 2 3
查看完整版本: 【注册机制作】 某二手车发票管理系统