限次程序C语言源码

2016-02-19 14:31 3 1 收藏

今天图老师小编给大家展示的是限次程序C语言源码,精心挑选的内容希望大家多多支持、多多分享,喜欢就赶紧get哦!

【 tulaoshi.com - 编程语言 】

软件试用次数的限制有很多种方法,其要害是把次数这个值存储在哪 里。本文介绍一种方法,通过改变文件 的时间来存储试用次数,从而限制软 件的试用。稍微修改一下程序就可以使用了。
  
   一、通过改变文件时间来限制软件的试用次数
   在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如,在下面的示例 程序中,笔者就使用了保存分钟数的 位来保存
   试用次数。运行一下示例程 序,我们可以看到,只是文件时间的分 钟数加了1,一般人很难察觉,这种方 法有比较好的隐蔽性。
  
   二、示例程序中所涉及的中断
  
   1.中断21H的功能3DH
   用途:打开文件用于读。写或补充。
   调用寄存器:AH=3DH,AL=00H,DS:DX=文件名;
   返回寄存器:CF 复位--成功,AX=文件把柄。
   CF 置位--出错,AX=错误代码。
  
   2.中断21H的功能3EH
   用途:强迫清除所有缓冲区,更新目录,使文件把 柄无效。
   调用寄存器:AH=3EH,BX=文件把柄;
   返回寄存器:CF 复位--成功,AX被破坏,
   CF 置位--出错,AX=错误代码。
  
   3.中断21H的功能57H、子功能00H
   用途:读出文件被最后修改的日期和时间。
   调用寄存器:AX=5700H,BX=文件把柄;
   返回寄存器:CF 复位--成功,CX=文件时间, DX=文件日期,CF 置位--出错,AX=错误代码。
  
   4。中断21H的功能57H、子功能01H
   用途:将文件最后被修改过的日期和时间信息变 成指定值。
   调用寄存器:AX=5701H,BX=文件把柄,CX= 新时间,DX=新日期;
   返回寄存器:CF 复位--成功,CF 置位--出错,AX=错误代码。
  
   三、示例程序 #include
   #include
   #include
   int count( )
   {
   union REGS inregs,outregs;
   strut SREGS segs;
   unsigned handle;
   unsigned times;
   / * 打开文件 * /
   inregs.h.ah =0x3d;
   inregs.h.al =0;
   scgread(& segs);
   inregs.x.dx ="test.exe";
   intdosx(& inregs, & outregs, & segs);
   if(outregs.x.cflag) return(0);
   else
   {
   / * 读取文件日期时间 * /
   handle = Outregs.x.ax;
   inregs.x.ax = 0x5700;
   inregs.x.bx = handle;
   intdosx(& inregs, & outregs, &segs);
   times = (outregs.x.cx &0x7e0) 5;
   if(times 40)/ * 试用次数可以通过改变此处的'40'来实现 * /
   {
   inregs.x.ax = 0x5701;
   inregs.x.bx = handle;
   inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * /
   inregs.x.dx = outregs.x.dx;
   intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * /
   return(2);
   }
   else return(1);
   / * 关闭文件 * /
   inregs.h.ah = 0x3e;
   inregs.x.bx = handle;
   intdosx(& inregs, & outregs, & segs);
   }
   }
   main()
   {
   int flag;
   flag = count();
   if(flag==0) printf("此软件为试用版,请勿任意修改! n");
   if(flag==1) printf("此软件为试用版,您的试用次数已满!");
   if(flag==2) printf("此软件为试用版,欢迎试用!");
   }
  

来源:http://www.tulaoshi.com/n/20160219/1607140.html

延伸阅读
标签: PHP
  1.upfile.php文件 <html <body <title文件上传</title <form enctype="multipart/form-data" action=upload.php method=post <input type=file name=upfile size=10<br<br <input type=submit value='上载文件' </form </body </html 2.upload.php <? //取得当前日期信...
本文以eMule为例,探讨一下多国语言支持的实现。选择emule,因为它的多国语言支持实现的相当好,可以支持动态切换。而且最要害,它是开源的,可以直接通过源码来研究它的实现技术。 !-- frame contents -- !-- /frame contents -- emule是利用动态加载资源DLL来实现多语言切换的,每一个资源DLL中包含了一份对应某一语言的字符...
C++语言是一种应用较广的面向对象的程序设计语言,使用它可以实现面向对象的程序设计。面向对象的设计与面向过程的设计是有很大区别的,面向对象的程序设计是在面向过程的程序设计的基础上一个质的飞跃。要学会面向对象的程序设计,首先要学会一种面向对象的语言,即要学会用VC编程,就要先有C++的基础,而学习C++语言首先要熟悉它面向对象...
Turbo C提供了非常丰富的图形函数, 所有图形函数的原型均在graphics. h 中, 本节主要介绍图形模式的初始化、独立图形程序的建立、基本图形功能、图 形窗口以及图形模式下的文本输出等函数。另外, 使用图形函数时要确保有显示 器图形驱动程序*BGI, 同时将集成开发环境Options/Linker中的Graphics lib选 为on, 只有这样才能保证正...
1. strUCt的巨大作用 面对一个人的大型C/C++程序时,只看其对struct的使用情况我们就可以对其编写者的编程经验进行评估。因为一个大型的C/C++程序,势必要涉及一些(甚至大量)进行数据组合的结构体,这些结构体可以将原本意义属于一个整体的数据组合在一起。 !-- frame contents -- !-- /frame contents -- 从某种程度上来说,会...

经验教程

377

收藏

37
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部