代码乱了(靳如坦的技术blog)

专注于.net,c#,Ajax、Sql Server、SmartClient等相关的开发
posts - 79, comments - 364, trackbacks - 6, articles - 0
  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
 上一篇关于推荐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 8
L_0000: ldc.i4.1
L_0001: ret
}
但是不知道什么原因,格式化的菜单一直是灰色。所以才有现在的这个Patch

Tag标签: SQL Prompt 3.8

Feedback

#1楼    回复  引用    

2008-06-16 19:25 by sjm [未注册用户]
请问楼主, 这个SQL PROMPT 我为什么不能用啊

我的是 SQL 2000 简体中文标准版。

我打开 查询分析器后, 用的时候和原来没区别,啥也没有。

sql prompt 我已经启动了

#2楼    回复  引用  查看    

2008-06-16 19:27 by forrestsun      
感谢博主共享:)

#3楼 [楼主]   回复  引用  查看    

2008-06-16 19:33 by 代码乱了      
@sjm
关于你的问题,由于我没有SQL 2000 简体中文的环境,所以不能确切的回答。
你仔细找找工具菜单,另外看看sql prompt 任务栏右下角的有没有图标,有的话再看看是不是已经启用了,有可能是被禁用了。

我记得早期的sql prompt 版本是不能在SQL 2000 简体中文的环境下跑的,需要修改成英文环境,新版本应该是解决了这个问题的,不确定,呵呵

#4楼    回复  引用  查看    

2008-06-16 19:44 by 飞无痕落无声      
ggggggggggggg

#5楼    回复  引用  查看    

2008-06-16 20:05 by 曲滨*銘龘鶽      
这东西主要做什么的?

#6楼 [楼主]   回复  引用  查看    

2008-06-16 20:22 by 代码乱了      
@曲滨*銘龘鶽
http://www.cnblogs.com/jintan/archive/2008/06/13/1220365.html
看一下介绍,主要是SQL Server Managment辅助,SQL的智能提示,只能感知,格式化代码

#7楼    回复  引用  查看    

2008-06-16 20:22 by 高海东      

楼主,我用您最新的dll现在出现下图的情况,我把日期改为7月份后,然后在改为6月份后,就不能用了,您原来的那个dll是可以用,但是不能用格式化功能,我怀疑和原来那个代码有关系,我但和下面这段有关系WMIDeactivateMachineHash 下面的这段代码也是时间限制
if ((licence.a() > DateTime.MinValue) && (licence.a() < DateTime.Now))
{
byte[] buffer2;
licence.TrialStatus = TrialStatus.Tampered;
using (MemoryStream stream = new MemoryStream())
{
licence.Serialize(stream);
buffer2 = stream.ToArray();
}

#8楼    回复  引用    

2008-06-16 20:29 by okwell [未注册用户]
我装了个,这个工具确实很好.
但是破解没有办法运行.(替换RedGate.Licensing.Client.dll后),不知是什么原因

#9楼 [楼主]   回复  引用  查看    

2008-06-16 20:35 by 代码乱了      
@高海东
我这里没有问题啊,我在好几台过期了的机器上测试都没有发现有问题啊,你用
Reflector反编译看一下这个dll是不是和我文章中说的一致的

#10楼 [楼主]   回复  引用  查看    

2008-06-16 20:42 by 代码乱了      
@okwell
请把错误信息,或者截图,或者文字描述,发上来,我好看是什么原因

#11楼    回复  引用    

2008-06-16 20:48 by gaohaidong [未注册用户]
我反编译看您的代码这里的代码是这样的
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 = 8;
}
return days;
}
}



#12楼 [楼主]   回复  引用  查看    

2008-06-16 20:54 by 代码乱了      
对,没有问题啊,你再试试,刚刚我又反复的在我的电脑上试了,先用原始的dll让SQL Prompt过期,让后把我最新的这个dll覆盖,一样可以用

#13楼    回复  引用  查看    

2008-06-16 21:35 by 高海东      
Dear g,

My job is to make sure that your evaluation of Red Gate SQL Server tools is a success.

If you don't like the way your copy of SQL Prompt is set up, then you can find information on how to change the most popular options at:
http://www.red-gate.com/products/SQL_Prompt/options.htm

If you have any technical or other questions about the tools, please contact me.

Regards,

Tom Austin


我这里是怎么都不能运行的,看来是没有办法了

#14楼    回复  引用    

2008-06-16 22:48 by 微风山谷 [未注册用户]
俺的可以了,很好用哈。

#15楼    回复  引用  查看    

2008-06-16 23:45 by reaper      
2点。。wow..支持一下

#16楼    回复  引用  查看    

2008-06-16 23:49 by Jeff Yang      
不错

#17楼    回复  引用    

2008-06-17 02:47 by 编织套管 [未注册用户]
怎么让卓�不牰浯瑰。

#18楼    回复  引用  查看    

2008-06-17 09:47 by 高海东      
楼主你麻烦您在检查下,我这里出现的环境是这样的,我先安装了试用版的sql prompt,看了下试用期是14天,而且功能都可以用,让后我把系统日期改的延后了,在看看发现功能都不能用了。在把系统日期该回来功能还是不能用,这时候我用您的破解dll覆盖后,功能还是我上面出现的问题不能用,卸载后重装问题依旧,我感觉这个工具肯定在哪里记住这个日期了,你看看能解决这个问题不,很想和你叫个朋友,我的邮箱是ghd258@gmail.com,可以把你的联系方式qq或者msn发到我邮箱吗?谢谢

#19楼    回复  引用    

2008-06-17 10:31 by xyly [未注册用户]
感谢分享!好东西啊!

#20楼    回复  引用  查看    

2008-06-17 13:27 by 小龙3      
感谢博主!!!

前面两个破解都不行,这个破解终于OK!!!!

#21楼    回复  引用    

2008-06-17 16:18 by okwell [未注册用户]
用破解的RedGate.Licensing.Client.dll替换后,启动,硬盘灯闪了几下,没有其它的反应.没有弹出报错的对话框等.进程没有启动.
还原RedGate.Licensing.Client.dll后是可以用的.
我.net环境是v1.1.4322和v2.0.50727

#22楼 [楼主]   回复  引用  查看    

2008-06-17 22:07 by 代码乱了      
@老刘。。。
错误提示信息是?比如启动SQL Server后

#23楼    回复  引用    

2008-06-18 13:21 by wjf [未注册用户]
感谢楼主,我按照楼主的思路,破解OK。
这里将破解遇到的问题与大家分享:
1.一定要先去除强命名,否则即时破解dll也无法使用
2.破解dll当时,如果软件没有过期,直接修改get_DaysLeftInTrial():Int32即可,IL代码主要修改IL_002e行:
.method public hidebysig specialname instance int32
get_DaysLeftInTrial() cil managed
{
// Code size 50 (0x32)
.maxstack 8
.locals init (valuetype [mscorlib]System.TimeSpan V_0,
int32 V_1,
valuetype [mscorlib]System.DateTime V_2)
IL_0000: ldarg.0
IL_0001: call instance valuetype RedGate.Licensing.Client.TrialStatus RedGate.Licensing.Client.Licence::get_TrialStatus()
IL_0006: ldc.i4.1
IL_0007: beq.s IL_000b
IL_0009: ldc.i4.0
IL_000a: ret
IL_000b: call valuetype [mscorlib]System.DateTime [mscorlib]System.DateTime::get_UtcNow()
IL_0010: stloc.2
IL_0011: ldloca.s V_2
IL_0013: ldarg.0
IL_0014: ldfld valuetype [mscorlib]System.DateTime RedGate.Licensing.Client.Licence::_2
IL_0019: call instance valuetype [mscorlib]System.TimeSpan [mscorlib]System.DateTime::Subtract(valuetype [mscorlib]System.DateTime)
IL_001e: stloc.0
IL_001f: ldc.i4.s 14
IL_0021: ldloca.s V_0
IL_0023: call instance int32 [mscorlib]System.TimeSpan::get_Days()
IL_0028: sub
IL_0029: stloc.1
IL_002a: ldloc.1
IL_002b: ldc.i4.0
IL_002c: bge.s IL_0030
IL_002e: ldc.i4.8 //原來是ldc.i4.0,及num=0,這裡改成num=8
IL_002f: stloc.1
IL_0030: ldloc.1
IL_0031: ret
} // end of method Licence::get_DaysLeftInTrial

如果已经过期,那就要修改get_TrialStatus():TrialStatus
.method public hidebysig specialname instance valuetype RedGate.Licensing.Client.TrialStatus
get_TrialStatus() cil managed
{
// Code size 2 (0x2)
.maxstack 8
IL_0000: ldc.i4.1 //這裡原來是ldfld valuetype RedGate.Licensing.Client.TrialStatus RedGate.Licensing.Client.Licence::_1 返回軟件的狀態,修改之後强制返回試用中的狀態
IL_0001: ret
} // end of method Licence::get_TrialStatus


#24楼 [楼主]   回复  引用  查看    

2008-06-18 18:44 by 代码乱了      
@wjf
没错,我发布dll的和你的一样的,奇怪的是我没有去掉强命名也能用
顺便说一下,如果不能用的兄弟去掉强命名试试看.

其实还漏掉一点:
if (days < 0)
{
days = 14;
}
return days;
当days 刚好为0的时候,可能就不能用了,所以最好改成
return 14;

#25楼    回复  引用    

2008-06-19 08:26 by 悠悠过客 [未注册用户]
我试用了一下,用破解的RedGate.Licensing.Client.dll替换后,启动,硬盘灯闪了几下,没有其它的反应.没有弹出报错的对话框等.进程没有启动.
还原RedGate.Licensing.Client.dll后是可以用的. 用sql的管理器启动时提示sqlprompt加载出错,是否禁用。是不是有这种情况,我的sqlprompt是从网上刚下的SQL Prompt 3.8.0.244.exe,是不是这个破解针对的版本不一致。我用的.net2.0 sql2005。

#26楼    回复  引用    

2008-06-19 10:51 by 悠悠过客 [未注册用户]
或者老兄把你用的sql promt的版本共享一下,是不是大家一致了就没问题了?

#27楼 [楼主]   回复  引用  查看    

2008-06-19 11:23 by 代码乱了      
在SQL Server看一下你们的版本是不是3.81.0.0

#28楼    回复  引用    

2008-06-19 15:20 by wjf [未注册用户]
楼主你是不是在发第一次破解时已经去掉强命名了?我一开始下你的dll覆盖后是不行的,后来自己破解dll后也是不行的,最后去掉强命名就ok了。
另外,如果把get_DaysLeftInTrial()里面原代码全移除,直接return一个大于0的数字,应该可行吧 ^_^

#29楼    回复  引用  查看    

2008-06-19 15:51 by 红尘中迷茫      
使用这个补丁后提示 SQL Prompt 3遇到问题需要关闭。打不开了。

#30楼 [楼主]   回复  引用  查看    

2008-06-19 16:17 by 代码乱了      
@红尘中迷茫
请大家安装最新版本的

#31楼 [楼主]   回复  引用  查看    

2008-06-19 16:17 by 代码乱了      
3.81.0.0

#32楼    回复  引用  查看    

2008-06-19 18:52 by 红尘中迷茫      
我用它自带的Check for Updates检测过了,提示是最新版本3.81.0.0

#33楼    回复  引用    

2008-06-20 15:01 by 悠悠过客 [未注册用户]
弱弱的再问一句老大,我从官网上怎么下装的的版本都是3.8.0.244,但是检查更新时提示是最新版本,看类库的发布时间是4月22号。你们从哪下载的3.8.1呀,给我发一份zzwangsw@163.com,谢了。

#34楼 [楼主]   回复  引用  查看    

2008-06-20 15:07 by 代码乱了      
@悠悠过客
有点大,不好发,你去官网下载的是不是SQL Toolbelt™ ?如果不是
请在这里下载:http://downloads.red-gate.com/SQLToolbelt.exe

#35楼    回复  引用    

2008-06-20 16:23 by 悠悠过客 [未注册用户]
那就算了,这个版本我也下了,装上还一样。我按老大的方法尝试自己破解算了。谢了。

#36楼    回复  引用  查看    

2008-06-21 07:31 by Kevin Li      
把系统日期延后修改至几个月,让sqlprompt过期,然后直接覆盖dll,貌似破解通过了! testing

#37楼    回复  引用    

2008-06-24 22:47 by 老破 [未注册用户]
打完补丁后我的问题是提示:sql prompt3 遇到问题需要关闭,…………。用原来的dll恢复过来我好的。我的是win2003+vs2005+sql2000

#38楼 [楼主]   回复  引用  查看    

2008-06-25 00:30 by 代码乱了      
@老破
可能是你的sql prompt的版本问题,一定要3.8的

#39楼    回复  引用    

2008-06-25 11:58 by 老破 [未注册用户]
我是从你文章的链接过去下的。而且的确显示版本是3.81的。

#40楼    回复  引用  查看    

2008-06-25 21:32 by 红尘中迷茫      
请教,怎么对已有的SQL语句进行格式化?就是让sql布局格式化,例如完整的缩进、关键字小写转变大写等等,我没找到有关的功能。

#41楼    回复  引用    

2008-06-27 23:02 by 老破 [未注册用户]
去除强命名后可以了。谢谢。

#42楼    回复  引用    

2008-06-30 13:15 by windy8848 [未注册用户]
菜鸟发问:怎么去除强命名呢?能否详细介绍下?

#43楼    回复  引用    

2008-06-30 13:19 by windy8848 [未注册用户]
覆盖后运行时提示:遇到问题需要关闭.
是什么原因呢?

#44楼 [楼主]   回复  引用  查看    

2008-06-30 14:26 by 代码乱了      
@windy8848
请看我的上篇日志http://www.cnblogs.com/jintan/archive/2008/06/13/1220365.html

#45楼 [楼主]   回复  引用  查看    

2008-06-30 14:26 by 代码乱了      
@windy8848
需要你自己去掉强命名,这是必须的

#46楼    回复  引用    

2008-07-02 23:14 by pfgm [未注册用户]
菜鸟发问,大虾莫烦:)
还是不大清楚去除强命名是如何操作的,大虾能否写个稍详细点的实际操作文章呢?感谢!
搜了下关于VS 命令窗口的,也试了下,但还是不明白如何操作:(

#47楼 [楼主]   回复  引用  查看    

2008-07-03 10:19 by 代码乱了      
@pfgm [未注册用户]
具体去掉强命名的方法是:
进入Vs2005或VS 2008的命令提示窗体,
cd dll所在的安装路径
sn 
-Vr RedGate.Licensing.Client.dll

或者 sn -Vr "x:\xxxx\RedGate.Licensing.Client.dll"
x:\xxxx表示dll所在的路径
可以通过把dll拖拽到命令提示窗口,这样文件名就不用你去输入了,其实这些都是很基础的东西啊

#48楼    回复  引用    

2008-07-03 22:16 by tks3001 [未注册用户]
但是执行时呢?直接回车执行还是怎么样呢?
我执行回车执行时,提示cd 或 sn 命令不存在呢

#49楼    回复  引用  查看    

2008-07-03 22:20 by windy8848      
如下所示:


>sn -Vr "C:\Program Files\Red Gate\SQL Prompt 3\RedGate.Licensing.Client.dll"
命令“sn”无效。
>cd C:\Program Files\Red Gate\SQL Prompt 3\
命令“cd”无效。
>cd "C:\Program Files\Red Gate\SQL Prompt 3\"
命令“cd”无效。
>


#50楼 [楼主]   回复  引用  查看    

2008-07-04 08:23 by 代码乱了      
@windy8848
如果VS2008的命令窗口不行,请改到VS2005的命令窗口

#51楼    回复  引用  查看    

2008-07-05 13:06 by 爱在戏院前      
请问有没有格式化js的插件?

#52楼    回复  引用  查看    

2008-07-07 21:47 by Joyaspx      
谢谢楼主,我的也能用了

#53楼 [楼主]   回复  引用  查看    

2008-07-08 08:21 by 代码乱了      
@爱在戏院前
格式化js的插件,我自己倒是写了一个,
只是这个插件就一个功能:格式化js的插件
不好意思放出来啊

#54楼    回复  引用  查看    

2008-07-12 12:08 by BeautyLogic      
lz您好:发现vs下命令提示符下没有sn.exe这个程序
后来我查了一下Microsoft Visual Studio 8\SDK\v2.0\Bin目录下面有个
StartTools.htm文件,详细介绍了framework下的工具,我发现我的bin目录下很多执行的exe文件都没有,只有genasm.exe ; mage.exe ; mt.exe
nmake.exe, 这四个exe文件根本没有其它的exe文件,显然没有sn.exe这个文件。后来在bin目录下有个sdkvars.bat的文件,是配置framework工具的环境变量的,运行了,也提示sn 没有这个命令
后来.net framework 2.0我重装了在sdk\v2.0\bin下还是同上面描述的一样,没有sn这个命令,lz我是安装vs2005哪个地方配置错了么?
多谢lz了,发现前面也有几位同志说没有sn这个命令的。

#55楼 [楼主]   回复  引用  查看    

2008-07-12 12:47 by 代码乱了      
@BeautyLogic
估计你安装的时候没有选择SDK工具
你可以在网上搜一下sn.exe只要.net 2.0以上的都可以

#56楼    回复  引用  查看    

2008-07-16 00:18 by BeautyLogic      
@代码乱了,偶从别人的机器里面copy了sn.exe,可以运行,
偶的sdk肯定是安装了啊,不然怎么开发.net程序啊,谢谢lz啊

#57楼    回复  引用    

2008-07-21 22:21 by flyhong [未注册用户]
老大,请破解一下最新3.9版本。。。。。

#58楼 [楼主]   回复  引用  查看    

2008-07-22 18:59 by 代码乱了      
@flyhong
我也注意到了,最近比较忙,没有时间弄,弄好了会发上来大家分享

#59楼    回复  引用  查看    

2008-07-24 03:20 by 深蓝      
@代码乱了
我按照相同的方法破解3.9版本。只是十来分钟的事情,破解过程:
http://www.cnblogs.com/studyzy/archive/2008/07/24/1250101.html

#60楼 [楼主]   回复  引用  查看    

2008-07-24 08:38 by 代码乱了      
@深蓝
多谢

#61楼    回复  引用    

2008-07-31 09:29 by sqx [未注册用户]
LS能不能把去掉強命在命名的圖發也載一個上來呀。搞了一個晚上都不行。鬱悶呀!

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-27 08:06 编辑过