導航:首頁 > 源碼編譯 > dll防止被反編譯

dll防止被反編譯

發布時間:2022-06-15 15:01:40

⑴ 如何防止U3D游戲引擎代碼被反編譯

經過查看不少的資料,發現目前針對的U3D游戲引擎代碼防反編譯,主要是通過DLL文件進行混淆,而支持的DLL混淆的服務商有愛加密等等,通過DLL文件本身進行加密,防止DLL被反編譯,並且對加密演算法和密鑰進行加密,對加密過程也進行了加密。

⑵ C# DLL如何保護防止被破解

網路.net混淆工具。

⑶ C#如何防止被別人反編譯

C# 編寫的代碼通過VS編譯器生成 dll 或 exe ,很容易被一些反編譯工具查看到源碼或對源碼進行修改。
為防止代碼被反編譯或被篡改,我們可以進行一定的防範措施。但不能杜絕,因為DotNet編寫代碼運行必須編譯成IL 中間語言,IL是很規則,同時也很好反編譯。

反編譯防範措施:

⑷ 如何防止程序員反編譯

java從誕生以來,其基因就是開放精神,也正因此,其可以得到廣泛愛好者的支持和奉獻,最終很快發展壯大,以至於有今天之風光!但隨著java的應用領域越來越廣,特別是一些功能要發布到終端用戶手中(如Android開發的app),有時候,公司為了商業技術的保密考慮,不希望這裡面的一些核心代碼能夠被人破解(破解之後,甚至可以被簡單改改就發布出去,說嚴重點,就可能會擾亂公司的正常軟體的市場行為),這時候就要求這些java代碼不能夠被反編譯。

這里要先說一下反編譯的現象。因為java一直秉持著開放共享的理念,所以大家也都知道,我們一般共享一個自己寫的jar包時,同時會共享一個對應的source包。但這些依然與反編譯沒有什麼關系,但java的共享理念,不只是建議我們這樣做,而且它自己也在底層上「強迫」我們這么做!在java寫的.java文件後,使用javac編譯成class文件,在編譯的過程,不像C/C++或C#那樣編譯時進行加密或混淆,它是直接對其進行符號化、標記化的編譯處理,於是,也產生了一個逆向工程的問題:可以根據class文件反向解析成原來的java文件!這就是反編譯的由來。

但很多時候,有些公司出於如上述的原因考慮時,真的不希望自己寫的代碼被別人反編譯,尤其是那些收費的app或桌面軟體(甚至還有一些j2ee的wen項目)!這時候,防止反編譯就成了必然!但前面也說過了,因為開放理念的原因,class是可以被反編譯的,那現在有這樣的需求之後,有哪些方式可以做到防止反編譯呢?經過研究java源代碼並進行了一些技術實現(結果發現,以前都有人想到過,所以在對應章節的時候,我會貼出一些寫得比較細的文章,而我就簡單闡述一下,也算偷個懶吧),我總共整理出以下這幾種方式:

代碼混淆

這種方式的做法正如其名,是把代碼打亂,並摻入一些隨機或特殊的字元,讓代碼的可讀性大大降低,「曲線救國」似的達到所謂的加密。其實,其本質就是打亂代碼的順序、將各類符號(如類名、方法名、屬性名)進行隨機或亂命名,使其無意義,讓人讀代碼時很累,進而讓人乍一看,以為這些代碼是加過密的!

由其實現方式上可知,其實現原理只是擾亂正常的代碼可讀性,並不是真正的加密,如果一個人的耐心很好,依然可以理出整個程序在做什麼,更何況,一個應用中,其核心代碼才是人們想去了解的,所以大大縮小了代碼閱讀的范圍!

當然,這種方式的存在,而且還比較流行,其原因在於,基本能防範一些技術人員進行反編譯(比如說我,讓我破解一個混淆的代碼,我寧願自己重寫一個了)!而且其實現較為簡單,對項目的代碼又無開發上的侵入性。目前業界也有較多這類工具,有商用的,也有免費的,目前比較流行的免費的是:proguard(我現象臨時用的就是這個)。

上面說了,這種方式其實並不是真正加密代碼,其實代碼還是能夠被人反編譯(有人可能說,使用proguard中的optimize選項,可以從位元組流層面更改代碼,甚至可以讓JD這些反編譯軟體可以無法得到內容。說得有點道理,但有兩個問題:1、使用optimize對JDK及環境要求較高,容易造成混淆後的代碼無法正常運行;2、這種方式其實還是混淆,JD反編譯有點問題,可以有更強悍的工具,矛盾哲學在哪兒都是存在的^_^)。那如何能做到我的class代碼無法被人反編譯呢?那就需要我們下面的「加密class」!

加密class

在說加密class之前,我們要先了解一些java的基本概念,如:ClassLoader。做java的人已經或者以後會知道,java程序的運行,是類中的邏輯在JVM中運行,而類又是怎麼載入到JVM中的呢(JVM內幕之類的,不在本文中闡述,所以點到為止)?答案是:ClassLoader。JVM在啟動時是如何初始化整個環境的,有哪些ClassLoader及作用是什麼,大家可以自己問度娘,也不在本文中討論。

讓我們從最常見的代碼開始,揭開一下ClassLoader的一點點面紗!看下面的代碼:

Java代碼

⑸ C#怎樣防止反編譯

我使用的方法是利用加殼工具:virboxProtectorStandalone。直接進行加殼。高級混淆、虛擬化代碼、智能壓縮等加密策略。如果要授權控制,可使用許可版本的virboxProtector。

未經加殼保護的 ILspy 反編譯效果如下:

public int add(int a, int b){
return a + b;}public int div(int a, int b){
return a / b;}public int mul(int a, int b){
return a * b;}public int sub(int a, int b){
return a - b;}

解決方案:

深思自主研發了為 C# .net 語言做保護的外殼(Virbox Protector)。將C# .net 編譯成的執行程序(.exe),動態庫(.dll)直接拖入加殼工具即可完成保護操作,十分方便。並且在效果上已經完全看不到源碼中的邏輯。

加密後的效果

public int add(int a, int b){
return (int)dm.dynamic_method((object)this, System.Reflection.MethodBase.GetCurrentMethod(), 16416u, 21, 16384u, 32u, 31516u, 5).Invoke(this, new object[]
{
this,
a,
b
});}
public int div(int a, int b){
return (int)dm.dynamic_method((object)this, System.Reflection.MethodBase.GetCurrentMethod(), 16956u, 21, 16924u, 32u, 31516u, 2).Invoke(this, new object[]
{
this,
a,
b
});}
public int mul(int a, int b){
return (int)dm.dynamic_method((object)this, System.Reflection.MethodBase.GetCurrentMethod(), 16776u, 21, 16744u, 32u, 31516u, 3).Invoke(this, new object[]
{
this,
a,
b
});}
public int sub(int a, int b){
return (int)dm.dynamic_method((object)this, System.Reflection.MethodBase.GetCurrentMethod(), 16596u, 21, 16564u, 32u, 31516u, 4).Invoke(this, new object[]
{
this,
a,
b
});}

架構支持

IIS 服務架構的後台邏輯 DLL 文件

windows PC 應用程序 EXE 文件

windows PC 應用程序動態庫 DLL 文件

UG等第三方繪圖工具使用的 DLL 文件

Unity3d 編譯使用的 DLL 文件

⑹ C# dll 文件有什麼好的混淆工具防止反編譯

強力推薦Postbuild2007,方便簡單,混淆時不僅能通過變數名混淆,還能通過流程跳轉混淆,實乃加密混淆,防反編譯之居家旅行之必備良葯。
關鍵現已到年末,年底大酬賓,不要三四千,也不要一兩千,免費破解版,免費,免費,免費!
親,選擇Postbuild2007就是選擇安全,選擇Postbuild2007就是選擇放心,安全放心,拒絕三牛奶製品,Postbuild2007,你不二的選擇!

⑺ 如何讓C++寫的dll不被反編譯

簡單回答:
1、理論上不能保證程序不被反編譯。
2、一些加殼軟體可以做到加大被反編譯的難度,迫使操作者先解殼才能做反編譯,但同時會降低程序的運行效率。
3、當前的技術條件下,一般而言,反編譯出的「源代碼」一般而言並不能作學習,參考的源代碼,多數情況下只能用於分析區部片斷分析,主要用於破解或小范圍類修改。
4、一些簡單的加殼軟體:ASPACK、UPX、PECompact等,如果想嘗試,自個去搜索下載後試試。加殼後的軟體還有可能被某些殺軟當成惡意軟體。
5、這也正是很多對安全要求高的系統使用「三層架構」(類似訪問網頁/網站)的原因。因為在三層架構中,核心軟體、數據不被用戶直接接觸。

************以下是相關知識,有耐心可看看************
一、關於反編譯與破解。
1、以當前的技術來說,理論上,所有的程序都存在被反編譯的可能。
2、但是反編譯出來的代碼並不一定能被技術不高的人看懂,因為反編譯出來的「源代碼」與編寫者寫出的原代碼在80%以上是不同的。這是因為反編譯的原理是根據機器碼(或中間碼),讓機算機進行反向生成高級語言,而不是找出編寫者原有的代碼,找出原有的代碼是不可能的。反編譯出來的代碼在可理解性、可閱讀性上,一般而言是非常差的。
3、但是,這並不代碼反編譯出來的「源代碼」沒有價值,對於內行來說,分析反編譯出來的代碼中的某些特定片段,就可以對程序進行破解,找出程序的關鍵點、口令、數據來源等等。因為破壞總是比建設要容易,分析局部比規劃全局要容易得多。
4、如果考慮到被反編譯將關鍵代碼進行特殊處理的話,可能加大相關的難度,比如將特定的字元串分成多個字串在程序中存儲,或是進行加密後存儲,在使用時合成/生成,不用時即時在內存中清除等等……。
5、反編譯後對關鍵部分的定位往往是根據字元串來進行的,比如在用戶沒有注冊時,跳出一行對話,告訴用戶「請注冊後再使用」,破解者就會在反編譯後追查這個字串所在,然後查到這個字串對應的變數與地址,再追查調用這個變數或地址的代碼,然後再延伸查到什麼情況下調用「調用這個變數或地址的代碼」,最後,設定跳過語句。這就是最典型的破解注冊的方法。破解完再將修改了的「源代碼」進行編譯,或是根據「源代碼」直接修正程序中對應的代碼,OK,破解版正式完成。
二、關於加殼。
1、理論上,同樣,沒有破解不了的殼。
2、但是有些加殼軟體使用了一些特別的方法,使得破解殼的難度變得非常難,技術不夠的朋友很難下手,比如將原程序代碼拆分、變型、植入自校驗等等技術。
3、但加殼軟體同樣是程序,它自身就存在被反編的可能,加了殼可以類比成,在一個木箱外面再加個保險櫃。但千萬別以為保險櫃就一定是保險的,面對各種技術開鎖、暴力開箱,再強的保險櫃也只能是加大難度而已。
4、越復雜的加殼,就會使得程序運行時效率降得越低,這是必然的,因為原本只關注目標任務的程序現在還要時時提防著被提取、被監測。

⑻ .NET 編譯出來的DLL文件,如何才能不被反編譯

1.有那種代碼混亂器,其實也就是改改類名字等,常用的有
DotFuscator, .NET Reactor, xenocode 。。。你可以自己搜索下載了
2.當代碼量很大的時候,反編譯去讀MSIL的代碼也是很辛苦的,工程量很大
3.一般.net寫的程序都是基於web的,放在伺服器上,WebService,所以盜版破解也顯得不是那麼有意義了。。。

友情提醒:事先備份好你的代碼!

⑼ 如何有效防止C#編寫的DLL被反編譯

為防止這類反向工程的威脅,最有效的辦法是模糊。
模糊工具運用各種手段達到這一目標,但主要的途徑是讓變數名字不再具有指示其作用的能力、加密字元串和文字、插入各種欺騙指令使反編譯得到的代碼不可再編譯。
例子:
對未經模糊處理的代碼執行反向工程:
Private Sub CalcPayroll(ByVal employeeGroup As SpecialList)
While employeeGroup.HasMore
employee = employeeGroup.GetNext(True)
employee.updateSalary
DistributeCheck(employee)
End While
End Sub

同樣的代碼,經過模糊處理再執行反向工程:
Private Sub a(ByVal b As a)
While b.a
a = b.a(True)
a.a
a(a)
End While
End Sub

顯然,兩段代碼的處理邏輯相同。但是,要說清楚第二段代碼到底在做些什麼極其困難,甚至要判斷它正在訪問哪些方法、哪些變數也很困難。
這種改變變數名稱的功能是可配置的,例如,假設正在構造一個DLL,可以要求不改動API,有趣的是,這一處理過程顯然只是簡單地把大量變數的名稱簡縮成單個字元,但獲得了非常好的模糊效果。

⑽ 如何對編譯的dll文件進行加密來防止反編譯

為防止這類反向工程的威脅,最有效的辦法是模糊。
模糊工具運用各種手段達到這一目標,但主要的途徑是讓變數名字不再具有指示其作用的能力、加密字元串和文字、插入各種欺騙指令使反編譯得到的代碼不可再編譯。
例子:
對未經模糊處理的代碼執行反向工程:
Private
Sub
CalcPayroll(ByVal
employeeGroup
As
SpecialList)
While
employeeGroup.HasMore
employee
=
employeeGroup.GetNext(True)
employee.updateSalary
DistributeCheck(employee)
End
While
End
Sub
同樣的代碼,經過模糊處理再執行反向工程:
Private
Sub
a(ByVal
b
As
a)
While
b.a
a
=
b.a(True)
a.a
a(a)
End
While
End
Sub
顯然,兩段代碼的處理邏輯相同。但是,要說清楚第二段代碼到底在做些什麼極其困難,甚至要判斷它正在訪問哪些方法、哪些變數也很困難。
這種改變變數名稱的功能是可配置的,例如,假設正在構造一個DLL,可以要求不改動API,有趣的是,這一處理過程顯然只是簡單地把大量變數的名稱簡縮成單個字元,但獲得了非常好的模糊效果。

閱讀全文

與dll防止被反編譯相關的資料

熱點內容
知網程序員 瀏覽:702
怎麼把電子版投標報價加密 瀏覽:29
電腦安全編譯器 瀏覽:364
在伺服器里如何調創造 瀏覽:835
知雲登錄為什麼找不到伺服器 瀏覽:815
python切片位置 瀏覽:375
平板加密視頻怎麼播放 瀏覽:377
程序員上下班不帶電腦 瀏覽:835
androidrsa文件 瀏覽:64
linuxlvds 瀏覽:103
程序員選擇職場 瀏覽:345
累加C語言演算法 瀏覽:948
足浴店用什麼app招人 瀏覽:191
php調用thrift 瀏覽:191
java精度丟失 瀏覽:903
地梁承台相交處箍筋加密 瀏覽:95
程序員繪本 瀏覽:647
php線程安全版 瀏覽:407
lilolinux 瀏覽:111
proteus51編譯工具 瀏覽:309