Delphi软件的破解

Delphi软件的破解,第1张

第一招:制造假相

反汇编和调试器跟踪都是不可能防止的,因为所有的Win32程序都必须通过API来调用Windows系统中的关键DLL的(如Kernel32.dll、GDI32.dll等),然而API是可以Hook的。我们只能从自己的代码着手来保护我们的劳动果实了。

为了自己调试和以后维护的方便,我们一般采用有意义的名字给我们的函数命名,可这给了Cracker可乘之机。例如这样的函数是什么意思大家应该一目了然吧?IsRegistered(),IsLicensed(),LicenseVerify(),CheckReg()……这样Cracker就可以轻松地从数千个函数中找到他的目标——你的注册码校验函数!而且破解Delphi编写的软件还有一件TMG小组的破解利器——DeDe。它可以轻松地看到你软件里的Form、Unit和函数名,还可以反汇编一部分代码,更可以和Win32DASM合作反汇编更多的代码,对Delphi编出的程序威胁极大。

为了不给Cracker创造温馨舒适的破解环境,要故意混乱(Obfuscate)我们的代码,将软件中所有的函数名全部替换成随机生成的函数名。例如Func_3dfsa_fs32zlfv��这个函数是什么意思?恐怕只有天知道了。网上有现成的代码混乱器,按你使用的编程语言的种类可以找到一些。但要注意,只有当你要发布软件时才使用它,而且一定注意备份源代码。否则,当你看不懂你自己的代码时就着急了:)

第二招:用公匙,并改名

另外,一定要使用公开密匙算法保护你的软件。RSA、DSA和El Gamal之类的算法都可以从网上找到。但注意:将你算法单元中所有涉及到算法名称的字符串全部改名。避免被Cracker发现你用的算法而模仿写出注册机来!你还可以张冠李戴,明明用的DSA,将名字全部替换成RSA。

其它算法,如对称算法和Hash算法也要注意改名,否则这样:

EncryptedCode = Blowfish(MD5(UserName),MD5(Key));

//你的加密算法,使用了Blowfish(对称算法)和MD5(Hash算法)

虽然那些Cracker不了解Blowfish和MD5算法的原理,也不会逆向推测它们,但他们了解你的校验算法的流程和算法名,便可马上从网上找到类似的Blowfish和MD5算法包,从而模拟你的软件仿造出注册机。

如果你用不常见的,算法如Skipjack(NASA美国航天局标准算法)、LOKI、3-WAY、Safer之类不出名但保密程度很高的算法,并且全部改名,这样就会伤透他们脑筋了。

当然,最好把Hash算法也全部改名,会给他们制造更多的困难。但注意,MD5和SHA之类的Hash初始值会被Cracker从内存中找到,这样他就知道你用的Hash了。所以建议同时使用MD5的变形算法Ripe-MD(RMD)128或160或其它的Hash,如Tiger、Haval等算法。

第三招:阻止别人调试

还有一点,调试器对我们的威胁很大,我们不会让Cracker们舒舒服服地使用SoftICE、TRW或OllyDbg来调试我们的程序。除了常用的MeItICE方法外,这里我给一个笔者写的方法:

{检查自己的进程的父进程是否为Explorer.exe,否则是被调试器加载了}

{不过注意,控制台程序的父进程在WinNT下是Cmd.exe!}

{注意加载TlHelp32.pas单元}

procedure CheckParentProc;

var //检查自己的进程的父进程

Pn: TProcesseNtry32;

sHandle:THandle;

H,ExplProc,ParentProc:Hwnd;

Found:Boolean;

Buffer:array[0..1023]of Char;

 Path:string;

begin

H:= 0;

ExplProc:= 0;

ParentProc:= 0;

//得到Windows的目录

SetString(Path,Buffer)

GetWindowsDirectory(Buffer,Sizeof(Buffer)- 1));

Path:= UpperCase(Path)+ '\EX PLORER.EXE';//得到Explorer的路径

//得到所有进程的列表快照

sHandle:= CreateToolHelp32Snap Shot(TH32CS_SNAPALL,0);

Found:= Process32First(sHandle,Pn);//查找进程

while Found do //遍历所有进程

begin

if Pn.szExeFile = ParamStr(0)then //自己的进程

begin

ParentProc:= Pn.th32ParentProcessID://得到父进程的进程ID

//父进程的句柄

H:= OpenProcess(PRO CESS_ALL_ACCESS,True,Pn.th32Parent ProcessID);

end

else if UpperCase(Pn.szExeFile)= Path then

ExplProc:= Pn.th32ProcessID;//Ex plorer的PID

Found:= Process32Next(sHandle,Pn);//查找下一个

end;

//父进程不是Explorer,是调试器……

if ParentProc <>ExplProc then

begin

TerminateProcess(H,0);//杀之!除之而后快也! :)

//你还可以加上其它什么死机代码来消遣消遣这位可爱的Cracker:)

 end�

end�

你可以在Delphi或者VC中试试,这样可以把Delphi和VC杀掉了,因为你现在用的是Delphi和VC的内置调试器来运行你的程序。调试的时候你还是把它的注释删掉吧,发布时别忘记激活哟!

1由于windows xp不再有微软的支持了,近日就把开发环境移至windows 7 *** 作系统。虽然之前一部分的开发环境已早搬到windows 7上,但一些重要的却依然留在windows xp中体验。每到要换开发环境总是要切换系统,于是就想了干脆淘汰windows xp *** 作系统算了。没曾想到,Delphi XE7移至windows 7中发现无法进行补丁破解,头痛了好一会。经过一会的折腾,总算搞定了。为了避免大家再走误区,写下这条经验以供参考。

第一步,安装Delphi XE7后先不启动执行程序,这时把补丁包的slip文件

到安装目录Embarcadero\RAD Studio\8.0\License目录下。

2第二步,这时打开XE7patchFINAL文件夹执行补丁,可通过双击或者

右击d出菜单选中[以管理员身份运行]的方法。

3第三步,这时单击[Patch]按钮后d出提示没有找到文件,我们选择[是]按钮进行下一步。

4第四步,我们选择Delphi XE7安装目录..\Embarcadero\RADStudio\8.0\bin下的这个bds.exe文件。

5第五步,提示错误的文件或已经打了补丁,没有什么补丁可打。这个时候,我们当然是无法正常使用Delphi XE7的。

6第六步,这时我们可以尝试修改文件夹的权限以及bds.exe的文件权限,都不行。原来补丁执行程序要获得bds.exe的权限必须是Administrator管理员的帐号才行。

7第七步,我们以Administrator管理员的帐号进入 *** 作系统后,执行补丁程序。这时补丁成功,这时delphi XE7就可以正常使用了

8第九步,我们打开Delphi XE7开发平台,发现可以正常使用了。

9绕了一个大圈,由于平时不太喜欢直接使用Administrator管理员帐号,结果杯具发生了。还好吧,终于找到问题所在一并解决,愿对大家有用。如需补丁包可交流。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8099845.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存