在程序运行时能否读取自身和写入自身?(50分)

  • 主题发起人 主题发起人 南宫吹云
  • 开始时间 开始时间

南宫吹云

Unregistered / Unconfirmed
GUEST, unregistred user!
正是想做一个真正的限制使用次数的程序,如何把使用次数从EXE文件读出加一后写到
EXE文件的尾部?
 
不是asprotect可以做到吗?怎么,这个软件不是真正的次数限制?
 
Read/Write Regedit
 
搞错没有1通过注册表?骗小孩可以!
 
通过注册表肯定不可以完全限制的~
 
写到文件也没用,人家可以保留拷贝呀
 
我以前也想通过这个办法解决限次问题,但exe正在运行,怎么可能改变她自己呢?我觉得还是要有一个变通的办法才好
比如说,我们可以设计一个dll什么的。
 
program Hello;

{$APPTYPE CONSOLE}

uses
; Windows, SysUtils;
var ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; //
; szSrc, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;//
; szDest ; ;: array[0..MAX_PATH] of char; ; ; ; ; //
; szCmdLine : string;
; hFile ; ; : THandle;
; hProcess ;: THandle;
; SI ; ; ; ;: TStartupInfo;
; PI ; ; ; ;: TProcessInformation;
; nTimes ; ;: DWord;
begin
if ParamCount = 0 then
; ;begin
; ;GetModuleFileName(0, szSrc, MAX_PATH);
; ;GetTempPath(MAX_PATH, szDest);
; ;GetTempFileName(szDest, 'Tmp', 0, szDest);
; ;CopyFile(szSrc, szDest, FALSE); ; ; ; ; ; ; ; ; // 将当前可执行文件复制一个副本

; ;hFile := CreateFile(szDest, ; ; ; ; ; ; ; ; ; ; // pointer to name of the file
; ; ; ; ; ; ; ; ; ; ; ;0, ; ; ; ; ; ; ; ; ; ; ; ; ;// access (read-write) mode
; ; ; ; ; ; ; ; ; ; ; ;FILE_SHARE_READ, ; ; ; ; ; ;// share mode
; ; ; ; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ;// pointer to security attributes
; ; ; ; ; ; ; ; ; ; ; ;OPEN_EXISTING, ; ; ; ; ; ; ;// how to create
; ; ; ; ; ; ; ; ; ; ; ;FILE_FLAG_DELETE_ON_CLOSE, ;// file attributes
; ; ; ; ; ; ; ; ; ; ; ;0); ; ; ; ; ; ; ; ; ; ; ; ; // handle to file with attributes to copy

; ;hProcess := OpenProcess(SYNCHRONIZE, ; ; ; ; ; ;// access flag
; ; ; ; ; ; ; ; ; ; ; ; ; ;TRUE, ; ; ; ; ; ; ; ; ; // handle inheritance flag
; ; ; ; ; ; ; ; ; ; ; ; ; ;GetCurrentProcessId); ; // process identifier


; ;szCmdLine := Format('%s %d "%s"', [szDest, hProcess, szSrc]); //格式化命令行参数

; ;FillChar(SI, SizeOf(SI), 0);
; ;SI.cb := SizeOf(SI);

; ;CreateProcess(nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;// pointer to name of executable module
; ; ; ; ; ; ; ; ;PChar(szCmdLine), ; ; ; ; ; ; ; ; // pointer to command line string
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;// pointer to process security attributes
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;// pointer to thread security attributes
; ; ; ; ; ; ; ; ;TRUE, ; ; ; ; ; ; ; ; ; ; ; ; ; ; // handle inheritance flag
; ; ; ; ; ; ; ; ;0, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;// creation flags
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;// pointer to new environment block
; ; ; ; ; ; ; ; ;nil, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;// pointer to current directory name
; ; ; ; ; ; ; ; ;SI, ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; // pointer to STARTUPINFO
; ; ; ; ; ; ; ; ;PI); ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;// pointer to PROCESS_INFORMATION

; ;CloseHandle(hProcess);
; ;CloseHandle(hFile);
; ;end
else
; ;begin
; ;hProcess := THANDLE(StrToInt(ParamStr(1)));
; ;WaitForSingleObject(hProcess, INFINITE); ; ; ; ;//等待主进程结束
; ;CloseHandle(hProcess);

; ;hFile := FileOpen(ParamStr(2), fmOpenReadWrite);
; ;if hFile > 0 then
; ; ; begin
; ; ; FileSeek(hFile, $80, 0);
; ; ; FileRead(hFile, nTimes, SizeOf(nTimes));
; ; ; Inc(nTimes);
; ; ; FileSeek(hFile, $80, 0);
; ; ; FileWrite(hFile, nTimes, SizeOf(nTimes));
; ; ; FileClose(hFile);
; ; ; Writeln('我已经运行'+IntToStr(nTimes)+'次了');
; ; ; end;

; ;end;
end.
 
写注册表+加密,这不是很简单吗?

就算写文件,只要加密,别人也不敢随便碰。

操作系统都有被破解,还有什么搞不定?
 
各位说的都有道理,像直接写到文件中也一样可以破解的,大家有什么好方法吗?
 
比较好的办法还是读主板或硬盘参数,
再和序列号和用户名和安装日期一起生成一个安全码,
每次启动时核对硬件参数以及安全码,两个都对得上号,才是正版。
 
是不是将程序拷贝一份,再将拷贝的的修改,在STARTUP。BAT中将原先的文件删除,
再将拷贝的文件改名成原来的文件名。。
 
to:mjself
如果是正版用户,也可能重装系统或者别的,如安装新的硬件,这样正版用户受到了限制啊?
 
前两天好像有人问过这个问题~
 
软加密存在的问题:方便了自己就麻烦了客户,方便了客户就亏了自已
硬加密:有硬ID当然更好,不过客户的并口要是坏了,
; ; ; ; 或是有五个正版软件(带狗)就是一串狗了,小心还会冲打印数据哟

最好的办法:卖的是服务,软件is Free
 
加密解密--永不停止的斗争。
写到文件的方法,如果再防拷贝就可以了
 
如果有心CRACK,那只是时间的问题。
 
crack方法是用汇编的反编译吗?
 
可以
我就做过
 
后退
顶部