RMReport3.51破解手札㈠

来源:互联网 发布:观澜网络丁香园怎么样 编辑:程序博客网 时间:2024/05/18 00:53

序言:
  RMReport是一款不错的打印控件,其中的GridReport做得很有特色(大多数选用RM的人就是被它吸引过去的),官方网站提供的试用版本有诸多限制,比如只能打印头两页、会多了一句未破解提示、导出功能只能导前六页等。
  这次破解发生在2004年12月20日、21日,破解的是当时的3.51版本(本方法也适用于06年发布的5.0版,但自5.0后我便没有再关注过RM了),其时想在一个项目中试用RM的GridReport,但破解后又发现RM在交叉报表方面的诸多不足之处,所以最终放弃了RM改用其他的报表控件。
  之所以在四年后的今天才公布破解手札,主要是考虑RM是一款商业控件,如果在当时发布对其最新版本的破解方法可能会引来不必要的麻烦,而多年之后的RM应该与原来的大有不同,现在公布破解手札已不会造成什么影响。本次手札详细介绍了对“只能打印头两页”的限制的破解过程和思路,其他的限制的破解方法与之类同。
  需要特别声明的是,写这破解手札并不是为了炫耀我的破解技术有多高(相反我觉得我的技术很菜),而是为了告诉广大的控件和软件作者破解往往是在你意想不到地方进行突破,要想保住你的成果,需要下更多的苦功。

破解环境:
  操作系统:Win2000,跟踪调试工作:Delphi6,再加上一个对Dcu作静态反编译的Dcu2Pas,就这么简单。

破解步骤一——代码跟踪:
  在D6中安装了RM3.51后,新建一个Application,然后在主窗体中加入RMReport和一个Button,双击Button在OnClick事件中写下代码:

  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3. RMReport1.PrintReport;
  4. end;
  在RMReport1.PrintReport;这句设下断点,按F9运行程序,IDE停在断点处,按下Ctrl+Alt+C键,IDE切换到CPUView模式,如下图。
文章出自《编程手札》http://blog.csdn.net/nhconch,请从正确地址查看文章原文,引用或转载的可能会导致内容缺失
  现在,破解之旅正式开始,接下来便要游走在汇编的世界里。
  这里略过具体的跟踪过程,通过对汇编代码的跟踪,整理得到以下的函数调用过程:
PrintReport
    PrepareReport
    GetCount
    PrintPreparedReportDlg
        RMPrinters
        GetPrinter
        RM.SetCopies
        Call dword ptr [edx+$000E8] //显示对话框
        GetPageInfo
        GetCopies
        PrintPreparedReport
            GetCount
            RMLoadStr
            Create ProgressForm.Show
            _DoPrintReport
                _ParsePageNumbers
                GetPages
                SetPrinterInfo
                FillPrinterInfo
                BeginDoc
                _PrintOnePage

编写过打印功能的都应该知道,案发现场肯定是在BeginDoc之后,从汇编代码中也可以看到BeginDoc之后有四处对_PrintOnePage的调用,前两处调用和后两处调用分别落在各自独立的代码段中,而每一处对_PrintOnePage的调用都会使打印机输出一页报表,因此不用深究_PrintOnePage是如何工作的,转而直接将焦点集中BeginDoc到EndDoc之间对PrintOnePage的调用过程上。
文章出自《编程手札》http://blog.csdn.net/nhconch,请从正确地址查看文章原文,引用或转载的可能会导致内容缺失

 破解步骤二——代码分析:
  在跟踪过程发现,限制来自于rm_class.dcu,于是Dcu2Pas闪亮登场。咳~~~~~,时间到,接下来是广告时间,广告之后更精彩~~~~

Dcu2Pas是一款将Dcu文件反翻译成Pas文件的工具软件,反翻译出来的内容包括常量、记录、类和函数定义等信息,不足之处是代码依然汇编的,不过已经为破解提供了很大的便利了。以下是软件自带的一些信息,如果你运气好的话还可以在官方网站中找到最新的版本:

{///////////////////////////////////////////////////////////////////////////////
Project   Dcu2Pas Version 1.3
Purpose   Decompile a D2-D7, K1-K3's dcu(dpu) file to Delphi source as origin as
          possible, without or with minimal modifications, then recompile to new
          one under other Delphi versions
Author    Nengwen Zhuo(×??ü??)
Homes     http://soarowl.uhome.net, http://www.websamba.com/soarowl,
          http://soarowl.0catch.com
Emails    soarowl@yeah.net, soarowl@sina.com.cn
Released  2003-02-10
Lastest   home/dl/Dcu2Pas.rar

          FOR RESTORE YOUR LOST SOURCES AND OPTIMIZE YOUR CODES ONLY!!!

          Decompiled on 2004-12-21 19:56:35
<script type="text/javascript"><!--google_ad_client = "pub-5395599807454886";/* 468x60, 创建于 08-12-15 */google_ad_slot = "2456405239";google_ad_width = 468;google_ad_height = 60;//--></script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
///////////////////////////////////////////////////////////////////////////////}


RMReport3.51破解手札㈡   RMReport3.51破解手札㈢

原创粉丝点击