![]() |
中国DOS联盟-- 联合DOS 推动DOS 发展DOS --联盟域名:www.cn-dos.net 论坛域名:www.cn-dos.net/forum |
| 游客 | 登录 | 注册 | 会员 | 搜索 | 中国DOS联盟 |
|
中国DOS联盟论坛 现在时间是 2026-10-27 07:27 |
共 47,815 主题排行 / 349,928 发帖 / 今日 0 篇 / 48,289 会员排行 |
| DOS启动盘 & LOGO技术 (启动盘室) » 用C语言加密和DOS启动时LOGO |
| 可打印版本 976 / 10 |
| 第1楼 jerrywang6 | 发表于 2004-03-17 00:00 |
| 初级用户 发帖 13 积分 132 | |
|
用C语言加密和DOS启动时LOGO 请教各位大虾及各位斑竹:
我刚用C/C++开发出一套医疗设备的监护控制系统,与NAIS的FP0通讯完成,现在马上要交货了,肯定要将程序内的逻辑锁及相关的防长期使用的功能取消,但我又担心客户无限制的拷贝,请各位大虾支招。目前我知道两个方案可以做 1:读CPU或采集卡CPU的序列号,但我不知道这个序列号怎么用C语言读出, 2:加硬件狗,但没有实际操作过,不知道价钱多少,性能怎么样, 以上两种方案如果能采用第一种更好,否则只有加狗了。其实我也不想这么做。 我本善良,那知世道艰难,现在我和我同事搞了快三个月,没有任何银两进帐。 急!急!急!。。。 另外,我想启动时不显示DOS自检,直接运行我的LOGO,有什么方法实现,我的是DOS6.22 广州 王 13006881860 |
|
| 第2楼 Wengier | 发表于 2004-03-17 00:00 |
| 系统支持 发帖 10,521 积分 27,736 | |
|
关于显示LOGO的问题,你的DOS版本过旧,请升级到MS-DOS 7.10,自带DOS启动LOGO支持。下面是MS-DOS 7.10完整安装版:
http://newdos.yginfo.net/dosart32.htm |
|
| 第3楼 jerrywang6 | 发表于 2004-03-19 00:00 |
| 初级用户 发帖 13 积分 132 | |
|
谢谢Wengier斑竹
|
|
| 第4楼 Kinglion | 发表于 2004-03-22 00:00 |
| 铂金会员 发帖 1,924 积分 5,798 来自 金獅電腦軟體工作室 | |
|
楼主可以参考以下程序,将加密与硬盘的序列号联系上:
//////////////////////////////////////////////////////////////////////////////// // 程序名: HDSN.C 最后修改日期: 2002.08.08 // // // // 程序主要功能: // // 获得 IDE 硬盘 C 的序列号 // // // //////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include char *getascii(unsigned int in_data, int off_start, int off_end); char *getascii(unsigned int in_data, int off_start, int off_end) { static char ret_val; int loop, loop1; for(loop = off_start, loop1 = 0; loop <= off_end; loop++) { ret_val = (char)(in_data/256); // Get High byte ret_val = (char)(in_data%256); // Get Low byte } ret_val = '\0'; // Make sure is ends in a NULL character return(ret_val); // Return Serial Number of Physical Disk } void main(void) { unsigned int dd; // DiskData unsigned int dd_off; // DiskData offset while(inp(0x1F7)!=0x50); // Wait for controller not busy outp(0x1F6,0xA0); // Get first/second drive outp(0x1F7,0xEC); // Get drive info data while(inp(0x1F7)!=0x58); // Wait for data ready for(dd_off = 0; dd_off != 256; dd_off++) // Read "sector" dd = inpw(0x1F0); printf("The Serial Number of Physical Disk is %s", getascii(dd,10,19)); asm { mov ah, 4ch; // Return to DOS. int 21h; } } |
|
| 第5楼 Kinglion | 发表于 2004-03-22 00:00 |
| 铂金会员 发帖 1,924 积分 5,798 来自 金獅電腦軟體工作室 | |
|
还有下面这个程序也可做参考:
///////////////////////////////////////////////////////////////////////////////// // 程序名: VOLSN.C 最后整理日期: 2002.08.08 // // // // 程序主要功能: // // 获得 IDE 硬盘逻辑盘 C 的卷序列号 // // // //////////////////////////////////////////////////////////////////////////////// #include #include #include #include void main(void) { char serial_no; int i; union REGS r; struct SREGS s; unsigned sno1, sno2; r.x.ax = 0x6900; r.h.bl = 3; // A:1, B:2, C:3, D:4, etc ... segread(&s); intdosx(&r, &r, &s); if(r.x.cflag) { *serial_no = '\0';} else { sno2 = *((unsigned far *)MK_FP(s.ds, r.x.dx+2)); sno1 = *((unsigned far *)MK_FP(s.ds, r.x.dx+4)); sprintf(serial_no,"%04x-%04x\n", sno1, sno2); } printf("The Volume Serial Number of Logic Disk is %s", serial_no); asm { mov ah, 4ch; int 21h; } } |
|
| 第6楼 Kinglion | 发表于 2004-03-22 00:00 |
| 铂金会员 发帖 1,924 积分 5,798 来自 金獅電腦軟體工作室 | |
|
希望楼主很很好的保护你的产品不被侵权,祝你好运!
|
|
| 第7楼 jerrywang6 | 发表于 2004-03-22 00:00 |
| 初级用户 发帖 13 积分 132 | |
|
谢谢各位鼎立相助,但不知各位的程序读的是物理序列号还是FAT格式化后的序列号,我还得实验一下,但总之谢谢各路高手了,特别谢谢KINGLION
|
|
| 第8楼 Kinglion | 发表于 2004-03-23 00:00 |
| 铂金会员 发帖 1,924 积分 5,798 来自 金獅電腦軟體工作室 | |
|
我上传的程序已经说明了其功能,楼主实验成功后不要忘了让大家知道噢!
|
|
| 第9楼 jerrywang6 | 发表于 2004-03-23 00:00 |
| 初级用户 发帖 13 积分 132 | |
|
一定一定
|
|
| 第10楼 jerrywang6 | 发表于 2004-03-23 00:00 |
| 初级用户 发帖 13 积分 132 | |
|
感谢KINGLION,程序实验成功,
4楼的程序是读硬盘的物理序列号,5楼的是读硬盘的逻辑(格式化后随机分配)序列号,因为该序列号可以通过软件修改,建议大家加密时选用4楼的程序。 我是在TC2下运行的,当然其中的注释“//”要改成“/* */”,还有由于TC没有inpw()函数,所以要将其改成 inport();——同样是读一个字; |
|
| 第11楼 jerrywang6 | 发表于 2004-03-25 00:00 |
| 初级用户 发帖 13 积分 132 | |
|
今天我有将程序测试了以下DISKONCHIP公司的电子盘,发现无法读取该盘的物理序列号,经咨询说是没有该序列号,不知道真假,
极端郁闷! |
|
|
[ 联系联盟系统管理团队 -
中国DOS联盟 -
标准版 ] Sponsored by ifanr Inc | © 2001–2023 |