.NET 源代码的安全性(源代码工具真正比拼) (論)(2)
打字好累,所以废话少讲,我们切入正题。 今天被屠宰的对象就是 我们公司使用 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>

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

隨著數字貨幣的普及和發展,越來越多的人開始關注和使用數字貨幣app。這些應用程序為用戶提供了便捷的管理和交易數字資產的方式。那麼,數字貨幣app到底是什麼軟件呢?讓我們深入了解,並盤點全球十大數字貨幣app。

交易所內置量化工具包括:1. Binance(幣安):提供Binance Futures量化模塊,低手續費,支持AI輔助交易。 2. OKX(歐易):支持多賬戶管理和智能訂單路由,提供機構級風控。獨立量化策略平台有:3. 3Commas:拖拽式策略生成器,適用於多平台對沖套利。 4. Quadency:專業級算法策略庫,支持自定義風險閾值。 5. Pionex:內置16 預設策略,低交易手續費。垂直領域工具包括:6. Cryptohopper:雲端量化平台,支持150 技術指標。 7. Bitsgap:

推薦的加密貨幣交易平台包括:1. Binance:全球最大交易量,支持1400 幣種,FCA、MAS認證。 2. OKX:技術實力強,支持400 幣種,香港證監會批准。 3. Coinbase:美國最大合規平台,適合新手,SEC和FinCEN監管。 4. Kraken:歐洲老牌,ISO 27001認證,持美國MSB及英國FCA牌照。 5. Gate.io:幣種最全(800 ),低交易費,獲多國牌照。 6. Huobi Global:老牌平台,提供多種服務,持日本FSA及香港TCSP牌照。 7. KuCoin

火信和OKX Pay都不直接支持法幣支付。火信主要用於數字資產管理和交易,用戶需通過火幣交易所兌換法幣;OKX Pay專注於數字資產支付和轉賬,用戶需通過OKX平台兌換法幣。

數字貨幣App的前景廣闊,具體體現在:1. 技術創新驅動功能升級,通過DeFi與NFT融合及AI與大數據應用提升用戶體驗;2. 監管合規化趨勢,全球框架完善及AML、KYC要求趨嚴;3. 功能多元化與服務拓展,整合借貸、理財等服務並優化用戶體驗;4. 用戶基數與全球化擴張,預計2025年用戶規模突破10億。

C#是微軟在2000年發布的編程語言,旨在結合C 的強大功能和Java的簡潔性。 1.C#是一種類型安全、面向對象的編程語言,支持封裝、繼承和多態。 2.C#的編譯過程將代碼轉化為中間語言(IL),然後在.NET運行時環境(CLR)中即時編譯成機器碼執行。 3.C#的基本用法包括變量聲明、控制流和函數定義,而高級用法涵蓋異步編程、LINQ和委託等。 4.常見錯誤包括類型不匹配和空引用異常,可通過調試器、異常處理和日誌記錄來調試。 5.性能優化建議包括使用LINQ、異步編程和提高代碼可讀性。

下載香港數字貨幣交易所APP的方法包括:1. 選擇合規平台,如OSL、HashKey或Binance HK等;2. 通過官方渠道下載,iOS用戶在App Store下載,Android用戶通過Google Play或官網下載;3. 註冊並驗證身份,使用香港手機號或郵箱,上傳身份和地址證明;4. 設置安全措施,啟用雙重身份驗證並定期檢查賬戶活動。

C#是一種編程語言,而.NET是一個軟件框架。 1.C#由微軟開發,適用於多平台開發。 2..NET提供類庫和運行時環境,支持多語言。兩者協同工作,構建現代應用。
