錦州市廣廈電腦維修|上門維修電腦|上門做系統|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共享上網,路由器設置,數據恢復,密碼破解,光盤刻錄制作等服務

    技術支持:微軟等
    主站蜘蛛池模板: 影院无码人妻精品一区二区| 五月婷婷无码观看| 国产亚洲?V无码?V男人的天堂 | 亚洲成AV人片在线播放无码| 亚洲精品无码成人AAA片| 亚洲av永久无码精品天堂久久| 无码中文2020字幕二区| 无码日韩精品一区二区三区免费| 亚洲av永久中文无码精品| 亚洲一区无码中文字幕| 日韩精品无码人妻免费视频| 免费人妻无码不卡中文字幕系| 国产成人无码午夜福利软件| 中文有码无码人妻在线| 亚洲熟妇无码AV在线播放| 免费无码国产V片在线观看| 99精品国产在热久久无码 | 欧洲精品久久久av无码电影| 国产精品无码av片在线观看播| 人妻丰满熟妇岳AV无码区HD| 国产色综合久久无码有码 | 97免费人妻无码视频| 永久免费AV无码网站国产| 国产成年无码v片在线| 亚洲精品无码成人| 精品无码国产自产在线观看水浒传| av无码一区二区三区| 久青草无码视频在线观看| 天码av无码一区二区三区四区| 亚洲日韩国产AV无码无码精品| 中文字幕无码精品亚洲资源网久久| 国产AV无码专区亚洲A∨毛片| 国产成人精品无码一区二区三区| 亚洲精品无码久久不卡| 亚洲男人在线无码视频| 自慰无码一区二区三区| 免费看成人AA片无码视频吃奶| 国产精品毛片无码| 黄桃AV无码免费一区二区三区| YW尤物AV无码国产在线观看| 亚洲日韩欧洲无码av夜夜摸|