錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務,錦州廣廈維修電腦,公司IT外包服務
topFlag1 設為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務項目 服務報價 維修流程 IT外包服務 服務器維護 技術文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統|0416-3905144熱誠服務技術文章
記一款.net軟件的注冊分析[.NET逆向]

作者: 佚名  日期:2018-06-20 18:44:55   來源: 本站整理

 軟件名稱:深藍取模工具 2018夏季版
官網地址:http://www.cybertrons.cn/SoftwareDownload/dmt2.aspx
使用工具:ScanId、de4dot、dnspy




第一步:使用ScanId查殼,發現有混淆,使用de4dot脫殼,然后載入dnspy
 
要找到注冊點擊事件很簡單
this.tBoxSerialNo.Text就是輸入的假碼

[C#] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
public static string smethod_1(string string_2, string string_3)/進入smethod_1發現會對假碼進行解密
        {
                string text = Class4.string_1;
                string result = string.Empty;
                try
                {
                        char[] array = new char[8];
                        if (string_2.Length > 8)
                        {
                                string_2 = string_2.Remove(8);
                        }
                        string_2.CopyTo(0, array, 0, string_2.Length);
                        char[] array2 = new char[8];
                        if (text.Length > 8)
                        {
                                text = text.Remove(8);
                        }
                        text.CopyTo(0, array2, 0, text.Length);
                        if (string_3 == null || string_3 == "")
                        {
                                return result;
                        }
                        SymmetricAlgorithm symmetricAlgorithm = new DESCryptoServiceProvider();
                        symmetricAlgorithm.Key = Encoding.ASCII.GetBytes(array);
                        symmetricAlgorithm.IV = Encoding.ASCII.GetBytes(array2);
                        byte[] buffer = Convert.FromBase64String(string_3);
                        MemoryStream memoryStream = new MemoryStream(buffer);
                        CryptoStream cryptoStream = new CryptoStream(memoryStream, symmetricAlgorithm.CreateDecryptor(), CryptoStreamMode.Read);
                        StreamReader streamReader = new StreamReader(cryptoStream);
                        result = streamReader.ReadToEnd();
                        streamReader.Dispose();
                        cryptoStream.Dispose();
                        memoryStream.Dispose();
                        symmetricAlgorithm.Clear();
                }
                catch (Exception)
                {
                        return "密鑰錯誤,數據包解密失敗.";
                }
                return result;
        }



在注冊事件下面又能找到機器碼的生成

[C#] 純文本查看 復制代碼
1
2
3
4
5
6
private void RegisteredForm_Load(object sender, EventArgs e)
                {
                        this.tBoxMac.Text = Class4.smethod_0(this.string_1, Class3.smethod_8()); /機器碼的生成
                        string string_ = Class4.smethod_1(Class4.string_0, Class6.smethod_2("Shinkpod"));
                        this.tBoxSerialNo.Text = Class4.smethod_0(this.string_0, string_);
                }


進入smethod_0看看

[C#] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public static string smethod_0(string string_2, string string_3)/這個應該就是加密函數了
        {
                string text = Class4.string_1;
                char[] array = new char[8];
                if (string_2.Length > 8)
                {
                        string_2 = string_2.Remove(8);
                }
                string_2.CopyTo(0, array, 0, string_2.Length);
                char[] array2 = new char[8];
                if (text.Length > 8)
                {
                        text = text.Remove(8);
                }
                text.CopyTo(0, array2, 0, text.Length);
                if (string_3 != null && !(string_3 == ""))
                {
                        SymmetricAlgorithm symmetricAlgorithm = new DESCryptoServiceProvider();
                        symmetricAlgorithm.Key = Encoding.ASCII.GetBytes(array);
                        symmetricAlgorithm.IV = Encoding.ASCII.GetBytes(array2);
                        MemoryStream memoryStream = new MemoryStream();
                        CryptoStream cryptoStream = new CryptoStream(memoryStream, symmetricAlgorithm.CreateEncryptor(), CryptoStreamMode.Write);
                        StreamWriter streamWriter = new StreamWriter(cryptoStream);
                        streamWriter.Write(string_3);
                        streamWriter.Dispose();
                        cryptoStream.Dispose();
                        byte[] inArray = memoryStream.ToArray();
                        memoryStream.Dispose();
                        symmetricAlgorithm.Clear();
                        return Convert.ToBase64String(inArray);
                }
                return string.Empty;
        }


小白不太會解釋,所以下面就動態調試一下吧
 
smethod_8這返回的text2 + text3 + text4實際上是未加密前的機器碼
 
 
string_為解密從注冊表中讀出的注冊碼(未注冊時注冊表中當然就沒有注冊碼了)
隨后又對注冊碼進行加密顯示為this.tBoxSerialNo.Text
以上就是機器碼和注冊碼的形成,一系列的加密解密過程,看似很麻煩,但是我們只需要挑重點的

[C#] 純文本查看 復制代碼
1
2
string text = Class4.smethod_1(this.string_0, this.tBoxSerialNo.Text);
                        if (text == Class3.smethod_9(Class3.smethod_8()))


我們回到注冊事件,看看要滿足什么條件才能注冊成功
Class3.smethod_8我們通過機器碼如何形成的分析中可以知道它返回的就是未加密前的機器碼

[C#] 純文本查看 復制代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
public static string smethod_9(string string_8)
        {
                string text = string_8.Substring(0, 8);
                string text2 = string_8.Substring(8, 8);
                string text3 = string_8.Substring(16, 8);
                uint num = Convert.ToUInt32(text, 16) + 573920429u;
                uint num2 = Convert.ToUInt32(text2, 16) + 2783279276u;
                uint num3 = Convert.ToUInt32(text3, 16) + 3706659863u;
                text = Convert.ToString((long)((ulong)num), 16).ToUpper().PadLeft(8, 'A');
                text2 = Convert.ToString((long)((ulong)num2), 16).ToUpper().PadLeft(8, 'B');
                text3 = Convert.ToString((long)((ulong)num3), 16).ToUpper().PadLeft(8, 'C');
                return text + text2 + text3;
        }


因此注冊成功的條件為:解密后的注冊碼應==Class3.smethod_9(Class3.smethod_8())
 
對Class3.smethod_8追下去可以看出機器碼的生成是與網卡有關的
簡單的分析就到這了



接下來是注冊機的制作
首先要明確 Class4.smethod_0是加密函數, Class4.smethod_1是解密函數;
我們需要對加密后的機器碼進行解密得到未加密的機器碼(即Class3.smethod_8的返回值)

[C#] 純文本查看 復制代碼
1
2
3
string text = smethod_1("kdet@1&j", textBox1.Text);                                   /調用smethod_1對機器碼進行解密
                string text2 = smethod_9(text);                                                 /調用smethod_9生成未加密的注冊碼
                textBox2.Text = smethod_0("3~2t@1!7", text2);                               /對注冊碼進行加密


以上就是注冊機的主要思路
效果如圖:
 




后記:第一次遇到這種有點麻煩的注冊,對機器碼和注冊碼都需要進行加密和解密,可能是作者為了防止直接的明碼顯示吧
一直都有大佬跟我說國產的注冊機要慎發,所以這次只討論該軟件的算法,不提供注冊機
歡迎大家探討學習,以上分析如果有疑問的可在回復中指出



熱門文章
  • 機械革命S1 PRO-02 開機不顯示 黑...
  • 聯想ThinkPad NM-C641上電掉電點不...
  • 三星一體激光打印機SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數和判...
  • IIS 8 開啟 GZIP壓縮來減少網絡請求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機始終停留在開機界面...
  • 常見打印機清零步驟
  • 安裝驅動時提示不包含數字簽名的解...
  • 共享打印機需要密碼的解決方法
  • 圖解Windows 7系統快速共享打印機的...
  • 錦州廣廈電腦上門維修

    報修電話:13840665804  QQ:174984393 (聯系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號:遼ICP備2023002984號-1
    上門服務區域: 遼寧錦州市區
    主要業務: 修電腦,電腦修理,電腦維護,上門維修電腦,黑屏藍屏死機故障排除,無線上網設置,IT服務外包,局域網組建,ADSL共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 日韩乱码人妻无码中文字幕视频| av无码国产在线看免费网站| 91无码人妻精品一区二区三区L| 亚洲av无码国产精品色午夜字幕| 久久久久亚洲AV成人无码 | 亚洲日韩欧洲无码av夜夜摸| 久久久久久久无码高潮| 免费A级毛片无码A| 无码av免费网站| 中文无码AV一区二区三区| 2019亚洲午夜无码天堂| 欧洲精品无码一区二区三区在线播放| 69堂人成无码免费视频果冻传媒| 亚洲成a人在线看天堂无码| 亚洲爆乳AAA无码专区| 一本加勒比hezyo无码专区 | 熟妇人妻无码xxx视频| 久久久久成人精品无码中文字幕 | 粉嫩大学生无套内射无码卡视频| 国外AV无码精品国产精品| 无码日韩人妻精品久久蜜桃| av无码一区二区三区| av中文无码乱人伦在线观看| 一本久道综合在线无码人妻| 亚洲AV无码久久精品色欲| 亚洲精品无码久久千人斩| 中文无码精品一区二区三区| 国产精品无码一区二区三区免费| 亚洲乱人伦中文字幕无码| 亚洲AV无码一区二区三区牛牛| 久久久久亚洲AV成人无码| 无码人妻一区二区三区在线视频 | 无码熟妇人妻AV影音先锋| 无码国产乱人伦偷精品视频 | 亚洲精品无码久久| 亚洲av无码一区二区三区四区| AV无码精品一区二区三区| 亚洲av无码一区二区三区天堂古代| 亚洲av无码不卡| 免费看又黄又无码的网站| 中文无码热在线视频|