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

    技術支持:微軟等
    主站蜘蛛池模板: 无码人妻精品一区二区三区东京热 | 亚洲精品97久久中文字幕无码| 久久精品无码专区免费东京热| 亚洲国产精品无码久久久| 69成人免费视频无码专区| 无码日韩精品一区二区免费暖暖 | 天码av无码一区二区三区四区| 日本无码色情三级播放| 无码人妻丰满熟妇区BBBBXXXX| 久青草无码视频在线观看| 麻豆aⅴ精品无码一区二区| 国产在线无码精品无码| 亚洲中文字幕无码av| 久久久久久AV无码免费网站| r级无码视频在线观看| 免费无码精品黄AV电影| 久久ZYZ资源站无码中文动漫| 人妻少妇AV无码一区二区| 色综合99久久久无码国产精品| 日韩午夜福利无码专区a| 久久久久无码国产精品不卡 | 国产成人无码免费网站| 亚洲日韩精品无码专区加勒比| 亚洲av永久无码精品表情包| heyzo高无码国产精品| 国产在线无码视频一区| 精品无码国产一区二区三区51安 | 国产成人无码精品久久二区三区| 无码少妇一区二区性色AV| 免费无码一区二区三区蜜桃| 用舌头去添高潮无码视频| 人妻精品无码一区二区三区| 久久亚洲精品无码VA大香大香 | 午夜福利无码不卡在线观看 | mm1313亚洲国产精品无码试看| 亚洲中文字幕无码mv| 国产乱妇无码大片在线观看| 精品三级AV无码一区| 无码精品A∨在线观看十八禁 | 92午夜少妇极品福利无码电影| 无码人妻黑人中文字幕|