吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2590|回复: 30
收起左侧

[求助] 请教用.NET Reflector载入后如何进行分析,教会的有悬赏。

[复制链接]
njcj2008 发表于 2020-9-30 16:42
50吾爱币
今天有一个软件。.net语言的软件,以前接触的都是delphi的,对OD有一定的了解,
但是今天突然接触到.net的,提示下面这张图片这种,脑袋一片迷茫。

22.png

用.NET Reflector载入后如何进行分析,研究了几天一直没看懂,请问有哪一们大神给点教程或者思路。在此谢过。




最佳答案

查看完整内容

反编译软件,看注册码判断的地方: [mw_shl_code=csharp,true]private void BtnRegister_Click(object sender, EventArgs e) { try { string register = TbRegisterCode.Text.Trim(); string code = TbMachineCode.Text.Trim(); string machine = DES.GetMachine(register); if (machine.Equals(code)) { ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

vipcrack 发表于 2020-9-30 16:42
本帖最后由 vipcrack 于 2020-9-30 19:29 编辑
njcj2008 发表于 2020-9-30 19:21
我是想要方法,最后得来的码的方法,我只是想学习这个线路,麻烦详解。谢了。(而且每个机器的码都不同。 ...

反编译软件,看注册码判断的地方:

[C#] 纯文本查看 复制代码
private void BtnRegister_Click(object sender, EventArgs e)
{
        try
        {
                string register = TbRegisterCode.Text.Trim();
                string code = TbMachineCode.Text.Trim();
                string machine = DES.GetMachine(register);
                if (machine.Equals(code))
                {
                        dal.Register(register);
                        base.DialogResult = DialogResult.OK;
                        Close();
                        return;
                }
                throw new Exception("Registration key mismatch");
        }
        catch (Exception ex)
        {
                MessageBox.Show(ex.Message, "Tips");
        }
}


machine.Equals(code),是说你输入的注册信息,DES.GetMachine(register)用这个函数解密后,必须等于机器码。

那么去看这个函数

[C#] 纯文本查看 复制代码
public static string GetMachine(string pToDecrypt)
{
        if (string.IsNullOrWhiteSpace(pToDecrypt))
        {
                return string.Empty;
        }
        string str = Decrypt(pToDecrypt, key);//这里用des的key来对输入的注册码解码
        return str.Substring(0, str.Length - 3);//解码后的数据,去掉后3位
}

也就是说解密输入的注册码后的内容,去掉后3位必须等于机器码。

那么我们把机器码和后3位加密回去就是注册码,加密需要用到函数
[C#] 纯文本查看 复制代码
public static string Encrypt(string pToEncrypt, string sKey)
{
        try
        {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
                des.Key = Encoding.ASCII.GetBytes(sKey);
                des.IV = Encoding.ASCII.GetBytes(sKey);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                StringBuilder ret = new StringBuilder();
                byte[] array = ms.ToArray();
                foreach (byte b in array)
                {
                        ret.AppendFormat("{0:X2}", b);
                }
                ret.ToString();
                return ret.ToString();
        }
        catch (Exception)
        {
                return "";
        }
}


这两个函数都是DES这个类中,直接复制代码出来,然后做注册机就行。

这里的后三位可以从代码里看到是啥?:
[C#] 纯文本查看 复制代码
public static int GetNum(string pToDecrypt)
{
        if (string.IsNullOrWhiteSpace(pToDecrypt))
        {
                return 0;
        }
        string str = Decrypt(pToDecrypt, key);
        string num = str.Substring(str.Length - 3);
        return Convert.ToInt32(num);
}


这里可以看到是注册界面的key后面的数据,不知道干啥的,我没SQL环境。

[C#] 纯文本查看 复制代码
private void InitialLoad()
{
        try
        {
                LblSoftwareVerNO.Text = "3.20.0003";
                chkBase64.Checked = (GetConfigValue("UseBase64", pathConfig) == "1");
                string uuid = ComputerHelper.GetUniqueIdentification();
                TbMachineCode.Text = uuid;
                string key = DecryptKeyDAL.GetKey();
                lblKeyNum.Text = DES.GetNum(key).ToString();
                TbRegisterCode.Text = (DES.GetMachine(key).Equals(uuid) ? DecryptKeyDAL.GetKey() : string.Empty);
        }
        catch (Exception e)
        {
                MessageBox.Show(e.Message, "Error");
        }
}


知道了这些,就把DES里用到的Encrypt函数,keys,key常量复制出来,然后用C#弄个界面,写成注册机就行了,代码就是前面我回复的代码。

[C#] 纯文本查看 复制代码
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;

namespace keygen
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private static byte[] Keys = new byte[8]
            {
        52,
        17,
        6,
        239,
        154,
        52,
        17,
        16
            };

        private static string key = "bxu+ss@q";
        public static string Encrypt(string pToEncrypt, string sKey)
        {
            try
            {
                DESCryptoServiceProvider des = new DESCryptoServiceProvider();
                byte[] inputByteArray = Encoding.Default.GetBytes(pToEncrypt);
                des.Key = Encoding.ASCII.GetBytes(sKey);
                des.IV = Encoding.ASCII.GetBytes(sKey);
                MemoryStream ms = new MemoryStream();
                CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write);
                cs.Write(inputByteArray, 0, inputByteArray.Length);
                cs.FlushFinalBlock();
                StringBuilder ret = new StringBuilder();
                byte[] array = ms.ToArray();
                foreach (byte b in array)
                {
                    ret.AppendFormat("{0:X2}", b);
                }
                ret.ToString();
                return ret.ToString();
            }
            catch (Exception)
            {
                return "";
            }
        }
        private void button1_Click(object sender, EventArgs e)
        {
            string str = Encrypt(textBox1.Text+"999", key);
            textBox2.Text = str;
        }
    }
}


界面上放两个TextBox一个Button就行了,Button代码用上面的。

QQ截图20200930192908.png
头像被屏蔽
细水流长 发表于 2020-9-30 16:47
 楼主| njcj2008 发表于 2020-9-30 16:49
细水流长 发表于 2020-9-30 16:47
.net程序没有混淆的话就相当于把源码给你了,这还不会吗?

因为不会.net语言,所以不会,如果可以帮忙的话,太感谢 了。
头像被屏蔽
细水流长 发表于 2020-9-30 16:53
提示: 作者被禁止或删除 内容自动屏蔽
longiana 发表于 2020-9-30 16:56
register 方法返回bool 估计直接修改这个返回值即可
ppszxc 发表于 2020-9-30 17:17
直接导出源码,用vs软件打开源码,重新修改。
不知道改成啥 发表于 2020-9-30 17:18
用dnSpy分分钟搞定,不.net的人用这个还能好点
不忘初心哟 发表于 2020-9-30 17:18
winform程序 反编译很简单
 楼主| njcj2008 发表于 2020-9-30 17:20
不忘初心哟 发表于 2020-9-30 17:18
winform程序 反编译很简单

C#看不懂的样子,是否可以麻烦教一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 06:34

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表