PostSharp是基于.NET平台设计的比较强调易学易用的AOP框架。

什么是AOP? http://wayfarer.cnblogs.com/articles/241024.html

新版的已失效,注册码验证能过,但不能使用

准备工作

  1. 安装.Net Reflector或者类似的工具
  2. 给.Net Reflector 装上Reflector.BamlViewer插件,它可以查看xaml。下载地址:http://reflectoraddins.codeplex.com/releases
  3. 到PostSharp官网下载最新版(4.0.29),并安装 下载地址:http://www.postsharp.net/download

开始干活

找到安装目录,我用的是win8,vs2012,安装目录是C:\Users\【用户名】\AppData\Local\Microsoft\VisualStudio\10.0\Extensions\*

vs2012 C:\Users\【用户名】\AppData\Local\Microsoft\VisualStudio\12.0\Extensions\*

最后的*是随机的,一个个点开看吧,或者搜文件PostSharp.dll,一看结果就知道了

先看看注册界面是怎么样的,再通过.Net Reflector反编译PostSharp.HQ.v3.0.exe找到对应界面。注册界面如下,它是一个WPF窗口

经过一番查找后发现是enterlicensekeypage

转到这这个界面对应是代码上PostSharp.HQ.Licensing.EnterLicenseKeyPage,得到以下代码

  public override void OnNext()
{
this.__PS___z_aspect29.OnMethodEntry(null);
try
{
string str;
License license = License.Deserialize(this.licenseKeyTextBox.Text);
.....

跟过去,基本确定注册吗验证代码都在PostSharp.Sdk.Extensibility.Licensing.License这个类中(这个类在PostSharp.Settings.dll这个dll中)

从类中的几个方法看出,此类包含生成注册码和验证注册吗功能。采用DSA加密方式

public class License
{
public static License Create(LicensedProduct product);
public static License Deserialize(string licenseString);
public string Serialize();
public void Sign(byte signatureKeyId, string privateKey);
public virtual bool Validate(byte[] publicKeyToken, out string errorDescription);
public bool VerifySignature();
public bool VerifySignature(DSA publicKey); ...
}

可以通过以下代码生成一个注册码

 License lic = License.Create(LicensedProduct.PostSharp30);
lic.LicenseGuid = Guid.NewGuid();
lic.LicenseType = (byte)LicenseType.Commercial;
lic.Product = LicensedProduct.PostSharp30;
lic.Sign(, privateKey);
string sn = lic.Serialize(); //最终注册码

你以为到这里就完了吗?错了,请问你弄到privateKey(私钥)了吗

当然你有本事弄到私钥,到这步就完成了。可是我弄不到,只能想别的办法了。

再往下研究,发现PostSharp.Sdk.Extensibility.Licensing.CryptoUtilities类中提供了公钥

public static class CryptoUtilities
{
// Fields
private static readonly DSA productionPublicKey0 = DSA.Create();
private static readonly DSA productionPublicKey1 = DSA.Create(); // Methods
static CryptoUtilities()
{
productionPublicKey0.FromXmlString("<DSAKeyValue><P>9cMyBYBokidciAghqE1POnEbcxpBui3PfazddrQjndkDtPskGvBcjS8LIStB/jR0SICKmLMwl7WoocpdXgYTOopgKJ33E4NOIhc1vbQR6vCCidGWlN88hUKCQJ8cGzme/LDmUT5zfK3TfM6LkMU1fYTNARrefIZkSlg4GGIjZ38=</P><Q>m9h5p2kl1vlwuw12AOQbem3yDXU=</Q><G>pBkhekdI1vk084zMbubnu7qtDyTid6x01crQJiERfmk2HgFt13dXHwei/1kgrRJPWrtZVRKMmO8w+p4jfle82n2/BaFNBLouUoQ/fBYPPdDZBocd/tXqBduF5zq1S12tDv8TIIarMTRtj18F5e68cxBPbweVs4n8meqLEQL5AwA=</G><Y>e2otaOKaVFxnEoHI4g1f7BCcrOaAwd1/GTMkEXGaNw3CYucIuOJdvlZEWa/pa4DTUeK4McHOXRJsZMQdHaoh+dK17NdmMxTa2UMokyoIdayu9kw9TbWUy2zXovJ8CHJVP4RU8wlJk1RKjeMuSK3lYPgo2RTbV9UbU2qK1gmVwg4=</Y><J>AAAAAZOzu4FkAIr0MjlqqHtPNWrFTfjw4/qDWuFvHEf7ioaj8vqRao8mbqsLueqvYIYQ8g8w2WNWFAOG6e8waiQhX2O/DRSZNbc/JfdjQqlPli5be6FqNsGnjKXdEt2boONKU/fpGx/m69V+a/4jxg==</J><Seed>1B0yRR/A/kmE1zMUIFiEMmJ328M=</Seed><PgenCounter>Xg==</PgenCounter></DSAKeyValue>");
productionPublicKey1.FromXmlString("<DSAKeyValue><P>vAmBC+eZJaZa7HdlTDAgsfcT0QSjqN8d8fEeZ9E1kxfIAYGerlHFHW/A5muBYy8FyO7W8r4mqxpxcvFQEeEqVe89BUXecHjh6FkTEsT25r/nbV4jnZBxNz16qb7A6t8MCr0jzuzrIGFVP5VG/ad0s/1078WqpwQqJQXHmH/lXX0=</P><Q>+RdtGnwCJw4u2H/goSLtaAGr1U0=</Q><G>sxQQgHIuRgYOMtB+r7EGRO/OTRGXhUrFyZ1R9nVerGGC2juEVWSoydr2JquILOwIO7+1kIOwbkhCjNlZIAdvWRlN5COF7gHfPi1dSX7LzDcNbZDADvrOUmk1KG3hZ3Vf67XIbug2/nq8aij7gbEs4eA26EWWpObO0a+e2QmsQII=</G><Y>dP073SH4QG5KiV5BbZEDLiV3/D2eD18D9jsMVD1p+eMZsffU88/Pxfen1Pe5cyulw8gQkEvlAa3GEmGsaGaa7Qp245NPD8fbEOLFu3tdwMhw/ylRHpjTS7BDRjvGeyGwSS0WTWQCwCyI8LN6Rvg7p4RfhHIaAWWkTJNVAG7AN7g=</Y><J>wUCV+9KzxPW+J3/DIm3sIfVf29Z8u5zPXnEZbMTrkWwdgOTSPuXimtiQku8knyWD3iC+GqyhtoFqdgXqQS6WcadAABb2U5mMTL0V1o6Jy6c0cyPb9blmf5wdZxMKVlXe9lcAO8rP16XhQGVs</J><Seed>h7zytTPqA9Ue3F7c/j+9iXW4Ebw=</Seed><PgenCounter>Aag=</PgenCounter></DSAKeyValue>");
} }

验证注册吗就用上述的公钥去验证。

那么能不能自己生成公钥私钥去PostSharp.Sdk.Extensibility.Licensing.CryptoUtilities类的的公钥替换掉呢,答案是肯定的。

先看看怎么生成公钥私钥

DSACryptoServiceProvider dsac = new DSACryptoServiceProvider();
string strPublic = dsac.ToXmlString(false); //公钥
string strPrivate = dsac.ToXmlString(true); //私钥

结果如:

公钥

<DSAKeyValue><P>gSFAXq2fbk0P+6y1G6aYXlUPdESfs42kaF/v4pfkt9sNx1bx8Ni4IVzXdgtDLKhIpL9cv6Ho0pEM5qCVZ0oY8QZJpt8PC4ZEiCEgWFGLLLooriZmJPwsEQtcjB/sz4lvvO9oFrLnrYS16e3FCriImDTBVtv3TVptjTjzwWuLDsM=</P><Q>0jat9uBZUDVQJOz8wSD4n0YffmU=</Q><G>epyQJV9QGsh845z+QD8v1GpipREXn+UXmkiW9vPs3BVGGM0ghZFDduArfMn8wZYX4ByIOU1t0tLsZ00Aac1Wu3ZB+X1ccY6E5AVeRLDialis4YyYPjO0wdmZezm9feOSg866450wknur/k9Jz3VnnOC/lrd1tAsIYRajmYCDMZs=</G><Y>MfdvjimBnuxe3s0+xRMcF2BRokqDANzwrMxMJCfmr9Y/Xn+a+uii4/S56169uUryU6hKcuWVoYdSFo7upLDSl8mVn37gg/N78m942PBh2qFRBCLLaGtkV81dRxSxsqln54AlBx5XrfHbAmAGkfAuIA11EeQcJSCt75qkliJNbGw=</Y><Seed>8DxESgmqPh6mI5OkwmQBDiiIrHc=</Seed><PgenCounter>A9M=</PgenCounter></DSAKeyValue>

私钥

<DSAKeyValue><P>gSFAXq2fbk0P+6y1G6aYXlUPdESfs42kaF/v4pfkt9sNx1bx8Ni4IVzXdgtDLKhIpL9cv6Ho0pEM5qCVZ0oY8QZJpt8PC4ZEiCEgWFGLLLooriZmJPwsEQtcjB/sz4lvvO9oFrLnrYS16e3FCriImDTBVtv3TVptjTjzwWuLDsM=</P><Q>0jat9uBZUDVQJOz8wSD4n0YffmU=</Q><G>epyQJV9QGsh845z+QD8v1GpipREXn+UXmkiW9vPs3BVGGM0ghZFDduArfMn8wZYX4ByIOU1t0tLsZ00Aac1Wu3ZB+X1ccY6E5AVeRLDialis4YyYPjO0wdmZezm9feOSg866450wknur/k9Jz3VnnOC/lrd1tAsIYRajmYCDMZs=</G><Y>MfdvjimBnuxe3s0+xRMcF2BRokqDANzwrMxMJCfmr9Y/Xn+a+uii4/S56169uUryU6hKcuWVoYdSFo7upLDSl8mVn37gg/N78m942PBh2qFRBCLLaGtkV81dRxSxsqln54AlBx5XrfHbAmAGkfAuIA11EeQcJSCt75qkliJNbGw=</Y><Seed>8DxESgmqPh6mI5OkwmQBDiiIrHc=</Seed><PgenCounter>A9M=</PgenCounter><X>ZN67VkaNCRolYpQDVKCOeNYK88M=</X></DSAKeyValue>

ok公钥私钥准备好了,怎么改PostSharp.Sdk.Extensibility.Licensing.CryptoUtilities里的公钥呢

把PostSharp.Settings.dll复制出,打开vs命令行,用ildasm来反编译成il代码

ildasm PostSharp.Settings.dll /output= PostSharp.Settings.il

在生成的il代码中找到设置公钥的代码(搜 .class public abstract auto ansi sealed PostSharp.Sdk.Extensibility.Licensing.CryptoUtilities),把公钥(两个都)改成刚才生成的公钥保存il

再用ilasm 生成dll文件

ilasm PostSharp.Settings.il /dll

到此,已经把新的公钥写到PostSharp.Settings.dll中了

把新的PostSharp.Settings.dll复制到PostSharp安装目录中,覆盖原有的。打开PostSharp注册,输入上面生成的注册码。下一步,惊喜出现了

大功告成!

下载就不提供了,原因你懂的

后:

发现PostSharp注册成功后,下次启动不再对已注册的key进行合法性判断。根据此bug,另外制作了一个不用修改dll的注册机,原理是注册的时候,注入dll到注册程序,用反射的原理修改注册程序的公钥,即能达到目的。

如果被杀毒软件拦截注入,必须点允许才可以注册成功

PostSharp 4.0注册机实现过程的更多相关文章

  1. UltraEdit v17.10.0,注册机,注册码

    1,UltraEdit注册机 :点击下载 2,断掉网络,进入UltraEdit软件,依次点击:帮助——注册/激活——激活,会提示你进行脱机激活,点击脱机激活后,将用户码1和用户码2 分别输入注册机的u ...

  2. wing 5.0 注册机

    输入License id 进入下一页获得request key ,输入request key 后点击生成,即可生成激活码,亲测可用 下载链接 密码:adwj

  3. 菜鸟 学注册机编写之 “MD5”

    测试环境  系统: xp sp3 调试器 :od 1.10 sc_office_2003_pro 高手不要见笑,仅供小菜玩乐,有不对或不足的地方还请多多指教,不胜感激! 一:定位关键CALL 1. 因 ...

  4. Navicat Premium 12破解版激活(全新注册机)

    使用打包下载就可以了 打包下载:(注册机有5.0和5.1用哪个看心情,我用的5.1) 连接:https://pan.baidu.com/s/1ARjFa2vEYxe9sljbrZR8fQ 提取码:lx ...

  5. 【转】破解Source Insight 3.5.0072过程 附:安装软件+注册机

    转载地址:http://blog.csdn.net/qs_hud/article/details/8884867 注册机及软件下载地址:http://download.csdn.net/detail/ ...

  6. RockWare RockWorks的Ollydbg调试过程及注册机(破解)思路

    最近拿到了RockWorks15的安装包,可惜没有破解,试用也只能用14天.用PEiD工具察看了一下,Delphi编写的程序,竟然没加壳.本想用OllyDBG调试进去爆破一下,不意发现注册码很简单,如 ...

  7. IntelliJ IDEA 7.0 正式版注册机代码

    好神奇,第一次看见注册机的源代码,自己运行一下.可以是java IDE环境,也可以是配置好jdk的dos环境. 然后输入自己的用户名就可以获得相对应的注册码,输入到软件中即可. 仅供参考,请购买正版. ...

  8. [转]Wing IDE 6.0 安装及算号器注册机代码

    下载安装wing 选择第三个,运行算号器,输入license id 输入request id. Python 2 算号器注册机代码 import string import random import ...

  9. 010 Editor v8.0.1(32 - bit) 算法逆向分析、注册机编写

    010 Editor 的逆向分析整体算下来还是比较简单的,将程序拖入OD,通过字符串搜索定位到核心代码,经过分析,主要是如下图所示的两个关键函数,返回正确的值,才算是注册成功. 00409C9B 这个 ...

随机推荐

  1. 使用ab对nginx进行压力测试

    nginx以高并发,省内存著称. 相信大多数安装nginx的同学都想知道自己的nginx性能如何. 我想跟大家分享下我使用ab工具的压力测试方法和结果, ab是针对apache的性能测试工具,可以只安 ...

  2. Django基础,Day6 - 单元测试tests

    在django项目app目录下,有个tests.py,我们通常可以直接在这文件中写我们的单元测试代码. test for a model 根据前面章节的操作步骤下来,在Question Model中有 ...

  3. Spring学习记录1--@Transactional Propagation

    起因 学习Spring的时候就知道aop有一个应用是声明式注解..反正往Service上一丢@Transactional就完事了..不用自己去开启hibernate的session,很简单. 但是@T ...

  4. switch的使用

    ji本没用过这个函数,今天用到了它,发现了一些使用要注意的地方: switch的参数支持int和枚举,单jdk1.7后,开始支持String类型.我特意在jdk1.8上试了试, public clas ...

  5. Uva 11732 strcmp() Anyone?

    strcmp() Anyone? Time Limit: 2000MS   Memory Limit: Unknown   64bit IO Format: %lld & %llu [Subm ...

  6. nginx使用ngx_lua访问后端Thrift-Server实现和介绍

    背景 随着openresty的出现,让nginx使用lua解决一些业务的能力大幅度提高,ngx_lua可以使用nginx自生的基于事件驱动的IO模型,和后端的存储,业务等系统实现非阻塞的连接交互. 如 ...

  7. 项目管理的一些Tip

    最近带领了一个大概150人天的项目,做一些备注: 1, 知人善用. 排期分任务的时候,要先了解每个团队成员的特点,包括技术水平.性格,看他是适合做技术难度大的模块还是适合做业务逻辑复杂的模块. 2, ...

  8. linux下vmware的安装、物理分区使用及卸载

    1.安装 先下载安装文件VMware-Workstation-Full-12 在命令行下执行下载的文件安装即可(需要root权限) wget https://download3.vmware.com/ ...

  9. No.11

    每天干点杂活,充实自己,获得一种短暂的安全感......

  10. OpenGL中坐标系的理解(一)

    在OpenGL中,存在着至少存在着三种矩阵,对应着函数glMatrixMode()的三个参数:GL_MODELVIEW,GL_PROJECTION,GL_TEXTURE. 以下主要描述GL_MODEL ...