共享软件防破解的实用招法

1、检测主程序大小,防止破解补丁之类

Function TForm1.GesSelfSf: integer;
var
F: file of byte;
begin
Filemode:=0;
Assignfile(F,'./FileName.exe');
Reset(f);
Result:=Filesize(F);
Closefile(F);
end;


2、检测创建日期和时间,让破解补丁实效

Function TForm1.FinDate:String;
var
t:TDate;
begin
ShortDateFormat:='yyyy-mm-dd';
t:=FileDateToDateTime(FileAge('FileName.exe'));
Result:=DateToStr(t);
end;


3、注册码加密函数嵌入数学函数,增加破解难度
(略)

 

 



4、必要时自己删除自己(主程序):

 

procedure TForm1.Funll;
var
hModule:THandle;
buff:array[0..255]of Char;
hKernel32:THandle;
pExitProcess,pDeleteFileA,pUnmapViewOfFile:Pointer;
begin
hModule:=GetModuleHandle(nil);
GetModuleFileName(hModule, buff, sizeof(buff));
CloseHandle(THandle(4));
hKernel32:=GetModuleHandle('KERNEL32');
pExitProcess:=GetProcAddress(hKernel32, 'ExitProcess');
pDeleteFileA:=GetProcAddress(hKernel32, 'DeleteFileA');
pUnmapViewOfFile:=GetProcAddress(hKernel32, 'UnmapViewOfFile');
asm
LEA EAX, buff
PUSH 0
PUSH 0
PUSH EAX
PUSH pExitProcess
PUSH hModule
PUSH pDeleteFileA
PUSH pUnmapViewOfFile
RET
end;
begin
Funll;
end;
end;



  具体怎么使用,那要看你自己的意愿了和需要了。反正我是这样做的,我的软件ADSL拨号计时器只在很早版本上出过注册机,后来的v3.70出过破解补丁——其实只是破掉了启动时提示注册的对话框,实质上根本没破解。用了上述的着法以后,到现在的v5.28版本,再没有过什么破解补丁或注册机。

  如果现在的v5.28版本谁能破解,将立即公布程序源码。

  E-Mail: uncleme@126.com  http://www.uncleme.com


附:注册机破解法的原理以及应对方法

认识注册机破解法

  顾名思义,写注册机来破解软件注册的方法,就是模仿你的注册码生成算法或者逆向注 册码验证算法而写出来的和你一模一样的注册机。如果被写出注册机,你的软件只好免费了。或者你必须更换算法,但以前注过册的合法用户都得被迫更换注册码了。
作者:idler2005

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Queen 是国际象棋中的一种棋子,它可以沿着横、竖、斜线方向移动,因此在任何一个位置上,它最多可以有8个方向可以移动。以下是棋子按照queen走法走一步的所有可行招法数目的Python函数实现: ```python def get_queen_moves(board, row, col): # 先获取棋盘的大小 size = len(board) # 用一个列表来存储所有的可行招法 moves = [] # 横向移动 for c in range(size): if c != col: moves.append((row, c)) # 竖向移动 for r in range(size): if r != row: moves.append((r, col)) # 左上到右下斜线移动 for r, c in zip(range(row-1, -1, -1), range(col-1, -1, -1)): if r < 0 or c < 0: break moves.append((r, c)) for r, c in zip(range(row+1, size), range(col+1, size)): if r >= size or c >= size: break moves.append((r, c)) # 左下到右上斜线移动 for r, c in zip(range(row+1, size), range(col-1, -1, -1)): if r >= size or c < 0: break moves.append((r, c)) for r, c in zip(range(row-1, -1, -1), range(col+1, size)): if r < 0 or c >= size: break moves.append((r, c)) # 返回所有可行招法的数量 return len(moves) ``` 这个函数接受一个棋盘(二维列表)、棋子的行和列作为输入,返回该棋子按照queen走法走一步的所有可行招法数目。函数首先获取棋盘的大小,然后分别计算出棋子可以沿着横向、竖向、左上到右下斜线、左下到右上斜线移动的所有位置,并将这些位置存储在一个列表中。最后返回列表的长度即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值