使用JustDecompile修改程序集

原文:使用JustDecompile修改程序集

       JustDecompile是Telerik公司推出一个免费的.net反编译工具,支持插件,与Visual Studio 2010,2012集成,能够创建Visual Studio project文件。今天我们使用其一个插件Assembly Editor Plugin来修改程序集。首先,我们来写一个非常简单的时间限制程序:

   1:          static void Main(string[] args)
   2:          {   
   3:              Timebomb();
   4:          }
   5:          static void Timebomb()
   6:          {
   7:              var message = "Welcome to demo";
   8:              if (DateTime.Now > new DateTime(2012, 12, 01))
   9:              {
  10:                  Environment.Exit(0);
  11:              }
  12:              Console.WriteLine(message);
  13:              Console.Read();
  14:          }

看上面的代码,可以看出程序时,检查当前时间是否过期,如果是就退出了。假设我没有程序的源代码,下面用这个工具解除这个时间限制的问题:

通过反编译后,我们看到IL, 假设您对IL有一定的了解。offset 39 

ldc.i4.0

意思是将常数0做为4个字节整数压入栈,  offset 40 接着是

call  System.Void System.Environment::Exit(System.Int32) 

意思是调用System.dll中Environment类Exit方法。我们还可以看到具体的时间,你可修改他们,让我们来修改多点儿东西。我们在上面单击右键选择Edit,把这两条IL分别修改为nop 操作,从而达到让主程序不退出的效果,最后在上面点击右键另存为新的程序集。

最后运行刚才另存为的程序集,结果与我们期待的一致。此时我们反编译程序集的这个方法,是如下代码:

   1:  private static void Timebomb()
   2:  {
   3:      string str = "Welcome to demo";
   4:      if (DateTime.Now > new DateTime(0x7dc, 10, 9))
   5:      {
   6:      }
   7:      Console.WriteLine(str);
   8:      Console.Read();
   9:  }
  10:   
  11:   

小结,对于没有混淆的程序集,我们可以看懂代码逻辑,在没有源代码的情况,借用Reflexil插件可以简单修改IL,实现想要的结果。这里的例子很简单,希望您能举一反三,实际情况可能比较复杂。

希望对您软件开发有帮助。

作者:Petter Liu

出处:http://www.cnblogs.com/wintersun/

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

该文章也同时发布在我的独立博客中-Petter Liu Blog

时间: 2024-10-17 00:17:16

使用JustDecompile修改程序集的相关文章

利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)

原文:利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)      Mono.Cecil是一个强大的MSIL的注入工具,利用它可以实现动态创建程序集,也可以实现拦截器横向切入动态方法,甚至还可以修改已有的程序集,并且它支持多个运行时框架上例如:.net2.0/3.5/4.0,以及silverlight程序 官方地址:http://www.mono-project.com/Cecil      首先,我先假想有一个这样的商业组件,该组件满足了以下条件: 1. 该程序集的代码被混

C# 使用Mono Cecil 修改程序集,添加一个字段和属性,方法,怎样做实现

问题描述 在C#中,我想使用MonoCecil修改程序集,就是打开一个程序集,然后在里面添加一个字段和属性,方法,并且给字段赋一个初始值,然后保存程序集,怎样做实现,给一下代码,谢谢 解决方案 解决方案二:快,谁给个答案,给分啊解决方案三:给个恢复啊,,,,解决方案四:回复一下啊,,,,,,,,,,,,

求教资源文件修改的问题

问题描述 我的资源文件中有一个文本文件(name.txt,在resources根目录下),我想操作这个文本文件增加一行,不知道如何实现,以下自己乱写的并未能实现....求方法...PrivateSubButton1_Click(senderAsObject,eAsEventArgs)HandlesButton1.ClickDimlineAsString="asdfasdf"DimtobjStreamAsIO.Stream=Me.GetType.Assembly.GetManifestR

编译时MSIL注入--实践Mono Cecil(1)

   紧接上两篇浅谈.NET编译时注入(C#-->IL)和浅谈VS编译自定义编译任务-MSBuild Task(csproject),在第一篇中我们简单研究了c#语法糖和PostSharp的MSIl注入,紧接第二篇中我们介绍了自定义MSBuild编译任务(记得有位老兄发链接用 MSBuild自动发布Silverlight xap ,我想说的我做的是自定义编译任务,不是什么发布,MSBuild本就是一个发布工具).之所以在此前介绍编译Task是因为我讲介绍的就是利用MSBuild和MSILInje

C# 2010命名和可选参数的新特性

1.命名参数允许调用者通过提供参数的名称来为其赋值,这样参数的位置就不在重要了.可选参数允许在定义时为某些参数赋值,在调用时可以忽略这些"可选的"参数.命名参数和可选参数可以应用在方法.索引器.构造函数和委托.命名参数和可选参数与dynamic类型结合在一起使用,可以方便的访诸如Office自动化API之类的COM API. 1.1 命名参数 命名参数的语法为: 参数名称1:参数值1,参数名称2:参数值2- 例如以下代码: 以下为引用的内容: static void Main(stri

.NET编程和SQL Server ——Sql Server 与CLR集成 (学习笔记整理-1)

原文:.NET编程和SQL Server --Sql Server 与CLR集成 (学习笔记整理-1) 一.SQL Server 为什么要与CLR集成 1. SQL Server 提供的存储过程.函数等十分有限,经常需要外部的代码来执行一些繁重的移植: 2.与CLR集成可将原本需要独立的程序来实现的功能迁移到SQL Server 内部进行数据操作: 3.T-SQL数据查询语言在返回数据集方面很好,但是除此之外表现不佳.与CLR的集成可解决这一问题: 4..NET的操作代码和执行的速度比T-SQL

字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串

原文:字符串混淆技术在.NET程序保护中的应用及如何解密被混淆的字符串 Visual Studio提供的Dotfuscator保护程序,可以对用户代码中包含的字符串进行加密.比如下面的例子,为了找到这个程序的注册算法,用.NET Reflector加载程序集后,发现代码中的字符串,都变成这种形式的: Assembly executingAssembly = Assembly.GetExecutingAssembly(); ArrayList list = new ArrayList(); str

ILSpy反编译DLL文件后改动其中一小部分,怎么再将其编译到该DLL中

问题描述 各位大神们,我用ILSpy反编译.net程序里的Dll文件后,将其中一个文件保存为.cs文件并修改后,怎么将其再编译到该Dll文件? 解决方案 解决方案二:有没有人能给解答一下啊,小女子感激不尽!!!解决方案三:你先学会不用反编译怎么生成dll文件,然后把你反编译并修改过的代码粘进去生成就行了解决方案四:如果改动很小,可以用一些支持.net元数据分析的工具比如CFFExplorer找到方法的位置,用16进制编辑工具修改方法体.也有直接支持分析和修改的比如SAE,还有作为插件的Refle

1个C#问题,如果没有把握看看就可以.

问题描述 关于反射属性,大家都知道的属性在实现的时候是生成对应的私有方法,get_XXX,set_XXX.有没有能力反射修改这样的属性.publicsealedclassApplication{internalstaticstringWindowsFormsVersion{get{return"WindowsForms10";}}} Application.WindowsFormsVersion返回的结果是你反射修改后的结果.如果是下面的这样写法,问题就能解决,可偏偏不是.public