데이터 베이스 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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
2 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Gitee Pages 정적 웹 사이트 배포 실패 : 단일 파일 문제를 해결하고 해결하는 방법 404 오류? Apr 04, 2025 pm 11:54 PM

GiteEpages 정적 웹 사이트 배포 실패 : 404 오류 문제 해결 및 해결시 Gitee ...

Avue-Crud 행 편집 모드에서 셀의 Onblur 이벤트를 수동으로 트리거하는 방법은 무엇입니까? Avue-Crud 행 편집 모드에서 셀의 Onblur 이벤트를 수동으로 트리거하는 방법은 무엇입니까? Apr 04, 2025 pm 02:00 PM

Avue 구성 요소 라이브러리에서 Avue-Crud 행 편집을 구현하는 Onblur 이벤트는 Avue-Crud 구성 요소를 수동으로 트리거합니다. 편리한 인라인 편집 기능을 제공하지만 때로는 ... 때로는 ...

AI 도구를 사용하여 React Vite 프로젝트에서 전경 페이지를 신속하게 구축하는 방법은 무엇입니까? AI 도구를 사용하여 React Vite 프로젝트에서 전경 페이지를 신속하게 구축하는 방법은 무엇입니까? Apr 04, 2025 pm 01:45 PM

백엔드 개발에서 프론트 엔드 페이지를 신속하게 구축하는 방법은 무엇입니까? 그는 3-4 년의 경험을 가진 백엔드 개발자로서 기본 JavaScript, CSS 및 HTML을 마스터했습니다.

브라우저 임베디드 스크립트를 사용하여 웹 페이지 요소 작업 및 수치 계산을 자동화하는 방법은 무엇입니까? 브라우저 임베디드 스크립트를 사용하여 웹 페이지 요소 작업 및 수치 계산을 자동화하는 방법은 무엇입니까? Apr 04, 2025 pm 12:09 PM

웹 페이지 자동화 및 숫자 계산 : 브라우저 임베디드 스크립트를 기반으로 한 구현이 기사는 브라우저 임베디드 스크립트를 사용하여 웹 페이지 요소 작업 및 숫자를 구현하는 방법을 살펴 봅니다 ...

Chrome Devtools에서 요청 된 쿠키를 효과적으로 수정하고 재생하는 방법은 무엇입니까? Chrome Devtools에서 요청 된 쿠키를 효과적으로 수정하고 재생하는 방법은 무엇입니까? Apr 04, 2025 pm 05:48 PM

크롬을 사용하여 Chromedevtools에서 요청 된 쿠키를 효과적으로 수정하고 재생하는 방법 ...

NPM 대신 PNPM으로 React 응용 프로그램을 만드는 방법은 무엇입니까? NPM 대신 PNPM으로 React 응용 프로그램을 만드는 방법은 무엇입니까? Apr 04, 2025 pm 06:45 PM

npx를 사용하여 React 응용 프로그램을 생성하기 위해 NPM 대신 PNPM을 사용하는 정보 ...

그라디언트 배경으로 카드 및 쿠폰 레이아웃에 대한 갭 효과를 달성하는 방법은 무엇입니까? 그라디언트 배경으로 카드 및 쿠폰 레이아웃에 대한 갭 효과를 달성하는 방법은 무엇입니까? Apr 05, 2025 am 07:48 AM

카드 쿠폰 레이아웃의 갭 효과를 실현하십시오. 카드 쿠폰 레이아웃을 설계 할 때 특히 배경이 그라디언트 일 때 카드 쿠폰에 간격을 추가 해야하는 경우가 종종 있습니다.

JavaScript 플러그인을 사용하여 페이지 고정 및 요소 독립 운동의 효과를 달성하는 방법은 무엇입니까? JavaScript 플러그인을 사용하여 페이지 고정 및 요소 독립 운동의 효과를 달성하는 방법은 무엇입니까? Apr 04, 2025 pm 12:51 PM

웹 디자인에서 독립적으로 움직이는 스크롤 막대와 요소의 페이지 고정 효과 구현, 때로는 스크롤 막대가 스크롤 할 때 특별 효과를 얻어야합니다 ...

See all articles