(续)经过进一步的研究,最终完全完成了此任务。
11、将“MOV AL,CL”改为“MOV AL,0”,然后在此行击右键,选择“复制到可执行文件\所有修改\全部复制”(如图六所示),在新窗口中击右键,选择“保存文件”(如图七所示),把修改保存到acdb17.dll。
12、在Ollydbg中重新载入AutoCAD并运行,结果出现错误(如图八所示)。由此推测,软件中有保护措施。如何破解呢?后面的操作前述的类似,具体过程如下。
13、“查看\窗口”中找到“Fatal Error”,在右键菜单中选择“跟随ClassProc”。在“堆栈”窗口中,从底部往上查找到第一个“DBX CAS 0”(即警告窗口中的内容),并由此找到调用显示警告窗口的函数(此处需返回的地址即为调用函数的下一行)。
0012FC58 0012FC64 UNICODE "DBX CAS 0"
0012FC5C 64B3B334 UNICODE "Fatal Error"
0012FC60 00000000
0012FC64 00420044 acad.00420044
0012FC68 00200058
0012FC6C 00410043 acad.00410043
0012FC70 00200053
0012FC74 00000030
0012FC78 058CEBFF
0012FC7C 0012FCC8
0012FC80 64B1109B acdb17.64B1109B
0012FC84 058CEDCB
0012FC88 64524FEC 返回到 acdb17.64524FEC 来自 acdb17.648F7EB0
14、在“反汇编窗口中跟随”此函数(地址64524FEC),可看到反汇编结果。
64524FC1 8B5424 08 MOV EDX,DWORD PTR SS:[ESP+8]
64524FC5 52 PUSH EDX
64524FC6 E8 45000000 CALL acdb17.?isAnObjectDBXModule@@YAHPAU>
64524FCB 83C4 04 ADD ESP,4
64524FCE 83F8 01 CMP EAX,1
64524FD1 /75 12 JNZ SHORT acdb17.64524FE5
64524FD3 |8B4424 24 MOV EAX,DWORD PTR SS:[ESP+24]
64524FD7 |8346 08 01 ADD DWORD PTR DS:[ESI+8],1
64524FDB |8946 04 MOV DWORD PTR DS:[ESI+4],EAX
64524FDE |5E POP ESI
64524FDF |83C4 1C ADD ESP,1C
64524FE2 |C2 0400 RETN 4
64524FE5 \6A 00 PUSH 0
64524FE7 E8 C42E3D00 CALL acdb17.648F7EB0
64524FEC 83C4 04 ADD ESP,4
15、由64524FEC向前查看,在64524FD1处找到第一个条件跳转指令,测试指令前刚好有一个CALL指令。于是,大胆推测acdb17.?isAnObjectDBXModule@@YAHPAU>就是保护校验的函数。“跟随”进入此函数,发现代码很长,分析其详细功能很困难。于是,直接NOP掉跳转指令(即在64524FD1处用9090替代7512),并将修改保存到acdb17.dll。
16、直接运行AutoCAD,打开一个带有“教育版打印戳记”的DWG文件,教育版的警告窗口没有出现,打印时四周也没有教育版的相关字样了。由此可宣布破解成功了!(全文完)