• 标 题:Delphi组件破解教程(一) (3千字)
  • 作 者:gearboy
  • 时 间:2002-5-9 22:12:48
  • 链 接:http://bbs.pediy.com

Desperate Turk Crackers Group            
组件名称:Dream Font Color
破解者:    MbR
保护:     纯IDE
工具:    DCUcu,Delphi5,Ultraedit
Url :     www.dream-com.com    
难度:容易
教程号:3
日期:    2001年7月19日
Borland Delphi Visual Component Library Reversing
这篇教程中,我将尽量演示如何破解Delphi可视化组件库(VCL)。让我们开始吧...
下载Dream Font Color组件库,并将之装入Delphi。然后新建一个应用程序,将Dream Color组件里的VCL加入窗体,将工程保存到一个空目录中,编译运行。... 怎么,没什么不对劲的地方... 关闭Delphi,确保已经完全关闭... 进入保存工程的目录,运行编译过的项目... 嘿,我们看到了下面的Nag消息框:

“This application uses unregistered etc....” 我们称这个为“纯IDE保护"。这意味着Delphi运行中是不会有什么问题的。但当Delphi关闭时,我们就会看到这个消息。现在进入VCL单元(unit)所在的目录。按F3查找警告消息框里所显示的关键字(例如:unregistered)

如你所见,纯IDE保护极可能在psceditbar.dcu中完成。另外,在fontcolor_d5.bpl文件中似乎也有“unregistered”关键字。如果在DCU文件中有xxxxx.dpk文件,那么我们就不必为bpl文件打补丁了。因为完成dcu文件的补丁后,在Delphi中打开bpl文件重新编译,Bpl文件就会自动打上补丁。但是如果没有dpk文件,那么我们就不得不手动为bpl文件打补丁了。(我将具体在另外一个教程中讨论这个问题)。
现在,用DCUcu打开psceditbar.dcu进行查看... 当Delphi关闭时打开编译过的工程时就会弹出消息框。这是一个重大的线索... 使用DCUcu查看dcu文件,观察函数和事件列表,找到“checktrialversion”...双击之...

1. 10: è.... |E8(00 00 00 00 | CALL PSCIsDelphiRunning{0x3B8}
2. 15: „À |84 C0 | TEST AL,AL
3. 17: u. |75 13 | JNE +19; (0x2C)
4. 19: j0 |6A 30 | PUSH $30
5. 1B: h0... |68(30 00 00 00 | PUSH checkTrialVersion{0x3BE}+$00000030
6. 20: h8... |68(38 00 00 00 | PUSH checkTrialVersion{0x3BE}+$00000038
7. 25: j. |6A 00 | PUSH $00
8. 27: è.... |E8(00 00 00 00 | CALL MessageBox{0x1E7}
9. 2C: Ã |C3 | RET NEAR
如你所见,它在第一行调用“PSCIsDelphiRunning”函数,如果Delphi在运行中则跳至(0x2C) (第九行)。如果不在运行则跳至CALL MessageBox{0x1E7} 并弹出消息框。
如果你想找到纯IDE可视化组件的控制部分,那么用DCUcu打开VCL,查找“messagebox”或“messagedlg”文本。你将很有可能找到控制部分。
现在该如何使用DCUcu为dcu文件打补丁呢...
3. 17: u. |75 13 | JNE +19; (0x2C)
4. 19: j0 |6A 30 | PUSH $30
5. 1B: h0... |68(30 00 00 00 | PUSH checkTrialVersion{0x3BE}+$00000030
复制上面这部分,清除不需要的部分,只留下十六进制值。
例如 75 13 6A 30 68 30 00 00 00... 为什么要这样做呢?因为在反编译的代码里我们是看不到偏移值的:(((。复制上述十六进制值,并使用十六进制工具打开dcu文件,查找所复制的十六进制值... 确保定位在正确的地方,使用同样的值查找下一个。如果仍然停在原来的地方,说明所在的位置是正确。
现在将 75 13改为 EB 13 并保存。打开Delphi,新建一个工程,使用Dream Font Color组件库里的组件,编译并保存项目。关闭Delphi运行编译过的compiled exe然后... 警告消息框又出现了!!! 该死,我只是在开玩笑:) ) 如果呢已经完成上述的所以步骤,那你应该不会再看到这样的消息框了。
我将再另一篇教程里详细讨论有关VCL的事情,在此之前请在这片教程的有关方面多加练习。
顺便说一下,DCUcu是DCU2INT的图形界面版本,由我编写。不久就可以在我们的网站上找到。关于Delphi和VCL逆向工程的问题你可以email给我。
祝好运
MbR [DTCG]
mbr_man@yahoo.com