顾名思义写注册机来破解软件Software注册思路方法就是模仿你注册码生成算法或者逆向注 册码验证算法而写出来和你模样注册机如果被写出注册机你软件Software只好免费了或者你必须更换算法但以前注过册合法用户都得被迫更换注册码了
上期和暴力破解过招思路方法虽然可以避免爆破但注册机威胁还是存在Cracker要写注册机必须详细研究你软件Software验证模块这必须先将你软件Software脱壳再反汇编或者用调试器跟踪市面上许多加壳和保护软件Software都吹嘘不可能被脱壳但到目前为止没有个软件Software兑现了自己诺言由于CPU最终执行都是有效指令所以等你自解压完成后再从内存中Dump出来就可以实现脱壳因此不要在壳上面花很多功夫没有这个必要
第招:制造假相
反汇编和调试器跟踪都是不可能防止所有Win32都必须通过API来Windows系统中关键DLL(如Kernel32.dll、GDI32.dll等)然而API是可以Hook我们只能从自己代码着手来保护我们劳动果实了
为了自己调试和以后维护方便我们般采用有意义名字给我们命名可这给了Cracker可乘的机例如这样是什么意思大家应该目了然吧?IsRegistered()IsLicensed()LicenseVery()CheckReg()……这样Cracker就可以轻松地从数千个中找到他目标——你注册码校验!而且破解Delphi编写软件Software还有件TMG小组破解利器——DeDe它可以轻松地看到你软件Software里Form、Unit和名还可以反汇编部分代码更可以和Win32DASM合作反汇编更多代码对Delphi编出威胁极大
为了不给Cracker创造温馨舒适破解环境要故意混乱(Obfuscate)我们代码将软件Software中所有名全部替换成随机生成名例如Func_3dfsa_fs32zlfv这个是什么意思?恐怕只有天知道了网上有现成代码混乱器按你使用编程语言种类可以找到些但要注意只有当你要发布软件Software时才使用它而且定注意备份源代码否则当你看不懂你自己代码时就着急了:)
第 2招:用公匙并改名
另外定要使用公开密匙算法保护你软件SoftwareRSA、DSA和El Gamal的类算法都可以从网上找到但注意:将你算法单元中所有涉及到算法名称串全部改名避免被Cracker发现你用算法而模仿写出注册机来!你还可以张冠李戴明明用DSA将名字全部替换成RSA
其它算法如对称算法和Hash算法也要注意改名否则这样:
EncryptedCode = Blowfish(MD5(UserName)MD5(Key));
//你加密算法使用了Blowfish(对称算法)和MD5(Hash算法)
虽然那些Cracker不了解Blowfish和MD5算法原理也不会逆向推测它们但他们了解你校验算法流程和算法名便可马上从网上找到类似Blowfish和MD5算法包从而模拟你软件Software仿造出注册机
如果你用不常见算法如Skipjack(NASA美国航天局标准算法)、LOKI、3-WAY、Safer的类不出名但保密程度很高算法并且全部改名这样就会伤透他们脑筋了
当然最好把Hash算法也全部改名会给他们制造更多困难但注意MD5和SHA的类Hash值会被Cracker从内存中找到这样他就知道你用Hash了所以建议同时使用MD5变形算法Ripe-MD(RMD)128或160或其它Hash如Tiger、Haval等算法
第 3招:阻止别人调试
还有点调试器对我们威胁很大我们不会让Cracker们舒舒服服地使用SoftICE、TRW或OllyDbg来调试我们除了常用MeItICE思路方法外这里我给个笔者写思路方法:
{检查自己进程父进程是否为Explorer.exe否则是被调试器加载了}
{不过注意控制台父进程在WinNT下是Cmd.exe!}
{注意加载TlHelp32.pas单元}
procedure CheckParentProc;
var //检查自己进程父进程
Pn: TProcesseNtry32;
sHandle:THandle;
HExplProcParentProc:Hwnd;
Found:Boolean;
Buffer:.gif' />[0..1023]of Char;
Path:;
begin
H:= 0;
ExplProc:= 0;
ParentProc:= 0;
//得到Windows目录
SetString(PathBuffer)
GetWindowsDirectory(BufferSizeof(Buffer)- 1));
Path:= UpperCase(Path)+ 'EX PLORER.EXE';//得到Explorer路径
//得到所有进程列表快照
sHandle:= CreateToolHelp32Snap Shot(TH32CS_SNAPALL0);
Found:= Process32First(sHandlePn);//查找进程
while Found do //遍历所有进程
begin
Pn.szExeFile = ParamStr(0)then //自己进程
begin
ParentProc:= Pn.th32ParentProcessID://得到父进程进程ID
//父进程句柄
H:= OpenProcess(PRO CESS_ALL_ACCESSTruePn.th32Parent ProcessID);
end
UpperCase(Pn.szExeFile)= Path then
ExplProc:= Pn.th32ProcessID;//Ex plorerPID
Found:= Process32Next(sHandlePn);//查找下个
end;
//父进程不是Explorer是调试器……
ParentProc <> ExplProc then
begin
TerminateProcess(H0);//杀的!除的而后快也! :)
//你还可以加上其它什么死机代码来消遣消遣这位可爱Cracker:)
end
end
你可以在Delphi或者VC中试试这样可以把Delphi和VC杀掉了你现在用是Delphi和VC内置调试器来运行你调试时候你还是把它注释删掉吧发布时别忘记激活哟!
第 4招:保护串
最后个问题这也是个非常重要问题:保护你串!串在注册模块中非常重要!当个富有经验Cracker破解你软件Software时首先做就是窃取你串比如他会输入注册码得到你有关注册码提示通常是“无效注册码请重新输入!”或者“Invalid key(please input again)”等等然后用OllyDbg进行断点调试或者用WinDASM、IDA Pro等静态分析工具在被他脱壳后中查找那个串找到后进行分析因此请定加密你串! 使用时再临时解密出来而且要尽量少使用消息提示框避免被Cracker找到漏洞加密串不需要太复杂算法随便找个快速对称算法就可以了
最后提醒大家句不要在加密上花太多功夫!你应该把更多时间和精力都用来完善你软件Software这样会更合算借用位前辈话来忠告大家吧:花点时间考虑你自己软件Software看看它是否值得保护?如果没人用你软件Software保护也就没有意义了不要过高估计你软件Software“对世界重要性”!
最新评论