这几天在做自己的一个小程序,因为使用了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源代码,就可以得到一个修改过的目标文件,这个目标文件解除了程序的某些限制,例如时间限制、使用次数限制。

那么我们如何保护我们的程序不被修改呢?

这两天实际操作了下编译、反编译、混淆。总结如下:

  1. 项目中,增加强签名。具体操作方法:右键单击项目,选择属性,找到签名选项卡,新建签名文件,输入密码即可。
  2. 项目发布以后,对dll、exe文件进行混淆,混淆工具:Dotfuscator Professional Edition 4.2 ,如果是混淆web项目,请排除web项目文件的重命名功能。免得aspx文件无法引用dll程序集。同理HttpModule一类的引用也要注意。
  3. 另外如果还不放心,可以对混淆过的文件进行加壳。加壳工具: 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”混淆是简单易用的保护程序集的办法。推荐使用。


今天看到一个程序,用万能的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自己的对立软件就不错,真的是矛和盾啊!!


 最近上网找了下给C#程序加壳的方法,找到了一些方法,自己试了一下,感觉还挺不错的。以下是在网上找到的,在这里整理一下,以后要用到的时候也方便。
     1.反射加壳
      新建一个CMD项目,复制程序到项目文件中,并设置成为“嵌入式资源”。

 程序代码

Stream sr = Assembly.GetExecutingAssembly().GetManifestResourceStream("命名空间.程序.exe");
    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的信息。不过最近看网上有人给出了破解这个的方法,有兴趣的可以去找找看。
      找关天没找到官网地址,网上找的都是2.2汉化版,也不知道是不是最新的,下载地址:http://dl.onlinedown.net/soft/56183.htm
    把这两种方法结合起来使用还是挺有意思的,起码增加了别人破解的难度~~~呵呵