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:          }

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

2012-12-17_163414

通过反编译后,我们看到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 操作,从而达到让主程序不退出的效果,最后在上面点击右键另存为新的程序集。 

2012-12-17_164118 

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


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值