首頁 資料庫 mysql教程 .NET 源代码的安全性(源代码工具真正比拼) (論)(2)

.NET 源代码的安全性(源代码工具真正比拼) (論)(2)

Jun 07, 2016 pm 03:17 PM
.net 安全性 工具 打字 比拼 原始碼

打字好累,所以废话少讲,我们切入正题。 今天被屠宰的对象就是 我们公司使用 vb.net开发的一套管理系统。名字就不说了,此系统主程序约3M,其中共有约 3000个方法,事件,等等。是一个中大型的程序,源代码约有 5万行左右(去掉一些自动生成的代码计算后)

打字好累,所以废话少讲,我们切入正题。

今天被屠宰的对象就是 我们公司使用vb.net开发的一套管理系统。名字就不说了,此系统主程序约3M,其中共有约 3000个方法,事件,等等。是一个中大型的程序,源代码约有 5万行左右(去掉一些自动生成的代码计算后),其中有底层硬件操作类,也有水晶报表操作,数据库操作。我们最关心的是其中的一块,注册类,以及一些核心代码。而我们演示的时候将会把注册代码拿出来演示(当然,不是原来的注册代码。。。那个拿出去,BOSS要杀我的)

<span> </span>

而代码保护工具的主角是:

1.   Dotfuscator Community Edition //微软推荐的东东,我个人认为非常烂

2.   XeonCode              //最近最好的混淆器,有可取点.它号称安全,我们今

//天来看看是不是真的安全

3.   MaxtoCode            //一个不同于混淆的.NET源码工具 MaxtoCode

//目前普及版只支持 WindowsApplication的加密

//以后开放 WEB APPlication and Class Library

<span> </span>

我们的反编译目标分为二种:

1.      C#语言

2.      MSIL语言

使用的全是市场上流通的免费反编译工具,我知道收费的反编译工具还会自动还源混淆.收费的我也没有条件去测试

<span> </span>

<span> </span>

,开始测试:

我们分别使用上面三样对代码进行混淆或加密。

完毕,测试程序所有功能:

1.      Dotfuscator Community Edition 我最不喜欢的混淆器,由于是1.2免费版,所以必须混淆所有模块,导致部分功能不能使用。但我们不关心那些,我们一会将展现被混淆的注册代码(因为类和方法都被混淆,所以必须要花点时间)

2.      XeonCode 一个相对强大的混淆工具,我一直认为他与某著名的反编译工具捆绑,导至其它工具能反编译的代码而它不能反编译。我们把它的强度开到最大,勾上所有能勾的选项。(它混淆的Windows Application可以正常运行)

3.      MaxtoCode 这是一个加密器,可以与XeonCode叠加使用,并且在2.0版中,将会加入自混淆功能,成为混淆加密一体化的工具。(它混淆的 Windows Applicaton 可以正常运行)

<span> </span>

我们最关心的是混淆或加密的结果。OK,请不要急,让我们先看看源代码,再比较一下反编译后的代码。

<span> </span>

    Private Function Encrypt(ByVal inStr As String) As String

<span> </span>

        Dim key As String = "a#2151336fdaghksfges"

        Dim out As String

        Dim j, i, s As Integer

        i = inStr.Length

        s = 0

        For j = 0 To i - 1

            out = out + inStr.Substring(j, 1) + key.Substring(s, 1)

            s = s + 1

            If s >= 20 Then s = 0

        Next

        Return out

<span> </span>

    End Function

<span> </span>

    Private Function Register(ByVal instr As String) As String

        Dim pRsa As New System.Security.Cryptography.RSACryptoServiceProvider

        Dim en As New System.Text.ASCIIEncoding

        Return en.GetString(pRsa.Encrypt(en.GetBytes(Encrypt(instr)), False))

        'Dim a As String

        'a = Encrypt(instr)

        'Dim b() As Byte

        'Dim c() As Byte

        'b = en.GetBytes(a)

        'c = pRsa.Encrypt(b, False)

        'Return en.GetString(c)

          这里怕大家看不清楚,特别加了展开的代码

End Function

<span> </span>

源代码很清楚,即是对字符串进行插入,然后使用 RSA 进行加密(这里省去了RSA的KEY)

 

好,那么我们首先来看看使用上面三种工具混淆后的C#代码

<span> </span>

1.   Dotfuscator Community Edition

<span>private</span><span> <font>string</font> <b>b</b>(<font>string</font> A_0)<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span>{<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span>      </span><font>string</font> <b>text3</b>;<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span>      </span><font>string</font> <b>text2</b> = <span>"a#2151336fdaghksfges"</span>;</span>
登入後複製
<span><span>      </span><font>int</font> <b>num1</b> = A_0.<font>Length</font>;</span>
登入後複製
<span><span>      </span><font>int</font> <b>num3</b> = <span>0</span>;</span>
登入後複製
<span><span>      </span><font>int</font> <b>num4</b> = num1 - <span>1</span>;</span>
登入後複製
<span><span>      </span><span>for</span> (<font>int</font> <b>num2</b> = <span>0</span>; num2 </span>
登入後複製
<span><span>      </span>{</span>
登入後複製
<span><span>            </span>text3 = text3 + A_0.<font>Substring</font>(num2, <span>1</span>) + text2.<font>Substring</font>(num3, <span>1</span>);</span>
登入後複製
<span><span>            </span>num3++;</span>
登入後複製
<span><span>            </span><span>if</span> (num3 >= <span>20</span>)</span>
登入後複製
<span><span>            </span>{</span>
登入後複製
<span><span>                  </span>num3 = <span>0</span>;</span>
登入後複製
<span><span>            </span>}</span>
登入後複製
<span><span>      </span>}</span>
登入後複製
<span><span>      </span><span>return</span> text3;</span>
登入後複製
<span>}</span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

<span> </span>

<span>private</span><span> <font>string</font> <b>a</b>(<font>string</font> A_0)</span>
登入後複製
<span>{</span>
登入後複製
登入後複製
登入後複製
登入後複製
<span><span>      </span><font>RSACryptoServiceProvider</font> <b>provider1</b> = <span>new</span> <font>RSACryptoServiceProvider</font>();</span>
登入後複製
登入後複製
<span><span>      </span><font>ASCIIEncoding</font> <b>encoding1</b> = <span>new</span> <font>ASCIIEncoding</font>();</span>
登入後複製
登入後複製
<span><span>      </span><span>return</span> encoding1.<font>GetString</font>(provider1.<font>Encrypt</font>(encoding1.<font>GetBytes</font>(<span>this</span>.<font>b</font>(A_0)), <span>false</span>));</span>
登入後複製
<span>}</span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

<span> </span>

评价:跟原代码一模一样,只是混淆了类和方法名称,代码中根本未进行混淆,由于是免费版,也只能提供这么多功能.毫无意义

<span> </span>

2.   XeonCode

<span> </span>

<span>private string x246b032720dd4c0d(string x96c91b85a03f00b0)</span>
登入後複製
<span><span><span>        </span>{</span></span>
登入後複製
<span><span><span>            </span>string str2;</span></span>
登入後複製
<span><span> </span></span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span><span>            </span>string str3;</span></span>
登入後複製
<span><span> </span></span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span><span>            </span>int k;</span></span>
登入後複製
<span><span> </span></span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span><span>            </span>int j;</span></span>
登入後複製
登入後複製
<span><span> </span></span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span><span>            </span>str2 = String.Intern(x1110bdd110cdcea4._d574bb1a8f3e9cbc("/uec3b/uf2fa/ufa06/u0102/u0803/u0efc/u15fb/u1cf8/u23f8/u2b25/u3220/u391a/u401d/u471b/u4e1b/u5520/u5c10/u630e/u6a09/u7114", 281144282));</span></span>
登入後複製
<span><span><span>            </span>int i1 = x96c91b85a03f00b0.Length;</span></span>
登入後複製
<span><span><span>            </span>k = 0;</span></span>
登入後複製
登入後複製
<span><span><span>          </span><span>  </span>i2 = i1 - 1;</span></span>
登入後複製
<span><span><span>            </span>j = 0;</span></span>
登入後複製
<span><span><span>            </span>goto IL_003c;</span></span>
登入後複製
<span><span><span>            </span>VariableExp: k</span></span>
登入後複製
登入後複製
<span><span><span>            </span>ConstantExp: 20</span></span>
登入後複製
<span><span><span>      </span>IL_0029:<span>  </span>blt.s<span>      </span>IL_0038<span>  </span>//自动的跳转混合</span></span>
登入後複製
<span><span><span>            </span>k = 0;</span></span>
登入後複製
登入後複製
<span><span><span>            </span>goto IL_0038;<span>  </span><span>  </span>//花指令</span></span>
登入後複製
<span><span><span>            </span>ConstantExp: 1</span></span>
登入後複製
<span><span><span>      </span>IL_0031:<span>  </span>add.ovf<span>    </span></span></span>
登入後複製
<span><span><span>      </span>IL_0032:<span>  </span>stloc.s<span>    </span>5</span></span>
登入後複製
<span><span><span>            </span>VariableExp: k</span></span>
登入後複製
登入後複製
<span><span><span>            </span>int j;</span></span>
登入後複製
登入後複製
<span><span> </span></span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span><span>            </span>int i2;</span></span>
登入後複製
<span><span> </span></span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><span>IL_0038:</span></span>
登入後複製
<span><span><span>            </span>j++;</span></span>
登入後複製
<span><span><span>            </span>if (j > i2)</span></span>
登入後複製
<span><span>            </span>{</span>
登入後複製
<span><span><span>                </span>return str3;</span></span>
登入後複製
<span><span>            </span>}</span>
登入後複製
<span><span><span>            </span>str3 = String.Concat(str3, x96c91b85a03f00b0.Substring(j, 1), str2.Substring(k, 1));</span></span>
登入後複製
<span><span><span>        </span>}</span></span>
登入後複製

<span> </span>

<span>private</span><span> <font>string</font> <b>x2a0cb95ab84ba877</b>(<font>string</font> x5b3e4cba383dedd9)</span>
登入後複製
<span>{</span>
登入後複製
登入後複製
登入後複製
登入後複製
<span><span>      </span><font>RSACryptoServiceProvider</font> <b>provider1</b> = <span>new</span> <font>RSACryptoServiceProvider</font>();</span>
登入後複製
登入後複製
<span><span>      </span><font>ASCIIEncoding</font> <b>encoding1</b> = <span>new</span> <font>ASCIIEncoding</font>();</span>
登入後複製
登入後複製
<span><span>      </span><span>return</span> encoding1.<font>GetString</font>(provider1.<font>Encrypt</font>(encoding1.<font>GetBytes</font>(<span>this</span>.<font>x246b032720dd4c0d</font>(x5b3e4cba383dedd9)), <span>false</span>));</span>
登入後複製
<span>}</span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span> </span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span>评价<span lang="EN-US">:<font>功能强大许多,对于较长的代码会加入花指令进行混淆,从而达到混淆反编译器的目地.<br>     </font></span></span><span><span lang="EN-US"><font>这种混淆已经是XeonCode的最大混淆较果,虽然有达到混淆反编译的较果,但耐心仔细的看,并结合IL<br>     </font></span></span><span><font>代码一起阅读</font><span lang="EN-US"><font>,想得到其其算法是一件很容易的事情,最重要的是,<br>     有某些反编译器竟然可以去掉花指令,从而达反混淆的较果.<br>     所以使用它来保护你的知识版权是不是还不够强大呢?</font></span></span>
登入後複製
<span> </span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製

3.   MaxtoCode

<span>private</span><span> <font>string</font> <b>Encrypt</b>(<font>string</font> inStr)</span>
登入後複製
<span>{</span>
登入後複製
登入後複製
登入後複製
登入後複製
<span>}</span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span> </span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span>private</span><span> <font>string</font> <b>Register</b>(<font>string</font> instr)</span>
登入後複製
<span>{</span>
登入後複製
登入後複製
登入後複製
登入後複製
<span>}</span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span> </span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span>评价<span lang="EN-US">:<font>代码呢????代码已经不见了……不过这就是MaxtoCode的功效,它是加密,不是混淆,你看不到代码了,<br>     你完全无法入手去分析,那怕一点珠丝马迹都没有.您还可以结合XeonCode一起使用,<br>     达到双重的保护(因为现版本的MaxtoCode不提供混淆功能,您能清楚的看到类及方法的正确名称)</font></span></span>
登入後複製
<span> </span>
登入後複製
登入後複製
登入後複製
登入後複製
登入後複製
<span><strong>好</strong><span lang="EN-US"><strong>,刚刚展现的是反编译出来的C#代码,那么,我们再深入一点,真接反汇编为MSIL代码看看能达到什么较果</strong></span></span>
登入後複製
<span>待继。。。<span lang="EN-US"></span></span>
登入後複製
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1272
29
C# 教程
1252
24
幣安廣場怎麼樣可靠嗎 幣安廣場怎麼樣可靠嗎 May 07, 2025 pm 07:18 PM

幣安廣場(Binance Square)是幣安交易所提供的一個社交媒體平台,旨在為用戶提供一個交流和分享加密貨幣相關信息的空間。本文將詳細探討幣安廣場的功能、可靠性以及用戶體驗,幫助你更好地了解這個平台。

2025年十大數字虛擬幣交易APP排行 十大數字幣交易所app匯總 2025年十大數字虛擬幣交易APP排行 十大數字幣交易所app匯總 May 08, 2025 pm 05:24 PM

2025年十大數字虛擬幣交易APP排行:1. Binance:全球領先,提供高效交易和多種金融產品。 2. OKX:創新多樣,支持多種交易類型。 3. Huobi:穩定可靠,服務優質。 4. Coinbase:新手友好,界面簡潔。 5. Kraken:專業交易者首選,工具強大。 6. Bitfinex:高效交易,交易對豐富。 7. Bittrex:安全合規,監管合作。

歐意OKX6.118.0版本最新下載教程 歐意OKX6.118.0版本最新下載教程 May 07, 2025 pm 06:51 PM

歐意OKX6.118.0版本最新下載教程:1、點擊文章中快捷鏈接;2、點擊下載即可(如果是網頁用戶請先進行信息註冊)。最新安卓版本v6.118.0優化了部分功能和體驗,讓交易更容易。立即更新App,感受更加極致的交易體驗。

2025幣安Binance交易所最新登錄入口 2025幣安Binance交易所最新登錄入口 May 07, 2025 pm 07:03 PM

幣安(Binance)作為全球領先的加密貨幣交易所,始終致力於為用戶提供安全、便捷的交易體驗。隨著時間的推移,幣安不斷優化其平台功能和用戶界面,以滿足用戶不斷變化的需求。 2025年,幣安推出了新的登錄入口,旨在進一步提升用戶體驗。

ok交易所國內如何註冊? ok交易平台大陸新手註冊使用指南 ok交易所國內如何註冊? ok交易平台大陸新手註冊使用指南 May 08, 2025 pm 10:51 PM

在加密貨幣市場中,選擇一個可靠的交易平台是至關重要的。 OK交易平台作為全球知名的數字資產交易所,吸引了大量大陸新手用戶。本指南將詳細介紹如何在OK交易平台上進行註冊和使用,幫助新手用戶快速上手。

.NET Core快速入門教程 1、開篇:說說.NET Core的那些事兒 .NET Core快速入門教程 1、開篇:說說.NET Core的那些事兒 May 07, 2025 pm 04:54 PM

一、.NETCore的起源談到.NETCore,就不能不提它的前身.NET。當年Java風頭正盛,微軟也對Java青睞有加,Windows平台上的Java虛擬機就是微軟依據JVM標准開發的,據稱是當時性能最佳的Java虛擬機。然而,微軟有自己的小算盤,試圖將Java與Windows平台捆綁,增加一些Windows特有的功能。 Sun公司對此不滿,導致雙方關係破裂,微軟隨後推出了.NET。 .NET從誕生之初就借鑒了Java的許多特性,並在語言特性和窗體開發等方面逐漸超越了Java。 Java在1.6版

為Web開發者準備的10個最新工具 為Web開發者準備的10個最新工具 May 07, 2025 pm 04:48 PM

Web開發設計是一個充滿潛力的職業領域。然而,這個行業也面臨著諸多挑戰。隨著越來越多的企業和品牌轉向網絡市場,Web開發者有機會展示他們的技能並在職業生涯中取得成功。然而,隨著對Web開發需求的持續增長,開發人員的數量也在增加,導致競爭日益激烈。但令人振奮的是,如果你具備天賦和意願,你總能找到新方法來創造獨特的設計和創意。作為一名Web開發人員,你可能需要不斷尋找新的工具和資源。這些新工具和資源不僅能讓你的工作更加便捷,還能提升工作質量,從而幫助你贏得更多的業務和客戶。 Web開發的趨勢不斷變化,

期貨交易平台TOP10:永續合約與期權交易 期貨交易平台TOP10:永續合約與期權交易 May 08, 2025 pm 07:12 PM

在加密貨幣市場中,期貨交易平台扮演著重要角色,尤其是在永續合約和期權交易方面。以下是當前市場上備受推崇的十大期貨交易平台,並詳細介紹它們在永續合約和期權交易方面的特點和優勢。

See all articles