http://www.cnblogs.com/wuhenke/archive/2010/02/01/1660852.html
這幾天在做自己的一個小程序,因為使用了3層架構,運行目錄下有很多dll文件,最終發布時,我打算將dll文件都合並到exe文件中去。微軟發布的免費軟件ILmerge可以完成這項工作,研究了一下,其用法如下:
http://tech.ddvip.com/2010-04/1270099865149311.html
C:\Program Files (x86)\Microsoft\ILMerge\ILMerge.exe /ndebug /target:winexe /out:C:\WindowsFormsDotFuscatorNew.exe C:\WindowsFormsDotFuscator.exe /log C:\ManageDotfuscator.dll(如果64計算機,安裝后找不到exe文件,可手動指定文件路徑,然后輸出)
1、合並file1.dll、file2.dll到destination.dll
ILmerge /ndebug /target:dll /out:C:\destination.dll /log C:\file1.dll C:\file2.dll
2、合並file1.dll、file2.dll以及myApp.exe到newApp.exe
ILmerge /ndebug /target:winexe /out:C:\newApp.exe /log C:\myapp.exe C:\file1.dll C:\file2.dll
注意:合並為exe時,myapp.exe必須寫在file1.dll、file2.dll前面
exe程序可以先會和后加殼完美運行
完成之后,就得到了一個exe文件,如果想做一些邪惡的事情,可以將一些破解軟件的dll合並到你的exe中去。前提是,所有的dll都是托管的,如果嘗試合並C++寫的dll,則會失敗。有一個工具,叫做mergebin.exe,可以合並托管和非托管dll,用法我還沒研究出來,似乎比較困難的樣子。這個工具是ADO.NET 2.0 Data Provider for SQLite的作者寫的,他發布的System.Data.SQLite.dll可以被dotNet程序引用,還可以直接被C/C++程序調用,這個dll就是托管和非托管混合的dll,果然是很牛的!mergebin.exe在其源碼包里,有興趣的朋友可以研究一下。這是其官方網站:http://sqlite.phxsoftware.com
繼續邪惡的話題,如果你的exe里面合並有破解的dll,你可能不想讓別人知道,或者你不想讓別人反編譯你的exe文件。混淆軟件都收費,而且混淆之后方法還是看得見的,只不過名字毫無規則,沒辦法,用不了。還是加殼來的直接,我們得找一款很牛的加殼軟件。給大家推薦個軟件,叫做Sixxpack,專門加殼dotNet程序的,目前的最新版本為Sixxpack22,要求機器上裝有.netframework2.0以上版本。Sixxpack除了加殼,還使用了壓縮技術,最高壓縮比達80%。Sixxpack是免費軟件,官網是:http://www.reversers.net/
經Sixxpack加殼后,用Reflector打開exe文件,哈哈,看到的永遠都只是一個actmp.dll的信息,其中包含4個7zip命名空間和1個Sixxpack命名空間,反編出來這些東西對也沒啥用處。呵呵,原來是用7zip壓縮的,難怪那么高的壓縮比。
有一個問題是,用Sixxpack處理之后的程序集,版本信息是0.0.0.0,其他信息也不對。沒關系,使用Resource Hacker修改一下就OK了! Resource Hacker也是免費軟件,官網是:http://angusj.com/resourcehacker/
我這個小項目為了美化界面,用了一些邪惡的東西,最終的exe文件5MB左右,用Sixxpack處理之后,體積降到了2MB以內,運行時幾乎沒有性能損失。最重要的,很難反編譯,可以放心拿給別人用了。
http://www.oksvn.com/Article/Detail-173.shtml 混淆的方法測試必須方法內部有邏輯算法判斷,否則默認不會混淆
反編譯工具:.net 反編譯工具reflector 工具 .NET Reflector插件FileDisassembler
大家都知道.net開發的軟件,無論WebForm項目還是WinForm項目,發布的時候都是編譯成dll或者exe文件。但是我們經常會無論是出於學習還是其他什么目的,想查看軟件源代碼和解除軟件的某些限制。這時反編譯技術就派上了用場。上面提到的reflector就是這樣一個工具。
他可以把dll或者exe等目標文件反編譯成源代碼。如果目標文件沒有經過混淆、加密等處理,往往反編譯得到的源代碼跟軟件編譯前的源代碼幾乎一模一樣。這樣就為程序的版權、安全等帶來嚴重的隱患。
另外還有個工具ILDASM可以把目標文件反編譯成IL源代碼。然后我們就可以修改IL源代碼,然后再使用ILASM編譯這個IL源代碼,就可以得到一個修改過的目標文件,這個目標文件解除了程序的某些限制,例如時間限制、使用次數限制。
那么我們如何保護我們的程序不被修改呢?
這兩天實際操作了下編譯、反編譯、混淆。總結如下:
-
項目中,增加強簽名。具體操作方法:右鍵單擊項目,選擇屬性,找到簽名選項卡,新建簽名文件,輸入密碼即可。
-
項目發布以后,對dll、exe文件進行混淆,混淆工具:Dotfuscator Professional Edition 4.2 ,如果是混淆web項目,請排除web項目文件的重命名功能。免得aspx文件無法引用dll程序集。同理HttpModule一類的引用也要注意。
-
另外如果還不放心,可以對混淆過的文件進行加殼。加殼工具: MaxtoCode.Professional.2007.v3.21-Lz0.rar 該工具我沒有親自試用過,有興趣的自己研究。
通過以上三層保護,應該可以對付一般的破解菜鳥了。本來文章都沒什么可說的,但是想想還是介紹一下,對沒有接觸混淆的網友應該能有幫助。免得走彎路。
我就走了很多彎路。找Dotfuscator Professional Edition 4.3版找了好久,用其他的混淆軟件也摸索了許久,這里不得不提到一個軟件:Xenocode Postbuild,最新版本是2008,該軟件是非常出名的混淆器。但是我沒有找到好用的下載,有該軟件的朋友請發給我。還有NET Reactor(帶注冊文件)也是一個混淆器,可以混淆.net 2.0以前的版本。
總結:以上提到的兩個方法“強簽名”和“Dotfuscator Professional Edition 4.2”混淆是簡單易用的保護程序集的辦法。推薦使用。
http://www.cnblogs.com/szyicol/archive/2011/03/31/2001555.html
今天看到一個程序,用萬能的reflector 看了一下,竟然只有一個actmp.dll ,如何谷歌了一下,發現是用的一款叫Sixxpack進行了壓縮和加殼
網上有人說非常安全,那個寒...
說一下脫殼的過程
一、用reflector 直接輸出項目
二、打開項目,編譯,會有一些類型的小錯誤,修正一下
三、修改一行代碼
Stream stream2 = new FileStream(Application.ExecutablePath.Substring(Application.ExecutablePath.LastIndexOf('\\') + 1), FileMode.Open,FileAccess.Read);
改成:
Stream stream2 = new FileStream(@"c:\hhh.exe", FileMode.Open, FileAccess.Read); //這個路徑指的是那個被加殼的程序
四、加一行代碼
在這行之前:Assembly assembly = Assembly.Load(compressor.Decompress(inStream));
加上:System.IO.File.WriteAllBytes(@"c:\test.exe", compressor.Decompress(inStream));要不要retrun,自己看着辦
五、c:\test.exe 就是被脫殼的程序了。
結論:
1、該種方法就是將原程序寫在固定程序的尾部,加了之后,是不會影響固定程序的運行的,好像N多年前搞VB的時候,玩過這種方法,包括現在很多flash文件的exe形式,也是這樣的
2、固定文件的大小是固定,像上面的這個就是 internal static int orig = 0xa000;
3、在加到尾部之前,使用了7-zip進行了壓縮!(該代碼可以好好用下)
4、上面的方法很爛!!!
5、要保護.net代碼還是建議大家使用混淆名稱和混淆流程的保護軟件,reflector自己的對立軟件就不錯,真的是矛和盾啊!!
轉自 http://www.lwolf.cn/blog/article/code/csharp-shell%20.htm
最近上網找了下給C#程序加殼的方法,找到了一些方法,自己試了一下,感覺還挺不錯的。以下是在網上找到的,在這里整理一下,以后要用到的時候也方便。
1.反射加殼
新建一個CMD項目,復制程序到項目文件中,並設置成為“嵌入式資源”。

byte[] fileBytes = new byte[sr.Length];
sr.Read(fileBytes, 0, (int)sr.Length -1);
Assembly assembly = Assembly.Load(fileBytes);
MethodInfo mi = assembly.EntryPoint;
mi.Invoke(null, null);
編譯運行這個后,再用Reflector查看就看不到源代碼。不過還是可以用反射脫殼破解的,這個我就不太懂了
2.使用Sixxpack
這是個給.net程序加殼並壓縮的工具,壓縮比最大可達80%,壓縮完之后就編譯不出源文件了。用Reflector查看的話都是actmp.dll的信息。不過最近看cnblogs里有人給出了破解這個的方法,有興趣的可以去找找看。
找關天沒找到官網地址,網上找的都是2.2漢化版,也不知道是不是最新的,下載地址:http://dl.onlinedown.net/soft/56183.htm
把這兩種方法結合起來使用還是挺有意思的,起碼增加了別人破解的難度~~~呵呵