惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Darknet – Hacking Tools, Hacker News & Cyber Security
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
G
GRAHAM CLULEY
S
Securelist
Schneier on Security
Schneier on Security
Help Net Security
Help Net Security
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Project Zero
Project Zero
Spread Privacy
Spread Privacy
P
Privacy International News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
T
Tailwind CSS Blog
博客园_首页
有赞技术团队
有赞技术团队
Simon Willison's Weblog
Simon Willison's Weblog
Stack Overflow Blog
Stack Overflow Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
T
Tor Project blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Attack and Defense Labs
Attack and Defense Labs
www.infosecurity-magazine.com
www.infosecurity-magazine.com
O
OpenAI News
J
Java Code Geeks
T
Tenable Blog
K
Kaspersky official blog
AWS News Blog
AWS News Blog
S
Security @ Cisco Blogs
The GitHub Blog
The GitHub Blog
T
Threatpost
月光博客
月光博客
H
Heimdal Security Blog
Security Latest
Security Latest
The Hacker News
The Hacker News
Y
Y Combinator Blog
A
Arctic Wolf
Apple Machine Learning Research
Apple Machine Learning Research
C
Cisco Blogs
美团技术团队
Microsoft Security Blog
Microsoft Security Blog
Hugging Face - Blog
Hugging Face - Blog
T
The Blog of Author Tim Ferriss
C
CERT Recently Published Vulnerability Notes
D
Docker
Google Online Security Blog
Google Online Security Blog
D
DataBreaches.Net
V
Visual Studio Blog
H
Help Net Security

博客园 - 飞刀

人生就是这样脆弱,纪念一位刚刚离去的同事 使用动感地带(CMWAP)+笔记本上网 上次被张艺媒给骗了, 这次又给陈凯歌给骗了,炒做的都不是好电影。 刚参加微软的新产品发布会 已经向CSDN提出辞职,不再担任了.Net大版主的职位了。 最近仔细研究了一下Java的NIO以及线程并发,搞清了点思路,特作笔记如下(NIO篇) 哈哈,.Net开源领域的发展比我想像的快啊。 Vs2005 B2中带的测试框架不错,至少在DotNet领域是最好的了。 最近一个专家的退出,.net内部是闹翻了天。 最近心情很郁闷,好多事情都堆在一起,很烦 总算是搞定了Nunit的调试。 与 吕震宇 的共鸣,有感于“专注于技术” 马桶上的乱弹(乱谈JDK5.0 和 .net 2.0) 自已编写Resharper v1.0注册机的流水帐(3) -- 大功告成:) 自已编写Resharper v1.0注册机的流水帐(1) -- 上阵、分析、碰壁 推荐一个NB的Vs.net 2003插件 吃坏肚子了。。。。唉。。。 有关于Refactor(重构)与Source(源)的比较 比较Eclipse,试用Vs.net 2005(Whidbey) 预览版的感受
自已编写Resharper v1.0注册机的流水帐(2) -- 分析算法、痛苦
飞刀 · 2004-08-12 · via 博客园 - 飞刀

本人写这个,仅供学习和研究之用,也算是自己的一个心得,注册后的插件,自己在家玩玩可以,但最好别拿去开发产品,更不要用于商业用途,JBuilder的教训是深刻的,作为公司觉得好还是去买正版吧,这点钱对公司来说还不算贵。如出现版权问题,本人概不负责。 自已编写Resharper v1.0注册机的流水帐(1) -- 上阵、分析、碰壁

四、注册机

       做注册机,就得搞清别人的算法,算法估计都在LicenseChecker类里面,现在看他的代码吧。。

       首先是构造函数:
   

public LicenseChecker(string publickey, string username, string company, string license)
{
    
// 搞定public key
      this.N = new BigInteger(publickey, 10);
      
this._username = username;
      
this._company = company;
      
try
      
{
        
// _code 就是最终的明文Lincense
            this._code = new BigInteger(Convert.FromBase64String(license));
      }

      
catch (FormatException)
      
{
            
this._code = LicenseChecker._zero;
            
return;
      }

    
// 将username转换为Biginteger,并与1进行位或运算
      byte[] buffer1 = LicenseChecker.GetBytesFromString(username);
      BigInteger integer1 
= new BigInteger(buffer1);
      integer1 
= BigInteger.op_BitwiseOr(integer1, BigInteger.op_Implicit(((int1)));

    
// 解码
      this._code = this._code.modPow(integer1, this.N);
}

唉,代码还是太。。。看来Reflector还要改进。不过看懂还是没有问题的,

1. 取得PublicKey,并将其以十进制转换为BigInteger类型

       2. License解码,并转换为BigInteger类型.

       3. username也转换为BigInteger类型,并与1做位或运算,实际上它就是真正的公钥。

       4. usernameBigIntegerpublicKeyBigIntegerLicense做模&&幂运算。

看到这里,我算是看懂了,又是BigInteger,又是publicKey,又是modPow运算,再明显不过了,这就是RSA算法嘛!!!太好玩了,兄弟们赶快去找公式,这个算法俺后面就不具体说了的。

       其中BigInteger类是算法的重点,C#中没有现成的类型,用Resharper自带的吧,But由于重载了很多运算符,resharper反编译出来的代码几乎不可读,咋办?

       俺想起了,JDK。。。在JDK 1.4BigInteger是标准库中的,JDK又是开源的,拿过来抄抄嘛:)

       但是一打开JDKBigInteger源代码,天,那么多,还继承至一个Number,而且Java是不支持运算符重载的:(算了,俺很懒,还是网上找找有没有现成的吧。

       Google就是牛,一下子就找到了,还是C#的。。。

       http://www.codeproject.com/csharp/BigInteger.asp

       直接拿过来用吧:)

       回头再看,在LicenseChecker构造函数中实际上就是已经把License解码成为“明文”了,并保存在_code字段中了,这个_code代表的“明文”里面又有一些什么信息呢?接着看。

       首先来看IsChecksumOK的源代码

这段代码不用多解释,但是很重要,_code65535进行位与运算,并被65521除余UserHash的值,这个UserHash在反编译的代码写的很清楚,虽然反编译的不咋的,但是改一改就可以直接拿来用了。

       这段代码虽少,但是却是算法的关健,实际上就告诉你了,“明文”是啥样子的。

       还有一个重要的属性是ExpirationDate,他的源代码如下:

这代码太有意思了,看了前两行就不用看了,实际上就是判断(_code >> 56 & 65535) = 65535,等于则返回最大的DateTime,这就是我们要的,我们就是要个无限大的注册时间嘛:)至于后面的带时间的注册信息,看都别看了。。哈哈。

       另外还有几个属性的源代码也是要看一下的,不过,我后面写了一个Check程序验证了几个试用版的号码,发现TypeVersion的值永远为0,所以像TypeVersion这些属性应当是为以后版本准备的,本版本不重要,所以我这里就不多说了。

       “明文”知道了,“密文”又是什么呢?呵呵,这还不简单,License就是加密后的密文嘛:)

       搞到这里,突然想起来CheckerLicener参数中的PublicKey是哪来的还不知道,往上找,找到EnterLicenseForm,发现没有,它自已倒还有一个SetPublic方法,看来,这个PublicKey还是从外面传进来的。

到底是从哪里传来的呢?俺不知道,唉,不了解Vs.net插件是怎么运行的嘛。。。

不过,事到如此,不了解也不行了,马上上网找了几篇讲Vs.net编写插件的文章,一边看一边用,最后又来分析Resharper的结构,花了一个上午,总算是在JetBrains.Resharper.Services.dllJetBrains.Resharper.Shell.Impl命名空间中的LicenseData类找到了它的身影。(唉,这么大一个LicenseData类,我以前怎么就没有看到:()

反编译,PublicKey就这样呈现在我们的面前

OKPublicKey知道了,就要来找PrivateKey了。

回来看看RSA算法,我发现CheckLicense中的modPow运算是把PublicKeyN用的,而将Username做为公钥使用的。

          // Iteger1username | 1的结果,NpublicKeybigint
          this._code = this._code.modPow(integer1, this.N);

       这就意味着,这个publickey,就是两个素数的积(即p * q),只要我算出这两个素数,就可以知道z(即(p-1) * (q-1)),从而就可以知道真正的密钥d了。

       但是MyGod,这个publicKey足有60位啊!!!估计pq的取值也在1*1029次方至1*1030次方之间,俺穷人的机器只有AMD 号称的XP 1700+啊。你要让我算多久啊。。。。

神啊救救我吧。。


自已编写Resharper v1.0注册机的流水帐(3) -- 大功告成:)