皮皮网

【产品展示asp源码】【mptcp源码分析】【家电维修 源码】trw调试器 源码_调试器编写

2024-11-23 08:52:12 来源:exception源码查看

1.Delphi软件的破解

trw调试器 源码_调试器编写

Delphi软件的破解

       ç¬¬ä¸€æ‹›ï¼šåˆ¶é€ å‡ç›¸

       ã€€ã€€åæ±‡ç¼–和调试器跟踪都是不可能防止的,因为所有的Win程序都必须通过API来调用Windows系统中的关键DLL的(如Kernel.dll、GDI.dll等),然而API是可以Hook的。我们只能从自己的代码着手来保护我们的劳动果实了。

       ã€€ã€€ä¸ºäº†è‡ªå·±è°ƒè¯•å’Œä»¥åŽç»´æŠ¤çš„方便,我们一般采用有意义的名字给我们的函数命名,可这给了Cracker可乘之机。例如这样的函数是什么意思大家应该一目了然吧?调调试产品展示asp源码IsRegistered(),IsLicensed(),LicenseVerify(),CheckReg()……这样Cracker就可以轻松地从数千个函数中找到他的目标——你的注册码校验函数!而且破解Delphi编写的软件还有一件TMG小组的破解利器——DeDe。它可以轻松地看到你软件里的Form、Unit和函数名,还可以反汇编一部分代码,更可以和WinDASM合作反汇编更多的代码,对Delphi编出的程序威胁极大。

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

       ç¬¬äºŒæ‹›ï¼šç”¨å…¬åŒ™ï¼Œå¹¶æ”¹å

       ã€€ã€€å¦å¤–,一定要使用公开密匙算法保护你的软件。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)或或其它的Hash,如Tiger、Haval等算法。

       ç¬¬ä¸‰æ‹›ï¼šé˜»æ­¢åˆ«äººè°ƒè¯•

       ã€€ã€€è¿˜æœ‰ä¸€ç‚¹ï¼Œè°ƒè¯•å™¨å¯¹æˆ‘们的威胁很大,我们不会让Cracker们舒舒服服地使用SoftICE、TRW或OllyDbg来调试我们的程序。除了常用的MeItICE方法外,这里我给一个笔者写的方法:

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

       �

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

       ã€€ã€€{ 注意加载TlHelp.pas单元}

       ã€€ã€€procedure CheckParentProc;

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

       ã€€ã€€Pn: TProcesseNtry;

       ã€€ã€€sHandle:THandle;

       ã€€ã€€H,ExplProc,ParentProc:Hwnd;

       ã€€ã€€Found:Boolean;

       ã€€ã€€Buffer:array[0..]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:= CreateToolHelpSnap Shot(THCS_SNAPALL,0);

       ã€€ã€€Found:= ProcessFirst(sHandle,Pn);//查找进程

       ã€€ã€€while Found do //遍历所有进程

       ã€€ã€€begin

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

       ã€€ã€€begin

       ã€€ã€€ParentProc:= Pn.thParentProcessID://得到父进程的进程ID

       ã€€ã€€//父进程的句柄

       ã€€ã€€H:= OpenProcess(PRO CESS_ALL_ACCESS,True,Pn.thParent ProcessID);

       ã€€ã€€end

       ã€€ã€€else if UpperCase(Pn.szExeFile)= Path then

       ã€€ã€€ExplProc:= Pn.thProcessID;//Ex plorer的PID

       ã€€ã€€Found:= ProcessNext(sHandle,Pn);//查找下一个

       ã€€ã€€end;

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

       ã€€ã€€if ParentProc <> ExplProc then

       ã€€ã€€begin

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

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

       ã€€ã€€ã€€end�

       ã€€ã€€end�

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