ASP.NET防止DLL被反編譯

.net是一種建立在虛擬機上執行的語言,它直接生成 MSIL 的中間語言,再由.net編譯器 JIT 解釋映象爲本機代碼並交付CPU執行。中間語言很容易被反編譯,所以研究下如何有效的保護dll文件。
我大致的方法爲 :強簽名+混淆+加密。強簽名
強命名程序集,可以確保你的程序集唯一,而不被篡改、冒用等;即使相同名字的程序集如果簽名也會不同。
未簽名的主程序可以引用已簽名或未簽名的程序集;而已簽名的主程序不能引用未簽名的程序集。(上述文章有相應解決辦法)
混淆就是對編譯生成的MSIL中間代碼進行模糊處理,最簡單的混淆是名稱混淆,即將 命名空間名、類名、方法名、字段名等統統換成特殊符號或其它符號,目的就是讓人看到暈爲止,但是並不改變程序執行邏輯。
在屬性裏選擇Library屬性(很重要,因爲我這裏要混淆的是dll文件,如果不選中,混淆後將不能被正確調用!),

選擇bulid標籤,點擊bulid按鈕進行混淆。
我們也可以選擇其它標籤進行加密字符串、增加水印等操作,我這裏加密工作用另外的方法,所以沒有選擇操作。
OK,混淆完成後,我們可以用Reflector.exe來反編譯下混淆後的dll文件,可以對比源碼看下效果

接下來我們繼續對混淆過的dll文件進行加密處理,進一步保護dll文件。
我使用的加密工具是MaxtoCode。
打開軟件後,切換到中文,可以看到非常簡單,添加上dll文件後,直接點擊執行加密就可以。其他選項比如:加密字符串、強名稱等都很簡單,大家一試就知道,而且MaxtoCode的幫助做的非常友好,一看就會使用。
加密後的dll文件比先前大了一倍,用Reflector.exe反編譯後,發現dll文件加密的更徹底,因爲主體函數內容都隱藏了。
通過以上三步,使您的dll文件可免於一般人的破解,當然,不可能絕對防止被破解。

不要每一次都“new Random()”,這多麼浪費心情啊。應該在class層次聲明

然後程序中直接使用Rnd這個變量來計算Next。

效果是一樣的,new的時候創建了一個數組,每次從數組中選取一個,乘一個數得到某個範圍內的“隨機數”。僅此而已。至少也要寫成
只是new Random()創建的數組是根據某個種子創建的不連續的數組,然後從這個數組中選取。

比如你要80以內的整數隨即次序出現,這是“洗牌”,而不是產生隨機數。

跑題了,題目是不同的隨機數,Randome比較容易產生重複的隨機數。不同的隨機數我認爲就是最小值到最大值之間的這些數洗牌後取指定個數。符合題目要求。這顯然不是一個僞隨機算法。
9樓給你的方法你測試過?返回的不符合要求?
我用樓主的代碼,試了一下,生成的random數都不一樣呀,怎麼樓主說是一樣的?
用時間做種子 一秒內生成這麼多當然會差不多...
我覺得是我的電腦運算速度太快 出來的基本都是一樣的
永遠都不相同的隨機數, 夠你用了吧?
怎麼同時產生N個不同的隨機數呢?
就是這N個數還不能重複。。
我也有同樣的問題。有一點點的區別
你看看你自己的代碼,這些隨機數的數量很大,而取值範圍又很小,很容易就會造成重複。抽屜原理
老師讓設計一個,但我從來沒見過這個軟件,不知道應該怎麼設計,不知道應該實行什麼功能
誰有類似的啊,拿來讓我改一下
小弟之前一直都在搞C++,最近想往.net這方面轉一下,因爲C++開發和維護的成本確實高了點兒。
不過我之前一點都沒接觸過.net,是從0學起。
而我這個人又有個“毛病”,學什麼東西都愛刨根問底,所以想先把.net框架運行的機制瞭解個大概,再開始學C#的語法以及應用。
發這個帖子就是想問一下過來的朋友們,什麼書比較適合0基礎的c#新手
來源:足球直播



發佈了40 篇原創文章 · 獲贊 0 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章