经常用AutoCAD的朋友可能遇到过“AutoCAD教育版打印戳记”的问题,虽然不会有大的影响,频繁出现的警告窗口和出图时加上的戳记,还是让人有些烦。网上有很多有关“去除AutoCAD教育版打印戳记”的网页,其原理基本上都是通过转换为DXF格式,再转换为DWG文件而实现的。
  通过跟踪AutoCAD的运行,找到直接破解的方法。破解的过程如下(以WinXP、AutoCAD2007英文版为例):
  1、打开一个带有“教育版打印戳记”的DWG文件,AutoCAD会出现教育版的警告窗口(如图一所示)。此时,不要先作出任何选择。

  2、打开Ollydbg,“附加”到AutoCAD,然后“查看\窗口”中打到“AutoCAD Alert”,在右键菜单中选择“跟随ClassProc”(如图二所示)。

  3、在“堆栈”窗口中,从底部往上查找到第一个“Educational plot stamp detected...”(即警告窗口中的内容,如图三所示),并由此找到调用显示警告窗口的函数(此处需返回的地址即为调用函数的下一行)。

  4、在“反汇编窗口中跟随”此函数(如图四所示),可看到反汇编结果(如图五所示)。



   0045FE76  |.  E8 97546500   CALL <JMP.&acdb17.?isEMR@AcDbDatabase@@QBE_NXZ>
   0045FE7B  |.  84C0          TEST AL,AL
   0045FE7D  |.  74 51         JE SHORT acad.0045FED0
   0045FE7F  |.  8D4C24 50     LEA ECX,DWORD PTR SS:[ESP+50]
   0045FE83  |.  FF15 3CB7B600 CALL DWORD PTR DS:[<&MFC80U.#293>]                 ;  MFC80U.78305C6D
   0045FE89  |.  50            PUSH EAX
   0045FE8A  |.  68 914E0000   PUSH 4E91
   0045FE8F  |.  C68424 341500>MOV BYTE PTR SS:[ESP+1534],8
   0045FE97  |.  E8 44012F00   CALL acad.0074FFE0
   0045FE9C  |.  66:0FB6D0     MOVZX DX,AL
  5、由0045FE9C向前查看,在0045FE7D处找到第一个条件跳转指令,测试指令前刚好有一个CALL指令。于是,大胆推测acdb17.?isEMR@AcDbDatabase@@QBE_NXZ(简记为isEMR)就是判断DWG文件中是否含有“教育版打印戳记”的函数。
  6、先分析一下这段代码,由TEST和JE指令可知,函数isEMR的返回值存放在AL中,AL=0则跳转,不显示警告窗口(即无打印戳记);AL≠0则显示警告窗口(即有打印戳记)。
  7、“跟随”进入函数isEMR,代码如下:
   64567730 >  8B41 04         MOV EAX,DWORD PTR DS:[ECX+4]
   64567733    33C9            XOR ECX,ECX
   64567735    3988 DC070000   CMP DWORD PTR DS:[EAX+7DC],ECX
   6456773B    0F95C1          SETNE CL
   6456773E    8AC1            MOV AL,CL
   64567740    C3              RETN
  8、由CMP指令可知,[EAX+7DC]的值是否为0,代表了文件中是否有打印戳记。为了验证上面的猜想,下面将进行一些测试。
  9、由于AutoCAD已运行至显示警告窗口,需要在Ollydbg中重新载入AutoCAD。为了对比,先在Ollydbg中直接运行,注意其结果;然后再重新载入AutoCAD,在“可执行模块\acdb17.dll”中定位至地址6456773E处,将“MOV AL,CL”改为“MOV AL,1”后运行。比较两次运行的结果:第一次运行时,AutoCAD新建一个未命名的DWG文件,没有弹出教育版的警告窗口;第二次运行时,多了教育版的警告窗口(如图一所示)。由此可见,上面的猜测得到了部分的验证。
  10、为什么是部分验证呢?因为刚才的测试,只是通过修改函数isEMR,将全部DWG文件(无论有还是没有打印戳记)都认为是有打印戳记的。而我们的目标确刚好相反,那么将“MOV AL,CL”改为“MOV AL,0”后再试一试呢?结果程序在打开文件的过程中就发生异常了,什么原因?由于我也是菜鸟,不知道!望有高手指点!有兴趣的朋友可以来共同探讨这个问题!