錦州市廣廈電腦維修|上門維修電腦|上門做系統|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无码专区| 在线精品无码字幕无码AV| 亚洲av无码片区一区二区三区| 无码H黄肉动漫在线观看网站| 亚洲youwu永久无码精品| 中文字幕AV中文字无码亚| 国产精品无码无片在线观看| HEYZO无码中文字幕人妻 | 久久久久亚洲AV无码专区桃色| 无码欧精品亚洲日韩一区夜夜嗨| 久久久久久亚洲av成人无码国产| 免费A级毛片无码久久版| 亚洲私人无码综合久久网| 久久久久久久无码高潮| 夜夜精品无码一区二区三区| 精品无码国产污污污免费| 免费无码一区二区三区蜜桃 | av色欲无码人妻中文字幕| 日韩AV高清无码| 在线无码午夜福利高潮视频| 亚洲国产精品无码久久久不卡 | 中文字幕人成无码人妻| 超清无码无卡中文字幕| 韩国无码AV片在线观看网站| 熟妇人妻无码中文字幕| 永久免费AV无码网站国产| 无码一区二区三区爆白浆| 人妻丰满熟妇AV无码区乱| 亚洲av无码乱码国产精品| 亚洲AV无码一区二三区| 午夜寂寞视频无码专区| 精品人妻无码区在线视频| 无码人妻AⅤ一区二区三区| 国产乱人无码伦av在线a| 亚洲国产成人精品无码区在线观看| 精品一区二区无码AV| 三上悠亚ssⅰn939无码播放| 亚洲欧洲自拍拍偷午夜色无码| 国产色无码精品视频免费| 免费看无码特级毛片|