本文仅限于.NET学习研究目的,严禁用于商业用途。本人不会以任何形式传播RMT破解后的二进制版本,请勿留言或来信索要;本人不为本文提供任何形式的技术支持。
  最近在写一个用于WM6的.NET CF程序,希望能够实现指划操作。这种功能如果用native code实现是要死人的,.NET CF下倒是有不少好办法。一个开源的实现见Codeproject上的Fluid(作者已将控件部分放到fluid.codeplex.com),不过由于是强大的作者自娱自乐的产品,虽然能用,但文档几乎没有,用起来很麻烦。在网上找来找去,发现Resco MobileForms Toolkit(下简称RMT)这个神器,但是最新的2010版只有evaluation,看了一下的确不错,但是最便宜的license也要将近一千刀……Google倒是能找到不少结果,不过都是各类下载网站骗流量的。无奈之下只好自己动手丰衣足食,尝试crack一下,顺便了解一下.NET的工作机理。

  RMT 2010的保护方式是:设计器只能用30天,控件不限时间,但是每次运行时都有消息框提示。设计器的时间限制比较简单,信息就存放在注册表HKCU/Software/Resco/Resco MobileForms Toolkit的默认值中,只要在新安装后将其保存起来,定期导回注册表即可。重点在于控件的crack,具体说来就是消除evaluation消息框。
  .NET程序的托管代码被“编译”为伪汇编代码(MSIL),由实时编译器(JIT)在运行时进一步翻译为本机代码。MSIL与原程序几乎是一一对应的,有很多强大的反汇编工具, 如著名的Reflector. 用Reflector打开RMT的dll一看,程序并没有混淆,Resco实在太厚道了。
以AdvancedList为例,用Reflector导出其C#代码,搜索消息框中的Evaluation字样,很容易确定“罪魁祸首”是RescoLicenseMessage::ShowEvaluationMessage(),下面用反汇编方法修改其内容,去掉弹出的消息框。
  以下操作以.NET CF 3.5版本(/NET35/CF目录下)为例,均在“Visual Studio 命令提示”环境(在开始菜单里找)中完成。
  用ildasm反汇编Resco.AdvancedList.CF3.dll:


ildasm /utf8 /out=Resco.AdvancedList.CF3.il Resco.AdvancedList.CF3.dll


找个文本编辑器打开生成的Resco.AdvancedList.CF3.il,定位到上面的函数:


.method assembly hidebysig static void  ShowEvaluationMessage(class [mscorlib]System.Type 'type', string text) cil managed
{
  // 代码大小       29 (0x1d)
  .maxstack  8
  IL_0000:  ldsfld     string Resco.Controls.AdvancedList.RescoLicenseMessage::MsgEval
  IL_0005:  ldarg.0
  IL_0006:  callvirt   instance string [mscorlib]System.Reflection.MemberInfo::get_Name()
  IL_000b:  ldarg.1
  IL_000c:  call       string [mscorlib]System.String::Format(string,
                                                              object,
                                                              object)
  IL_0011:  ldsfld     string Resco.Controls.AdvancedList.RescoLicenseMessage::MsgEvalVersion
  IL_0016:  call       valuetype [System.Windows.Forms]System.Windows.Forms.DialogResult [System.Windows.Forms]System.Windows.Forms.MessageBox::Show(string, string)
  IL_001b:  pop
  IL_001c:  ret
} // end of method RescoLicenseMessage::ShowEvaluationMessage


这个就是MSIL,看起来很像汇编吧?前面的IL_0000等都是标号,用于跳转,不写也可以。要不弹出消息框,让子程序直接返回即可,也就是只留一句ret:


.method assembly hidebysig static void  ShowEvaluationMessage(class [mscorlib]System.Type 'type', string text) cil managed
{
  // 代码大小       29 (0x1d)
  .maxstack  8
  IL_0000:  ret
} // end of method RescoLicenseMessage::ShowEvaluationMessage


  保存文件,下面将其重新编译为dll. 由于原dll用了强命名(strong name),需要自己生成一个密钥对:


sn -k key.snk


并用此密钥对给编译得到的dll签名,否则生成的dll将不可用:


ilasm /dll /key=key.snk /res=Resco.AdvancedList.CF3.res Resco.AdvancedList.CF3.il


  用在.NET CF中的dll还需要额外签几个dll,即DesignerMetadata目录中以asmmeta结尾的三个dll. 对于AdvancedList而言是以下三个:
Resco.AdvancedList.CF3.PocketPC.asmmeta.dll
Resco.AdvancedList.CF3.SmartPhone.asmmeta.dll
Resco.AdvancedList.CF3.WindowsCE.asmmeta.dll
  用ildasm反汇编后用ilasm重新编译,用前面生成的密钥对签名。VS中的工具箱可能没有AdvancedList,重置一下工具箱即可。现在AdvancedList应该可用了,运行时不弹出消息框。

  用这种方法可破解所有控件。可以用循环语句批量反汇编:


for %i in (*.dll) do ildasm /utf8 /out=%~ni.il %i


  注意有几个native dll无法反汇编(文件名中有Native字样),记得删掉生成的il.
  逐个修改生成的MSIL,大部分控件的crack方法与AdvancedList一样,在RescoLicenseMessage::ShowEvaluationMessage()函数体中留一句ret即可。Audio、Zip和ImageBox控件不太一样,ImageBox似乎没有保护(未验证),Zip的修改点在ZipArchive::.cctor()和ZipStream::.cctor(),Audio控件的修改点在Evaluation::.cctor(),总之盯着“evaluation”和“MessageBox::Show”字样就没错,都不是很难改。
  全部搞定以后批量编译:


for %i in (*.il) do ilasm /dll /key=key.snk /res=%~ni.res %i /quiet
cd DesignerMetadata
for %i in (*.asmmeta.dll) do ildasm /utf8 /out=%~ni.il %i
for %i in (*.il) do ilasm /dll /key=key.snk /res=%~ni.res %i /quiet


  注意有几个dll无法通过PEVerify,不用担心,原来的dll也通不过……
  到VS里重置一下工具箱应该就能用了。

  总结一下.NET程序的破解,整体上来说要比native程序容易一些,因为可以用Reflector方便地定位再反汇编破解,即使有名称混淆也要比直接读汇编容易得多。虽然强命名带来了一些麻烦,但重新签名的难度也不是很大。像RMT这种弹出消息框的应该属于最容易crack的,盯着消息框的文字和MessageBox::Show就行了;如果有license认证,一般都能找到验证license的函数如bool IsValid()这种,将其函数体改成ldc.i4.1; ret两句MSIL(即return true)即可。对付这种破解的方法也很简单,只需要在.NET程序中加入一些native代码,这种混合模式的程序可以用ildasm反汇编,但结果无法用ilasm编译。不过很显然,这是防不住keygen的。

Resco MobileForms Toolkit 2010的破解相关推荐

  1. 推荐.NET CF控件(Resco MobileForms Toolkit)

    来自于著名的Reso,提供的.NET CF控件有很多,当然不是免费的,网站上可下载的是Evaluation version,在开发时和部署后运行时都会有版本提示.下载安装后控件会加载到Visual S ...

  2. Microsoft Deployment Toolkit 2010 新功能实战之一

    续Microsoft Deployment Toolkit 2010 Beta 2先睹为快! 下面将通过使用Microsoft Deployment Toolkit 2010来部署Windows 7来 ...

  3. SlickEdit 2010的破解方法

    SlickEdit是需要购买授权的软件,本文仅作研究之目的,如果你喜欢并且需要该软件,请支持并购买正版.因本文所涉及的内容而造成的一切后果及损失,本人将不负任何责任. 本文所涉及的SlickEdit版 ...

  4. Microsoft® Deployment Toolkit 2010之快速部署Windows 7

    最近MS出的东西可真多.什么都是2010了..哈哈.. MDT2008,以前本菜菜给大家介绍过,如何去部署Winxp,不过只是肤浅的.MDT2010 Beta也出来了- 跟我继续去瞧瞧- 写了些,没什 ...

  5. Diskeeper 2010 中文破解注册版 强烈推荐!顶级磁盘碎片整理软件

    Diskeeper 2010 Pro Premier Edition 中文破解注册版 强烈推荐!顶级磁盘碎片整理软件 磁盘碎片整理工具.能整理Windows加密文件和压缩的文件,可自动分析磁盘文件系统 ...

  6. Microsoft Deployment Toolkit 2010 新功能实战之三

    一.支持建立和同时打开共享部署(下图中,在E盘的不同目录建立了两个部署共享) 二.支持不同部署共享间对象的鼠标直接拖动.复制粘贴.剪切粘贴. 在上图中,我们可以直接使用鼠标将上面部署共享中Operat ...

  7. WINCE_.NET CF 示例集锦

    WINCE中可以使用的第三方控件包 Resco MobileForms Toolkit 2012 Resco MobileForms Toolkit 2012破解: http://www.newlif ...

  8. 分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月6日-2月12日)

    分享Silverlight/WPF/Windows Phone/HTML5一周学习导读(2月6日-2月12日) 本周Silverlight学习资源更新 实现Silverlight自定义载入动画的方法( ...

  9. 移动开发工具包Mobile Toolkit Volum 2发布

    根据国外媒体报道,Resco公司(一家致力于开发移动设备应用程序组件和工具的公司)日前发布了MobileForms Toolkit 2009 Volume 2.MobileForms是一款丰富的库和控 ...

最新文章

  1. 随机数尽可能做到不重复
  2. Vue解析--如何应对面试官提问
  3. pil python 安装_20行Python代码给微信头像戴帽子
  4. html中链接不自动变色,HTML 点击 标签 链接 点击之后变色-转发【已解决】
  5. 【MySQL】mysql The server time zone value “乱码” 错误
  6. 在visual studio 2010下搭建OGRE项目
  7. Android 设计模式实战之关于封装计费代码库的策略模式详谈
  8. 知乎每日精选python阅读脚本
  9. JS,CSS是前端,JAVA PHP ASP是后端,数据库是后端的处理对象,非代表前后底
  10. 程序员都在哪些平台写技术博客?
  11. tahoma字体对中文字的影响
  12. 百度BD09加密经纬度转国测局GCJ02经纬度
  13. unity的矢量数学
  14. 904. 水果成篮(数组、滑动窗口)
  15. data单复数一样吗_data的复数形式是datas还是data?rt
  16. Js 获取日期加(减)一天并规范日期格式
  17. mysql 多表 结构相同 查询
  18. Element ui Avatar头像管理组件 实现当用户没有头像时 以名称最后一个字为头像
  19. emqtt 启动报错 Erlang closed the connection 查看状态报错 Node 'emq@192.168.*.*' not responding to pings.
  20. 身份证二要素验证的使用场景介绍

热门文章

  1. 微信小程序-基于云开发实现社区项目(Demo版本的升级)
  2. Windows下使用Hexo+GithubPage搭建博客
  3. 推荐一组用过好几年的非常稳定的dns
  4. 专为《巫师3》打造 次世代RedEngine 3引擎公布
  5. 简单证明圆锥体积为三分之一圆柱
  6. 国家2级计算机考试准考证号
  7. .net 如何判断农历节日
  8. 二进制转化为十进制Java实现
  9. 沙箱支付宝------简单实现支付
  10. 那些年我们用过的显示器接口