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

本人写这个,仅供学习和研究之用,也算是自己的一个心得,注册后的插件,自己在家玩玩可以,但最好别拿去开发产品,更不要用于商业用途,JBuilder的教训是深刻的,作为公司觉得好还是去买正版吧,这点钱对公司来说还不算贵。如出现版权问题,本人概不负责。

自已编写Resharper v1.0注册机的流水帐(1) -- 上阵、分析、碰壁
自已编写Resharper v1.0注册机的流水帐(2) -- 分析算法、痛苦


四、大功告成

神来了,那就是发动群众的力量,半夜三更爬上MSN,发动群众帮我找高效的RSA分析工具或算法, IceSharK兄弟一连给俺找了三四个RSA工具,其中有个叫RSATool的东东,看样子还蛮专业的,不管它,用上先。

运气真好,神立马就出现了:)本来我还以为要算上几天的,结果在和IceSharK聊天的几分钟内就完成了,不敢相信啊。

结果如下,P Q全出来了:)

       p: 76934561593903517890538965067

q: 44708964245672789920122782207

e: 3439664563558343388897268028516178220150974083190422162869

       由于BigInteger算出来的素数并不一定是完全正确的,所以我还不敢肯定的说已经成功了。但是总要试试吧。将PQ的值分别代入公式

       Z = (p – 1) * (q – 1)

       Z = 3439664563558343388897268028394534694311397775379760415596

       OK,知道了ZD也就搞定了。

       现在PQZ EDMICI都统统知道了,加密还有啥难的呢:)代公式就行了。

       完成这个注册机:),VS.net 2003写的。
   
   

用算出的号码一试,哈哈。

   

OK,大功告成:)

 

以下是注册机的核心算法,主要就这些,其它的都是winform操作:)

这样看,代码就很简单了:
   

// 生成License
        
// 飞刀再次提醒,本代码仅学习和研究之用,千万别用于商业,否则版权纠纷很麻烦的。
        private string getLicense()
        
{
            
int iUserHash = UserHash();

            
// 基础的Seed,即找到Endless License的明文
            BigInteger bigBaseSeed = new BigInteger((long65535);
            bigBaseSeed 
<<= 56// 校验代码中向右移56位,我就向左移56位
            bigBaseSeed += new BigInteger((long) iUserHash); // 为了使IsChecksum返回true

            
// Public Key 即充当N
            BigInteger bigPublickKey = new BigInteger(Constants.PUBLIC_KEY, 10);

            
// Private Key 即充当Z
            BigInteger bigPrivateKey = new BigInteger(Constants.PRIVATE_KEY, 10);

            
// 用户名计算 即充当E
            BigInteger bigUserName = new BigInteger(Encoding.Default.GetBytes(_username));
            bigUserName 
|= 1;

            
// 搞定最重要的密钥D
            BigInteger bigD = bigUserName.modInverse(bigPrivateKey);

            
// 套加密公式 ci = n^d mod n
            BigInteger bigLicense = bigBaseSeed.modPow(bigD, bigPublickKey);


            
return (Convert.ToBase64String(bigLicense.getBytes()));
        }


        
// UserHash ,直接从反编译的源代码中抄过来的
        
// 作用是判断用户名与License是否匹配
        private int UserHash()
        
{
            
int i = 0;
            
for (int j = 0; j < _username.Length; j++)
            
{
                i 
= ((i << 7+ _username[j])%65521;
            }


            
for (int k = 0; k < _company.Length; k++)
            
{
                i 
= ((i << 7+ _company[k])%65521;
            }

            
return (i);
        }


为防止被找麻烦,注册机现在不再提供下载了。


如果需要的兄弟,请你们自已在这文章的评论里面找“灵感之源”兄弟的贴,里面有下载的链接。

老是发邮件,我已经没有精力了。

注册机真的真的不要用于商业,自己玩玩就可以了。
   


 


   

posted on 2004-08-12 10:07  飞刀  阅读(12362)  评论(88编辑  收藏  举报

导航