关于程序控制的问题,如何受控的启动一个可执行文件,从而达到对此程序的License管理,很急,大家进来帮帮我吧
问题是这个样子的
我有一个程序,可以正常运行,没有限制。现在想做这个程序的Demo和网络浮动License,也就是在网络中的一台主机上有一个License服务器,控制注册和同时有多少人可使用这个程序(这个已经通过winsock实现了),程序运行前,先去License服务器验证,看是否有足够的License。还要在程序运行过程中,每隔一段时间,去License服务器刷新。
但是没有源码,我想写一个调用程序,把要控制的程序作为一个子进程调用。大致代码如下
int main(int argc, char* argv[])
{
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);
ZeroMemory( &pi, sizeof(pi) );
// Start the child process.
if( !CreateProcess( NULL, // No module name (use command line).
"man.blt", // man.blt是我想控制的程序。现在我只是改了个名字调用,但如果把man.blt改成man.exe了,就不受控制了,有什么办法吗
NULL, // Process handle not inheritable.
NULL, // Thread handle not inheritable.
FALSE, // Set handle inheritance to FALSE.
0, // No creation flags.
NULL, // Use parent's environment block.
NULL, // Use parent's starting directory.
&si, // Pointer to STARTUPINFO structure.
&pi ) // Pointer to PROCESS_INFORMATION structure.
)
{
printf("CreateProcess failed.\n" );
}
// Wait until child process exits.
WaitForSingleObject( pi.hProcess, INFINITE );
// Close process and thread handles.
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
printf("程序结束!\n");
system("PAUSE");
return 0;
}
定时刷新的问题我可以通过一个线程做到.
现在的问题是
1. 这个方案在技术上有没有什么潜在的问题,我不太清楚.
2. 作为子进程调用的程序,我只是改了名,如果改后缀为exe,就不受控制了.有什么办法可以把这个文件"加密",在调用时候"解密".
3. 在这个程序中,子进程中止的时候,主进程就结束了.但是当主进程强行结束后,子进程还会运行.有什么办法吗?
4. 你认为还有什么其他的办法可以达到我的要求吗.
问题点数:100、回复次数:13Top
1 楼kvls(冰茶)回复于 2004-09-03 10:02:42 得分 0
2、您可以将受控程序的EXE头部进行修改,让它不能运行即可,开始运行时再将其还原。
3、采用注入线程到EXE的方法,在受控程序中添加您的控制代码。Top
2 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-03 10:02:56 得分 0
应该是受控程序主动的请求LICENCE,如果失败则主动退出程序,而不是根据程序可执行文件等来实现。Top
3 楼kvls(冰茶)回复于 2004-09-03 10:03:15 得分 40
2、您可以将受控程序的EXE头部进行修改,让它不能运行即可,开始运行时再将其还原。
3、采用注入线程到EXE的方法,在受控程序中添加您的控制代码。Top
4 楼microyzy(人不在牛,分高就行;分不在高,人牛也行)回复于 2004-09-03 10:03:30 得分 40
用进程枚举可能会好一点,然后就是处理改名之类的事情了Top
5 楼microyzy(人不在牛,分高就行;分不在高,人牛也行)回复于 2004-09-03 10:06:20 得分 0
如果只是要控制特定的程序,可以像楼上所说,加密exe文件,使其不能直接运行,然后通过你的程序来解密后再执行Top
6 楼chengwei_xj(ylxz.blogbus.com)回复于 2004-09-03 10:15:29 得分 0
to DentistryDoctor(牙科医生)
我没有源代码,所以无法修改受控程序.
Top
7 楼lianglp(寻找黄金分割点)回复于 2004-09-03 10:22:22 得分 5
microyzy(毛毛叉) 的方法比较可行,也相对简单Top
8 楼chengwei_xj(ylxz.blogbus.com)回复于 2004-09-03 10:31:09 得分 0
那能把microyzy(毛毛叉) 的方法具体说一下嘛
时间比较紧,可能没时间细看了,谢谢了Top
9 楼chengwei_xj(ylxz.blogbus.com)回复于 2004-09-03 10:32:18 得分 0
另外,要注意的是系统可能是win98、win2000和winxpTop
10 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2004-09-03 10:33:52 得分 5
那试试注水了。Top
11 楼chengwei_xj(ylxz.blogbus.com)回复于 2004-09-03 13:15:34 得分 0
up一下Top
12 楼crystal521(【云淡风轻】)回复于 2004-09-03 14:03:48 得分 5
你可以对二进制文件进行修改达到加密的目的,运行时在把它改回来
Top
13 楼banjo(3天看问题)回复于 2004-09-03 14:26:40 得分 5
加密是一种办法,或者修改二进制码也可以Top




