吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13795|回复: 22
收起左侧

[.NET逆向] 【.NET】XXXXKeeper .NET v2.6破解分析

[复制链接]
creantan 发表于 2009-2-24 08:01
本帖最后由 云在天 于 2019-6-7 13:18 编辑

【文章标题】: CodeKeeper .NET v2.6破解分析
【文章作者】: creantan
【作者邮箱】: creantan@126.com
【作者主页】: www.crack-me.com
【下载地址】: 自己搜索下载
【编写语言】: Microsoft Visual C# / Basic .NET
【使用工具】: Reflector,SNRemove,CFF,IDA,Simple Assembly Explorer,Hex Workshop
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
简单的一个.NET的程序。。。适合对.Net破解不熟悉的菜菜。。。
  PEID查壳显示:Microsoft Visual C# / Basic .NET
  Basic .NET的。。
  试着运行下标题上显示试用时间。。。功能上没有限制。。
  开始动手:
  Reflector 载入:
  看看有什么敏感信息:
  发现RegisterForm:
1.JPG
  很明显被混淆过了。。。
  【1】
  在里面找到关键部分:
  private void (object, EventArgs)
  {
      if (Environment.OSVersion.Version.Minor == 1)
      {
          Encryption.CryptoProvider defaultProvider = Encryption.CryptoProvider.RC2;
          Encryption encryption = new Encryption("zse3432WERtgyh87opDDertyuMKioiirq24D5bnA", defaultProvider);
          if (!this..ValidateKey(this..Text))
          {
              MessageBox.Show("The key you enter is INVALID!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
          }
          else
          {
              MessageBox.Show("Thank you for the registration!", "Registration complete", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
              try
              {
                  RegistryKey key2 = Registry.CurrentUser.OpenSubKey(@"Software\Dasain.com\CodeKeeper.NET", true);
                  string str = encryption.Encrypt(this..Text, "zse3432WERtgyh87opDDertyuMKioiirq24D5bnA");
                  key2.SetValue("Registration", str);
                  key2.Close();
              }
              catch
              {
              }
          }
      }
      else if (this..ValidateKey(this..Text))//ValidateKey通过方法判断用户输入的序列号是否有效!!!!
      {
          MessageBox.Show("Thank you for the registration!", "CodeKeeper .NET", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
          try
          {
              RegistryKey key4 = Registry.CurrentUser.OpenSubKey(@"Software\Dasain.com\CodeKeeper.NET", true);
              string text = this..Text;
              key4.SetValue("Registration", text);
              key4.Close();
          }
          catch
          {
          }
      }
      else
      {
          MessageBox.Show("The key you enter is INVALID!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Hand);
      }
  }
  
  
  
双击下来到ValidateKey方法,发现在Dasain.Key.dll中。。。
  public bool ValidateKey(string key)
  {
      char[] chArray = new char[0x18];
      int num2 = 0;
      for (int i = 0; (i < key.Length) && (num2 < 0x18); i++)
      {
          char ch = key[i];
          if ((((ch >= '0') && (ch <= '9')) || ((ch >= 'a') && (ch <= 'z'))) || ((ch >= 'A') && (ch <= 'Z')))
          {
              chArray[num2++] = key[i];
          }
      }
      for (int j = 0; j < chArray.Length; j++)
      {
          if ((chArray[j] >= 'a') && (chArray[j] <= 'z'))
          {
              chArray[j] = (char) ((chArray[j] + 'A') - 0x61);
          }
      }
      for (int k = 0; k < chArray.Length; k++)
      {
          if (chArray[k] == 'I')
          {
              chArray[k] = '1';
          }
          if (chArray[k] == 'L')
          {
              chArray[k] = '1';
          }
          if (chArray[k] == 'O')
          {
              chArray[k] = '0';
          }
          if (chArray[k] == 'S')
          {
              chArray[k] = '5';
          }
      }
      for (int m = 0; m < chArray.Length; m++)
      {
          char[] chArray2;
          int num6;
          if ((chArray[m] >= '0') && (chArray[m] <= '9'))
          {
              (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '0');
          }
          if ((chArray[m] >= 'A') && (chArray[m] <= 'H'))
          {
              (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '7');
          }
          if ((chArray[m] >= 'J') && (chArray[m] <= 'K'))
          {
              (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '8');
          }
          if ((chArray[m] >= 'M') && (chArray[m] <= 'N'))
          {
              (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - '9');
          }
          if ((chArray[m] >= 'P') && (chArray[m] <= 'R'))
          {
              (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - ':');
          }
          if ((chArray[m] >= 'T') && (chArray[m] <= 'Z'))
          {
              (chArray2 = chArray)[num6 = m] = (char) (chArray2[num6] - ';');
          }
      }
      long num7 = 0L;
      long num8 = 0L;
      long num9 = 1L;
      for (int n = 0; n < 12; n++)
      {
          num7 += chArray[n] * num9;
          num9 *= 0x20L;
      }
      num9 = 1L;
      for (int num11 = 12; num11 < 0x18; num11++)
      {
          num8 += chArray[num11] * num9;
          num9 *= 0x20L;
      }
      num7 = (num7 ^ 0x89b01d3da4d55a9L) ^ this.;
      num8 = (num8 ^ 0x8bc9f8bd58b03d5L) ^ this.;
      long num12 = num7 & 0x3fffffffL;
      long num13 = (num7 & 0xfffffffc0000000L) >> 30;
      long num14 = num8 & 0x3fffffffL;
      long num15 = (num8 & 0xfffffffc0000000L) >> 30;
      return (((num12 == num13) && (num12 == num14)) && (num12 == num15));//返回一个布尔值。。爆破点。。。
  }
  有兴趣的朋友试试做个注册机吧~~!!
  
再看下程序哪里还用到了这个方法:
  有两处:
   2.JPG
  
  现在开始来修改程序,只要ValidateKey方法返回的总是1就可以了:
  就用个工具开改吧。。。
  Simple Assembly Explorer打开程序
3.JPG
  双击dasain.key.dll
  386             L_0288:        bne.un.s        389 -> ldc.i4.0 
  387             L_028a:        ldc.i4.1        
  388             L_028b:        ret        
  389             L_028c:        ldc.i4.0        //右击EDIT改为ldc.i4.1保存退出
  390             L_028d:        ret                                
  
4.JPG
  试运行下。。发现强名称检验失败:
   5.JPG
  讲下强名称的去除方法:
  手动来:
  IDA载入dasain.key.dll到开始位置如下图:
   6.jpg
  这里就是强名称了。。。
  用Hex Workshop打开搜索一下。。
   7.JPG
  用工具Strong Name Remove就更简单了就不说了。。
  修改完后运行还是提示强名称检验失败。。。汗汗。。。dasain.key.dll强名称已经去除了。。。哪肯定就是主程序的事咯。
  同样的方法去除CodeKeeper.NET.exe的强名称。。
  之后用CFF打开:
   8.JPG
  这次就用工具试下吧:
   9.JPG
  好了。。。再来运行下。。哈哈。。可以了。。。
   10.JPG
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于creantan, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2009年02月23日 22:39:58

免费评分

参与人数 1热心值 +1 收起 理由
vigers + 1 热心回复!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2009-2-26 16:22
NET.的文章很少,加精鼓励,欢迎多多发表!
lyliucn 发表于 2009-2-27 19:26
原帖由 Hmily 于 2009-2-26 16:22 发表
NET.的文章很少,加精鼓励,欢迎多多发表!


确实是这样,net程序都不知道从哪里下手。
卿涩 发表于 2009-2-28 00:14
最近在学习,NET 虽然有很多地方不理解 不过先顶下
老万 发表于 2009-3-1 18:31
.net程序破解很少,值得学习。
a2006 发表于 2009-6-25 03:40
NET的资料太少了,根本无从下手.
A-new 发表于 2009-6-25 08:51
这么经典的为啥没人顶呢,下次楼主整个。net脱壳的撒
daydream 发表于 2009-8-20 09:58
好东西,楼主厉害{:299_838:}
dj007 发表于 2009-8-22 14:51
太强了,就这种编程语音OD相当难调试..  这款工具不错...要多多学习下才行..
王者之剑 发表于 2009-10-12 01:28
加了混的就是麻烦,有时完全是猜的
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-18 01:42

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表