Delphi第三方控件破解指南! (300分)

X

xdzhan

Unregistered / Unconfirmed
GUEST, unregistred user!
许多未注册商业控件要么必须在Delphi的IDE中运行,要么就象ZipTV那样每次运行都要弹出
一个版权信息对话框,或者如MMTool和CADSYS至今无法破解现在的地下ftp又没法登陆?想了
又想,不如自己学一下破解.......请CRACK界高手赐教,最好手把手教一教[:)],至于汇编
我还记得一点儿[:D]
 
控件破解指南
MikeDeakins
注意:本文的转载必须获得作者同意(作者电子邮件地址:
MikeDeakins@ChinaRen.com )。
不像可执行文件,Delphi / C++ Builder 的控件是不能利用 SoftIce 进行动态跟踪的,但
是,这并不意味着控件的破解比可执行文件的破解要困难。
要想破解一个控件,首先要弄明白它为什么能够产生限制。一般来讲,带有限制的控件
只能在 IDE 中运行。这就意味着,这个控件必须有一种既定的机制来判断当前执行环境是
否是在 IDE 内部。Delphi / C++ Builder 的 IDE 具有什么样的特征呢?自从 Delphi 1.0 开
始,IDE 的主窗口的类名始终没有改变过,一直是 TAppBuilder ,并且,这个窗口没有子窗
口。几乎所有限制控件都是用这个特征来判断当前是否是在 IDE 内部的。虽然枚举系统中
的所有进程,并且判断进程文件名是否是 Delphi32.exe 也似乎可行,但是这会在程序执行
的时候产生明显的延迟,所以目前为止,我还没有发现使用这种方法的实例。
只要了解了这些,破解控件就成为了可能。实际进行破解的时候,需要两个重要的工具
软件:DeDe 2.50 和 Ultra Edit ,前者用来分析 DCU 文件,后者用来对二进制文件进行编
辑。
下面,我将利用破解 JF Control Delphi 版本的实际例子来说明破解的方法。JF Control
的未破解版本可以在 http://www.jfactivesoft.com/spindex.htm 下载。
安装好这套控件以后,我们首先来分析它所有的 DCU 之间的关系。判断限制条件的
部分必然要被所有其它单元所使用,这样才能保证不管在程序中引用了哪一个单元都能够保
证程序不能在 IDE 外执行。当然,寻找这个单元并不一定需要使用 DeDe 打开所有 DCU 。
发现 Delphi/ Lib/JFMain.dcu 了吗?这就是一个再明显不过的标志:这是一个主单元,限制
条件有很大可能就是在这里判断的。好,我们再使用另外一招:使用资源管理器在 Delphi/Lib
目录中对文件进行搜索,条件是文件内容包含 TAppBuilder 。如果在程序中要查找
TAppBuilder 窗口类,就必须用到 FindWindow 函数,这个函数要求传递窗口类的名字字符串,
在 DCU 中应当有相应的字符串存在。查找的结果,符合条件的文件只有两个:
JFCtrls_d5.dcp 和 JFMain.dcu 。DCP 是 Delphi Component Package 的缩写,是在 Delphi
IDE 内部使用的控件包,既然是内部使用的,根本不用去管它。但是,另外一个文件则证
明了我们刚才的判断,好,准备破解。
运行 DeDe 程序,在 Dumper 菜单中选择 DCU Dumper ,在打开文件对话框中选择
JFMain.dcu 。处理完毕以后,在反编译的文本框中全选所有文本并且复制,然后粘贴到记事
本中。在记事本中查找字符串 TAppBuilder 。寻找的结果好像并不太令人满意:
const
szTAppBuilder:System.AnsiString ='О惫紶棩 ?{@_NF_7E5+$8};
原来这个字符串是一个常量的名字。常量的内容是不可识别的字符串,显然,加密了。
但是不要着急,这个字符串的内容并不重要了。偶然向下翻了一屏,惊喜就会出现:
function JfDelphiIDERunning:System.Boolean;
万万没想到这个程序编写的居然如此明显。现在看一看这个函数的内容,千万别被骗了。
这个函数内嵌一个函数:function CnvString (AStr:System.AnsiString):System.AnsiString;
这就是负责把刚才我们看到的加密字符串解密的函数。继续向下看,函数的主体调用了
FindWindow,GetWindowText,EnumChildWindows,功能确实符合这个函数的名字。
下面,我们要做的并不是破解 CnvString 函数,因为要想理解这个函数的算法还是有一
些难度的,另外,这个函数是内嵌函数,也就是说,在这个单元的其他地方是不需要这个函
数的。实际上,我们只要修改 JfDelphiIDERunning 的代码,让它只返回 true 就可以了。
如果有汇编语言的基础,这段简单的程序很容易写出来。如果不会汇编语言,也可以很
容易解决这个问题:启动 Delphi ,开始一个新的工程,创建一个单元,创建一个如下的函
数:
function CrackStub:Boolean;
begin
Result:=true;
end;
然后编译程序。用 DeDe 打开这个函数所在的 DCU 文件,获得汇编代码:B0 01 C3 。
下面,我们记录 JfDelphiIDERunning 入口点的代码,应当记录足够长的特征代码,否则
可能在后面的二进制查找中获得多个结果。我记录的入口点代码是:55 8B EC 81 C4 E8 FE FF
FF 53 56 57 33 C0 89 85 E8 FE FF FF 89 85 EC FE FF FF 89 85 F0 FE FF FF 89 85 F4 FE FF FF 89 85
F8 FE FF FF 89 85 FC FE FF FF 。
启动 Ultra Edit ,打开 JFMain.dcu ,使用二进制 / 十六进制寻找功能,搜索记录的特征
代码。找到以后,在此搜索,确认特征代码唯一。下面,把入口点位置的代码修改为我们的
代码。后面的代码我们不需要修改,因为 CPU 执行完 B0 01 C3 就返回了,根本不会继续
执行。修改完毕,保存文件。我们可以使用 Delphi 打开它的 Demo 程序,然后编译,退
出 Delphi ,运行 Demo 程序,程序正常启动。破解成功。
这种对 DCU 文件的破解其实还是有一些限制的:不能使用 BPL 动态程序包。BPL 文
件实际上是可执行文件的结构,破解方法和 DCU 文件有些区别,破解方法不在这里讨论。
(待续)
 
to vcok:
谢谢了,请继续.....
下面是我找到的.......

Delphi Is Running Crack Tutorial needed

ccarita
Starting Member


Brazil
2 Posts Posted - 2002/03/16 : 05:20:44
--------------------------------------------------------------------------------
Hi Ppl,
Does anyone have some info or URL about cracking VCLs wich demos run only in Delphi IDE?
For example: I would like to crack DynamicSkinForm 3.6 (released yesterday in www.almdev.com) and using DCUCU 2.0, I realised that it uses a variation of a well-known procedure to acknoledge if Delphi is Running (DelphiIsRunning procedure. You can find some variation of this one in almost any Delphi Tips site). The problem is that I am NOT well-versed in assembly language, and I found many troubles trying to crack this version (3.6) of DynamicSkinForm. I've cracked v. 3.51 of DynamicSkinForm without any problem, but it seems that something has changed in 3.6 regarding such procedure. Could someone point me to the right direction regarding crack IDE-only VCL demos, specially this one?

Many thanks in advance.


mattus_zhao
Starting Member


Italy
27 Posts Posted - 2002/03/16 : 20:54:39
--------------------------------------------------------------------------------
Please remove the direct URL ,thanks!

Selt conquest is the greatest of victories.

delphicrack
Starting Member



77 Posts Posted - 2002/03/17 : 09:59:53
--------------------------------------------------------------------------------
I want to know whether you can use softice or trw2000.

1 Compile a test program (EXE) use the shareware version ,then close delphi.
2 Run softice to load the program .
3 bpx FindWindowA or bpx FindWindowExA ,push F11 ,then you can find the entry of check function.

Good luck!


routerboy
Starting Member



31 Posts Posted - 2002/04/19 : 20:43:43
--------------------------------------------------------------------------------
delphicrack

I have Softice 4.x and I'd really like to learn more about how to remove the check for the "Delphi IDE needs to be running" issue. What does the ASM code look like for that function?

Thanks

RB


delphicrack
Starting Member



77 Posts Posted - 2002/04/20 : 13:49:28
--------------------------------------------------------------------------------
In commonly,the FindWindowA is called in a function like IsDelphiRunning,return value like 1 is running ,0 is not,so if you push F11 and return from the FindWindowA API function ,you will be in IsDelphiRunning,now you can push F10 and you can see nag screen,In another condition ,the nag screen will appear out of the IsDelphiRunning function,so you can change the return value of the FindWindowA or IsDelphiRunning function.
note: please run "set code on " in softice command line,you can see the HEX code of the asm code ,write down the HEX code (changed) ,then use UltraEdit to open a DCU file and chenge it,now all is OK!

Good luck!


Edited by - delphicrack on 2002/04/20 13:50:42

 
DELPHI控件Expression parser 1.50 破解实录
首先申明本人用的是D3的版本。
首先把该控件安装进DELPHI,然后NEW APPLICATION,然后把 EXPRESSION放一个在FORM上,然后就存盘并且RUN,然后退出DELPHI。
打开W32DASM,对刚才生成的EXE文件反向工程,然后。。。(在此省略N行CRACKER专业术语^_^),一会就找到了这个控件的注册识别地方:

66833D4CE9420000 CMP WORD PTR [0042E94C],0000
740B JE 0042CB54

经验主义告诉我第一行就是在判断软件是否注册。
试着把它改为 66833d4ce9420001 ,然后继续查找,又找到两个这样的字串,都改成0001,然后运行----》 OK !
如果只是要CRACK这个EXE,工作到此就结束了,不过我们是要CRACK这个控件,于是继续工作----》
仔细看看那一行代码:
66833D 这个是操作码
4CE942 这个是地址码
0000 这是判断标志

由于这是一个控件,用它来生成的程序内存地址都不一样,所以它的特征字符串不会一成不变,但是前面的 66833D 和 后面的 0000 应该是一样的。于是在该控件安装目录下搜索所有的DCU文件看哪个里面有 66833D 这个特征字串---》找到了,是 EXPARS.DCU !
用HIEW打开它,然后查找 66833D ,一共找到 3 个,代码均为
66833D 000000 0000
嗯,这就对了,中间那个 000000 空着,程序运行时才把具体的地址填进去。
现在就简单了,把找到的三个地方的后面那 0000 都改成 0001 存盘
现在让我们再把刚才那个程序编译一次----》OK!
到此为止,Expression parser 1.50 已经被完全功破! ^_*

DELPHI控件破解小技巧
DELPHI控件一般都有很多的文件,大部分是PAS源码,少部分是DCU文件,一般与注册信息有关的代码就放在这些DCU文件里。
要直接破DCU很困难,目前为止好象还没有能够对DCU文件反向工程的东东,所以想破解DCU就得想些方法才行。
以下就是其中一种方法,不能保证百试百中:
先用那个控件做一个最小的APPLICATION,然后编译成EXE,然后对这个EXE文件反向工程或者用SOFTICE跟踪,一般在EXE文件
里会有那个控件写进的辨别注册与否的代码,找到后记下来,然后在那几个DCU文件里去找刚记下来的代码特征字串,如果你
刚才找得准的话,一般在DCU里也能找到同样的特征代码串,然后改之即可! 控件破解是大家都非常关心的一个工作,希望有
CRACK经验的都来谈谈这个问题,以后也不用满世界地找破解器了

红星软件工作室:
http://www.wenxin.net/rssw.org/main.htm
成立于一九九六年,作者:蔡杰 (cfido ID: Cai Jie) 编程工具:Delphi BPascal。


 
★★ MICROHELP出产的VBTOOLS系列控件破解方法 ★★
发信人: LaoWei (独孤一剑), 信区: hacker

标 题: MICROHELP出产的VBTOOLS系列控件破解方法

发信站: 饮水思源站 (Mon Sep 7 05:21:33 1998) , 转信

MICROHELP出产的VBTOOLS系列控件破解方法

非常高兴,第一次用SOFT-ICE竟然找到了

VBTOOLS系列控件的破解方法, 特奉献给大家:

下载地址:

ftp://ftp.sepc.ac.cn/pub1/win95/vbxocx/fishmam/vbt5ocx.*

Fishman说已经做了手术的, 但是运行时还是不行. 下面给出三种

破解方法

方法一: 拷贝或编辑license文件法

在你的Windows目录下生成一个MhOle50.lic文件, 该文件包括以下内容:

OLETools Copyright (c) 1995 MicroHelp, Inc. All Rights Reserved.

Warning: This product is licensed to you pursuant to the terms of the

MicroHelp license agreement included with the original software, and is

protected by copyright law and international treaties. Unauthorized

reproduction or distribution may result in severe civil and criminal

penalties, and will be prosecuted to the maximum extent possible under

the law.

其实这个文件最关键的就是第一行, 所以你编辑的时候只要有第一行就行了.

你随便用什么东西编辑一下都可以. 有了这个文件就算是OK了.

方法二: 注册方法

这种方法是修改Mhlocale.dll文件.

查 找: 83 C4 04 85 C0 74 21

替换为: 83 C4 04 85 C0 90 21

按OLETools按钮, 在要求你输入license Number的地方随便输入什么

或为什么也不输入都可以, 确定后, 在你的Windows目录下将会生成

一个MhOle50.lic文件, 该文件包括的内容就是上面所写的内容.

方法三: 修改OCX文件

因为每次运行时OCX都要检查你的在你的Windows目录下是否有MhOle50.lic文件,

如果没有就让你注册, 用下面的方法修改*,OCX文件.

查 找: 83 C4 04 85 C0 75 62

替换为: 83 C4 04 85 C0 EB 62

修改过后的OCX文件, 将不管你的Windows目录下是否有MhOle50.lic文件都认为

你注册成功. 不过这种方法要求你对所有的OCX文件进行同样的修改.

方法四: 找注册码,

这种方法也非常简单, 根据下面的步骤就可以找到注册码:

1) Ctrl+D激活SoftICE, 输入:

bpx lstrcmp

2) 运行带有VBTools控件的测试程序, 按OLETools按钮, 在要求你输入license

Number的地方随便输入一个字符串, 如: 123123123. 然后确定.

3) SoftICE激活后, 输入: p ret并回车. 然后向上找到如下代码:

CALL [USER32!GetWindowTextA]

LEA ECX, [ESP+28]

LEA EDX, [ESP+10]

PUSH ECX

PUSH EDX

CALL [KERNEL32!lstrcmp]

4) 再在CALL [KERNEL32!lstrcmp]这里设置一个断点

5) 按F5, 返回继续会有一错误信息, 再次确定.

6) 在断点处中断后, 输入: D EDX, 即可见到,所需的注册码.

如果输入 D ECX 就是你输入的字符串.

破解后的VBTOOLS已上载到:
ftp://ftp.ncic.ac.cn/incoming/LaoWei/VBTools/
--
主页: http://www.nease.net/~jianlin/
http://www.geocities.com/CollegePark/Quad/7895/
 
如果只是自己玩玩或是研究,
用破解的倒是没问题
不然还是注意点吧

另外你发错版面了吧
 
哈,没有源码的你也敢用???
上了贼船就危险了:)
 
楼上说的方法挺全的,
另外,这个最好只是自己研究的,不要商用.
 
我讲讲我的方法:
1.安装控件。
2.新建工程,放上一个控件编译运行。
3.退出DELPHI/BCB,运行这个程序是否能正常运行。
4.用TRW2000载入这个程序TRACE IN
由于每种控件不相同无法讲具体的过程,其实和普通的CRACK一样。
大部分的VCL控件都采用检测TAPPBUILDER是否运行的方法。
最常见的关键的语句是CALL ECX,这是DELPHI/BCB初始化单无文件时最常用的方法,
ECX值就是每个单无的入口,所以在CRACK时一般看住ECX的值。
找到判断点后记下机器码,多记一点。一般语句是:
CALL xxxxxxx
test xx,xx
jnz xxxxxxx
5.退出程序,用Hexedit或Ultraedit打开,先以较少的方法找,再根据经验判断是否关键点
6.修改后试运行。看看是否已无提示框
7.如果正常转2.因为有时同一个控件包的不同控件采用不同的方法。
可以去www.pediy.com学习一下。
 
我的另一个贴子,不是控件解密,而是控件包安装解密,写得详细些,可以供你参考一下。
http://211.101.4.25/delphibbs/dispq.asp?lid=896365
:woll2woll公司的INFOPOWER控件和1STCLASS控件解密方法公布

 
to emonster
《加密与解密--软件保护技术与解决方案》是老兄写的吗?
 
to xdzhan:不是我,我没这能力。我只解我需要的软件,只能算业务的爱好。
 
JamShellBrowser
:mikedeakins, 时间:2001-6-11 11:10:57, ID:561930
shellbrowser.dcu:
85 C0 74 10 6A 00 68 30 01 00 00 E8 00 00 00 00 85 C0 75 18 改为
90 90 90 90 EB

0000009D : 76 EA JBE -22; (0x89)
0000009F : 6A 00 PUSH $00
000000A1 : 68(20 01 00 00 PUSH ShellBrowser{0x37F}+$00000120
000000A6 : E8(00 00 00 00 CALL FindWindow{0x138}

000000AB : 85 C0 TEST EAX,EAX
000000AD : 74 10 JE +16; (0xBF)
000000AF : 6A 00 PUSH $00
000000B1 : 68(30 01 00 00 PUSH ShellBrowser{0x37F}+$00000130
000000B6 : E8(00 00 00 00 CALL FindWindow{0x138}
000000BB : 85 C0 TEST EAX,EAX
000000BD : 75 18 JNE +24; (0xD7)

000000BF : 6A 30 PUSH $30
000000C1 : B9(44 01 00 00 MOV ECX,ShellBrowser{0x37F}+$00000144
000000C6 : BA(54 01 00 00 MOV EDX,ShellBrowser{0x37F}+$00000154
000000CB : A1(00 00 00 00 MOV EAX,DWORD PTR [Application{0xB5}]
000000D0 : 8B 00 MOV EAX,DWORD PTR [EAX]
000000D2 : E8(00 00 00 00 CALL TApplication.MessageBox{0xBB}
000000D7 : 33 C0 XOR EAX,EAX
000000D9 : 5A POP EDX
000000DA : 59 POP ECX
000000DB : 59 POP ECX
000000DC : 64 89 10 MOV DWORD PTR FS:[EAX],EDX
000000DF : 68(EC 00 00 00 PUSH ShellBrowser{0x37F}+$000000EC

这就是带有限制的源代码。还是那个原理,要想判断是不是在 delphi 内,必须使用
FindWindow,这个程序更简单:它显示了消息对话框,你只要用 dede 反汇编,然后
搜索 MessageBox 就可以马上定位到这里,又有 FindWindow,确定无疑。第一部分修
改,原来的意思是跳转到显示对话框的代码,我们不让他跳转,改为 NOP 指令(90)
第二部分是非零跳转到正常执行。好了,我们使用 JMP,让他总是跳转到正常执行。

希望对你有所帮助。 - Mike


 

Similar threads

D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
920
DelphiTeacher的专栏
D
I
回复
0
查看
280
import
I
D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部