破解SQL Prompt 3.9的几步操作

破解SQL Prompt 3.9的几步操作

关于SQL Prompt 的破解文章园子里已经有不少人发过了。破解思路我也不想重复,不知道的可以参考:http://www.cnblogs.com/jintan/archive/2008/06/16/1223282.html

官方下载地址是:http://downloads.red-gate.com/SQLToolbelt.exe

接下来我就说说具体怎么做吧。我就说说最简单最傻瓜的做法,不需要懂IL照样破解!

准备:用到的工具VS2005|VS2008 、DotNet Helper 、Reflector

1.将最新版的SQL Prompt 3.9下载下来安装好。我安装在D:\Program Files\Red Gate\SQL Prompt 3目录下。

2.用DotNet Helper 将RedGate.Licensing.Client.dll反编译成IL。DotNet Helper确实很方便,用于可视化的反编译和编译,界面如图:

 破解SQL Prompt 3.9的几步操作_第1张图片

点击“反编译”按钮,即可将RedGate.Licensing.Client.dll反编译成IL,如下图:

 破解SQL Prompt 3.9的几步操作_第2张图片

3.用Reflector打开RedGate.Licensing.Client.dll,找到License类的DaysLeftInTrial属性,将语言选成IL,然后查看该属性下的方法get_DaysLeftInTrial,如图:

 破解SQL Prompt 3.9的几步操作_第3张图片

4.这里是返回还剩下的试用天数,如果我将这个属性的逻辑改为返回9999,那岂不是不会试用过期了。但是如果不会IL怎么办?简单。使用VS新建一个控制台应用程序,在其中类下面建属性,该属性返回9999:

public int GetStudyzy

{

    get

    {

        return 9999;

    }

}

5.将VS中的这个程序编译好。然后使用Reflector查看该程序,找到这个属性:

破解SQL Prompt 3.9的几步操作_第4张图片 

6.这不就是我们想要的返回9999的IL了吗?用文本编辑器打开RedGate.Licensing.Client.il,搜索get_DaysLeftInTrial字符串,找到该方法的定义,然后将其中的内容修改为返回9999的这个IL的内容:

.method public hidebysig specialname instance int32

        get_DaysLeftInTrial() cil managed

{

  .maxstack 1

  .locals init (

      [0] int32 CS$1$0000)

  L_0000: nop

  L_0001: ldc.i4 0x270f

  L_0006: stloc.0

  L_0007: br.s L_0009

  L_0009: ldloc.0

  L_000a: ret

} // end of method Licence::get_DaysLeftInTrial

7.保存IL的修改。使用DotNet Helper,点击其中的“编译”按钮,将会编译出修改后的程序集:RedGate.Licensing.Client_Output.dll,将这个程序集替换掉原来的程序集。

8.去掉强命名。

注意:去掉强命名要用到sn命令,而这个命令是在.net framework 2.0 SDK中提供的,如果用户没有装SDK的话那还得装一个,该SDK在微软官方网站有下载,也可以通过VS的安装光盘来安装。安装后在如下位置有SDK命令提示:破解SQL Prompt 3.9的几步操作_第5张图片

进入SDK的命令行模式,输入如下命令即可:

 cd dll所在的安装路径

sn -Vr RedGate.Licensing.Client.dll

 

9.打开数据库管理工具,然后查看当前的天数:

似乎成功了!!!!!

我也还是为了保险起见,把TrialStatus 也用同样的方法修改吧。修改成:

public TrialStatus TrialStatus

破解SQL Prompt 3.9的几步操作 - zryou - zryou的个人主页{

破解SQL Prompt 3.9的几步操作 - zryou - zryou的个人主页     get{return TrialStatus.InTrain; }

破解SQL Prompt 3.9的几步操作 - zryou - zryou的个人主页     set{破解SQL Prompt 3.9的几步操作 - zryou - zryou的个人主页.}

破解SQL Prompt 3.9的几步操作 - zryou - zryou的个人主页

具体做法还是一样的,在VS中写你想要返回的结果的代码,然后编译,然后Reflector查看,然后将查看的IL覆盖掉License中的IL内容。

OK,就介绍这么多了。纯属学习和交流,大家试着自己破解吧,如果只想使用该软件的就下载这个DLL:http://files.cnblogs.com/studyzy/RedGate.Licensing.Client.rar

 

最后再补充一句,我破解的这个dll文件的版本是2.6.0.64,所有使用这个版本的其他RedGate公司的工具都可以使用我这个破解文件。当然不要忘记了去掉强命名哦,不然要报错。最后再附上一张使用本软件的效果截图:

破解SQL Prompt 3.9的几步操作_第6张图片

 

 

 

 

 

 上一篇关于 推荐SQL Prompt 3.8的随笔,园子里几位朋友回复反应不能使用格式化功能,并强烈要求再次解决该问题,

      所以昨天晚上弄到凌晨2点,最终的SQL Prompt补丁:
下载地址: /Files/jintan/Sql_Prompt_RedGate.Licensing.Client.rar
支持格式化SQL

其实破解过程很简单,没有涉及到脱壳,跟踪等。

大致的思路是这样的:
public int DaysLeftInTrial 这个属性返回值大于0,我这里是14,
        public   int  DaysLeftInTrial
        
{
            
get
            
{
                
int days;
                
if (this.TrialStatus != TrialStatus.InTrial)
                
{
                    
return 0;
                }

                
if (this.d == DateTime.MinValue)
                
{
                    TimeSpan span 
= DateTime.UtcNow.Subtract(this.b);
                    days 
= 14 - span.Days;
                }

                
else
                
{
                    days 
= this.d.Subtract(DateTime.UtcNow).Days;
                }

                
if (days < 0)
                
{
                    days 
= 14;
                }

                
return days;
            }

        }
 


为了保险起见,我又修改了TrialStatus ,
public TrialStatus TrialStatus 

     get{
return  TrialStatus.InTrain; } 
     set{.} 

这样已经可以保证永远都是试用并且不过期。

最后修改IL代码,我用的是 http://www.codeproject.com/KB/dotnet/NetDasm.aspx这个工具修改IL,配合Reflector使用
当然你也可以直接用SDK里面的ildasm+ilasm工具修改。

这次不用做去掉强命名的操作了,直接copy到目录覆盖原来的就行了。
注意:经测试,一定要去掉强命名才能使用,请自己去掉RedGate.Licensing.Client.dll的强命名。

对于Red-Gate的其他产品,同样可以使用上面的方法,应该没有问题的。

注:
上个版本修改的地方是:
public   bool  get_Activated()
{
    
return true;
}
对应的IL:
Code:
method public hidebysig specialname instance bool get_Activated() cil managed {.maxstack 8L_0000: ldc.i4.1L_0001: ret}
但是不知道什么原因,格式化的菜单一直是灰色。所以才有现在的这个Patch

你可能感兴趣的:(prompt)