吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 13003|回复: 46
收起左侧

[.NET逆向] reflector注册跟踪笔记

  [复制链接]
littlewisp 发表于 2017-3-21 10:49
开始用reflecotr,收费后一直用dnspy, 利用业余时间跟踪了下refloctor的注册流程。   从网上搜了个注册机,辅助跟踪分析。准备:   从reggate官网下载一个新版, 9.0版本,14天试用,安装好后,用dnspy载入后,发现好多名称都是不可见字符,利用de4dot处理下,比不可见字符好看多了,如果发现不能处理,尝试在管理员权限下运行de4dot。我是在win7 64位下调试的。
1.序列号的处理:
搜索字符串 “Serial Number”,来到ns25.EnterSerialNumberPage.InitializeComponent处,此处为注册窗口           
[C#] 纯文本查看 复制代码
              this.label2.Text = "Serial number";           
           this.m_txtSerialNumber.Location = new Point(3, 18);
            this.m_txtSerialNumber.MaxLength = 40;
            this.m_txtSerialNumber.Name = "m_txtSerialNumber"; 
           this.m_txtSerialNumber.Size = new Size(161, 20); 
           this.m_txtSerialNumber.TabIndex = 2;   
         this.m_txtSerialNumber.TextChanged += new EventHandler(this.m_txtSerialNumber_TextChanged);

单步跟踪,序列号格式检查的一个地方      
[C#] 纯文本查看 复制代码
 public bool vmethod_1()   
     {         
           bool result;           
        if (string.IsNullOrEmpty(this.string_0))        
            {              
                 result = false;   
         }         
          else           
          {                string text = string.Format("[{0}]", new string(Class789.char_0));              
              string pattern = string.Concat(new string[]                {                    "^A3",                    text,                    "{2}(-(",                    text,                    "{4})){5}$"                });               
             result = new Regex(pattern).IsMatch(this.string_0);  
       
             }           
return result;        }

序列号的模式匹配
pattern        "^A3[2346789ABCDEFGHJKMNPRTWXYZ]{2}(-([2346789ABCDEFGHJKMNPRTWXYZ]{4})){5}$"
2.激活码的初步验证:点击注册时把网断掉,点击注册按钮处理函数:      
  private void m_AcceptButton_Click(object sender, EventArgs e)        {            this.method_6(sender, e);        }
生成请求码的处理函数        
[C#] 纯文本查看 复制代码
public virtual string vmethod_4(string string_3)        
{            StringBuilder stringBuilder = new StringBuilder();          
  for (int i = 0; i < this.method_12().Length; i++)           
{                stringBuilder.Append(string.Concat(new object[]               
{                    "<activationrequest>\r\n<version>",                   Class801.int_1,                   
                    "</version>\r\n<machinehash>",                   this.method_12().method_33(),        
                   "</machinehash>\r\n<productcode>",                    this.method_12().method_4(),                 
                  "</productcode>\r\n<majorversion>",                    this.method_12().method_12(),                   
                  "</majorversion>\r\n<minorversion>",                    this.method_12().method_14(),                  
                   "</minorversion>\r\n<serialnumber>",                    string_3,                   
                    "</serialnumber>\r\n<session>",                    base.method_6(),                  
                      "</session>\r\n<locale>",                    Thread.CurrentThread.CurrentUICulture.Name,                    
                     "</locale>\r\n",                    this.vmethod_5(this.method_14()),                 
                     "</activationrequest>\r\n"                }));           
             }            return stringBuilder.ToString();

输入正确的激活码后,对激活码格式验证的函数      
[C#] 纯文本查看 复制代码
private static bool smethod_0(string strTxt, out string strVerified)        
{            strVerified = null;            
string text = strTxt.Trim();            
int num;            bool result;            int num2;         
   if ((num = text.IndexOf("<activationresponse>")) == -1)          
  {                result = false;            }           
else if ((num2 = text.IndexOf("</activationresponse>")) == -1)          
  {                result = false;            }           
else         
   {                string text2 = text.Substring(num, num2 - num + "</activationresponse>".Length);             
   XmlDocument xmlDocument = new XmlDocument();               
bool flag;               
try               
{                   
    xmlDocument.LoadXml(text2);                    strVerified = text2;                    flag = true;               
}                
catch (XmlException)              
  {                    flag = false;               
}             
   result = flag;            
}           
return result;    
    }

3.对激活码签名验证的地方      
[C#] 纯文本查看 复制代码
private static XmlNode smethod_14(XmlNode xmlNode_0, string string_0, string string_1, out string string_2)      
  {            XmlNode xmlNode = xmlNode_0.SelectSingleNode(string_0 + "/data");         
   XmlNode xmlNode2 = xmlNode_0.SelectSingleNode(string_0 + "/signature");           
if (xmlNode == null || xmlNode2 == null)           
{               
throw new ActivationException(Class790.string_10);           
}           
string text = xmlNode2.InnerText.Trim();           
if (text.Length == 0)           
{               
throw new ActivationException(Class790.string_9);      
   }            
StringBuilder stringBuilder = new StringBuilder();          
  xmlNode_0.WriteTo(new XmlTextWriter(new StringWriter(stringBuilder))          
  {                Indentation = 0,                Formatting = Formatting.Indented            });            
string_2 = stringBuilder.ToString();          
  RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider(new CspParameters            {                Flags = CspProviderFlags.UseMachineKeyStore            });            rSACryptoServiceProvider.FromXmlString(string_1);         
   try          
  {                byte[] byte_;                try                
{                    byte_ = Convert.FromBase64String(text); //签名               
}                
catch (FormatException)              
  {                    throw new ActivationException(Class790.string_9);               
}              
  byte[] bytes = Encoding.UTF8.GetBytes(string_2.Substring(string_2.IndexOf("<data>"), string_2.IndexOf("</data>") - string_2.IndexOf("<data>") + 7));              
  if (!Class791.smethod_0(rSACryptoServiceProvider, bytes, new SHA1CryptoServiceProvider(), byte_))              
  {                    throw new ActivationException(Class790.string_13);              
  }           
}         
   finally           
{                rSACryptoServiceProvider.Clear();            }          
  return xmlNode;       
}             


[C#] 纯文本查看 复制代码
  private static bool smethod_1(RSACryptoServiceProvider rsacryptoServiceProvider_0, byte[] byte_0, HashAlgorithm hashAlgorithm_0, byte[] byte_1)     
   {                    string text = hashAlgorithm_0.GetType().ToString();           
      if (CryptoConfig.MapNameToOID(text) == null)          
  {                
             throw new CryptographicException("Uh-hoh, I couldn't find the oid for {0}", text);         
   }        
    byte[] rgbHash = hashAlgorithm_0.ComputeHash(byte_0);  
    return rsacryptoServiceProvider_0.VerifyHash(rgbHash, text, byte_1);      
  }  
  }

reflector客户端中的公钥:
"<RSAKeyValue><Modulus>zLizNmLUd4VlIWee1GXgn/KxEwcghPASQ+NUzZhbY2fTGzpW64T6yEOdHlIbhX1DX6yAz2gMZKfnpQL2aFqxh5ACFV9dONSTzuQzkqeXwFEARsMxGP3eTQSWMpwVhEcraSn1zOqMb3CRDeQpgasq0lv4HRFhbwalOifKarjEL/8=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"
注册机中的私钥是能搞出来确实挺NB,正常点的破解方法是替换公钥了。
激活码的生成方法:用私钥对请求码签名,对签名后的数据做base64编码。
验证过程:讲签名数据从base64编码转换成二进制子串,用rsa校验。
附上用de4dot处理后的注册机。

注册机-cleaned.zip

11.5 KB, 下载次数: 184, 下载积分: 吾爱币 -1 CB

整理后的注册机

免费评分

参与人数 22威望 +2 吾爱币 +30 热心值 +21 收起 理由
microhappy + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Three_fish + 1 + 1 谢谢@Thanks!
noalieri + 1 + 1 我很赞同!
ripples + 1 + 1 谢谢@Thanks!
soyiC + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
starh + 1 + 1 我很赞同!
海绵foryou + 1 + 1 热心回复!
18695673937 + 1 + 1 注册机里面有私钥?求解是如何搞到的!
文可う润心 + 1 + 1 谢谢@Thanks!
jacky520510 + 1 + 1 热心回复!
三楼有鬼 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
浅时光倾城丶 + 1 + 1 我很赞同!
Chlrun + 1 + 1 支持原创~
kakalala + 1 + 1 谢谢@Thanks!
a5606495 + 1 + 1 我很赞同!
╰☆起點☆ツ + 1 + 1 谢谢@Thanks!
ccraker + 1 + 1 谢谢@Thanks!
billy98 + 1 谢谢@Thanks!
hcloveld + 1 + 1 谢谢@Thanks!
Hmily + 2 + 10 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
zfzzqlx + 1 + 1 热心回复!
ugvnui + 1 + 1 用心讨论,共获提升!

查看全部评分

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

 楼主| littlewisp 发表于 2017-3-22 09:12
╰☆起點☆ツ 发表于 2017-3-21 18:26
老司机这是我的 悬赏帖子:  http://www.52pojie.cn/thread-591919-1-1.html  帮忙看看!!感谢感谢!!

没看懂,呵呵,其他工具的使用可以百度搜下,很简单的
╰☆起點☆ツ 发表于 2017-3-21 18:23
楼主!!我也是学.Net的一直在用Reflactor,这个破解教程没看懂,也没有用过dnspy和de4dot,看不懂过程,老司机可以告诉我这两个软件是用来干什么的??老司机带带我吧!!
 楼主| littlewisp 发表于 2017-3-21 10:51
格式好乱

点评

别直接复制粘贴,代码可以用代码框处理一下,就会好看多了,我给你把格式清除了,你试试重新编辑下。  详情 回复 发表于 2017-3-21 12:12
Hmily 发表于 2017-3-21 12:12

别直接复制粘贴,代码可以用代码框处理一下,就会好看多了,我给你把格式清除了,你试试重新编辑下。
egaokiss 发表于 2017-3-21 15:07
虽然我没有看懂。。。。。感谢分享,您辛苦了!
yu逍遥 发表于 2017-3-21 15:49
支持教程受益不少
Yac836 发表于 2017-3-21 17:45
楼主厉害啊
junwinner 发表于 2017-3-21 18:14 来自手机
厉害了,这个叼叼叼叼
╰☆起點☆ツ 发表于 2017-3-21 18:26
老司机这是我的 悬赏帖子:  http://www.52pojie.cn/thread-591919-1-1.html  帮忙看看!!感谢感谢!!
wwml.cc 发表于 2017-3-21 18:56 来自手机
感谢分享。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-15 14:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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