QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2854|回复: 0
打印 上一主题 下一主题

软件试用次数的限制

[复制链接]
字体大小: 正常 放大
韩冰        

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

跳转到指定楼层
1#
发表于 2005-1-26 01:31 |只看该作者 |倒序浏览
|招呼Ta 关注Ta

5 c O$ m6 m n0 q( F# @' r3 ?7 {

; g+ m, ?( @7 x+ [+ ?4 f0 ~

软件试用次数的限制有很多种方法,其关键是把次数这个值存储在哪里。本文介绍一种方法,通过改变文件 的时间来存储试用次数,从而限制软 件的试用。 4 H! a9 V! Y% j- N6 E一、通过改变文件时间来限制软件的试用次数 * H" Y+ \ c8 Q! r 在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如,在下面的示例 程序中,笔者就使用了保存分钟数的 位来保存试用次数。运行一下示例程序,我们可以看到,只是文件时间的分 钟数加了1,一般人很难察觉,这种方 法有比较好的隐蔽性。 0 c# k! W3 x/ A; J二、示例程序中所涉及的中断 + m- q( T# A2 ~* C6 y p$ E 1.中断21H的功能3DH 3 j0 }7 i+ j5 ^2 w* ` 用途:打开文件用于读。写或补 充。 2 E" a* T* D- F5 w 调用寄存器:AH=3DH,AL=00H,DSX=文件名; 6 c1 [1 O2 \9 T. L 返回寄存器:CF 复位--成功,AX=文件把柄。 ' M$ f) x) r5 `8 N/ t CF 置位--出错,AX=错误代码。 " O) Z% j2 X% [& a: d0 H 2.中断21H的功能3EH / n1 N% {! y) a/ L F" T 用途:强迫清除所有缓冲区,更新目录,使文件把 柄无效。 1 G9 F. q, d9 R9 M0 V 调用寄存器:AH=3EH,BX=文件把柄; % z- s0 g- i6 U0 D7 @$ w) V; T( u 返回寄存器:CF 复位--成功,AX被破坏, ; h8 N6 {9 \+ L6 [1 A$ C3 A3 C CF 置位--出错,AX=错误代码。 ' r6 m0 w9 h7 [) {) I 3.中断21H的功能57H、子功能00H % J1 P* _/ b; P: g1 a4 o 用途:读出文件被最后修改的日期和时间。 8 k' A) E$ J: _ 调用寄存器:AX=5700H,BX=文件把柄; ) \5 v4 a4 N! n 返回寄存器:CF 复位--成功,CX=文件时间, DX=文件日期, 7 Q) M. \4 d- ?) J( J CF 置位--出错,AX=错误代码。 ( R3 [2 ]: V4 o' Q 4。中断21H的功能57H、子功能01H , p8 ?4 o, L5 P8 M& z: _ 用途:将文件最后被修改过的日期和时间信息变 成指定值。 ) S; @! K# x l9 T! c A 调用寄存器:AX=5701H,BX=文件把柄,CX= 新时间,DX=新日期; 1 Y: P8 p% y$ \ 返回寄存器:CF 复位--成功, ' f( x, {) s6 S. A) I CF 置位--出错,AX=错误代码。 - g3 a+ }0 e2 ^+ C1 f7 h# ]三、示例程序 ( p) R- Y- X$ O2 k4 {- B( z' L #include <sidio.h> # V3 _2 [. C* {8 G( h c4 a r #include <dos.h> : p! T+ n2 ?6 ^) j9 U #include <conio.h> # X6 Y( e# v9 v& z; ]# Rint count( ) ' ^4 o. S8 |& q% q { ; `3 N: x: K* X union REGS inregs,outregs; % c' o6 F0 x8 h( R strut SREGS segs; : H3 R0 _ v( p unsigned handle; 6 _0 u1 @; G1 _- u2 B- b) d unsigned times; 0 i, u$ Q+ e, o* p / * 打开文件 * / 5 N5 K4 h3 Y9 E/ {( @ inregs.h.ah =0x3d; 0 \2 M7 t& v- q5 F: z$ D( Y$ R inregs.h.al =0; 6 ^3 c' P5 I7 M4 _/ {4 W scgread(& segs); ! s: L2 o, f4 H) Y- o inregs.x.dx ="test.exe"; & T+ y' N/ P$ t! v( | intdosx(& inregs, & outregs, & segs); / K6 u h* M" d0 S. [ if(outregs.x.cflag) return(0); % M" p% S! K( k) T5 C else , m. \8 ?: b4 F( p- _8 q7 l( S) U* ^ { 7 a" Z7 i9 J( [/ m$ J / * 读取文件日期时间 * / # B+ h3 g$ O( V* R% m+ D handle = Outregs.x.ax; * s, [9 O6 |+ Y7 F5 [ inregs.x.ax = 0x5700; 9 @" j8 j- C0 P5 P. _8 R i+ ]" p- a inregs.x.bx = handle; E; w8 I l; W* ]$ Z intdosx(& inregs, & outregs, &segs); . N! [0 d2 ?* F* t+ t times = (outregs.x.cx &0x7e0)> > 5; + @ G9 j# F' N s( ^ if(times <40)/ * 试用次数可以通过改变此处的'40'来实现 * / " q, J0 Z. }9 G; V8 ]3 r/ L- n { 0 x* R9 [% b% ] inregs.x.ax = 0x5701; ( b6 J7 y& b5 s inregs.x.bx = handle; % |3 H d" z: l, J4 M inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * / * y5 Q+ C& H' X! P: R/ ^: C2 ]; K$ ^ inregs.x.dx = outregs.x.dx; 4 W+ P" f" ^% j intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * / 4 D4 `- Q0 z" o# ^0 x! r return(2); ( K6 d4 N; q; @, H } . ^/ S# X+ R* c6 E0 Y0 n1 t else return(1); 1 W5 b% t: x. ^# K5 g! J! ~6 a / * 关闭文件 * / ' h$ }7 \' a: b5 W$ \( f inregs.h.ah = 0x3e; 5 f7 v( Q" e" y! J. w% J inregs.x.bx = handle; & W8 O% V1 ^: V- A( Z intdosx(& inregs, & outregs, & segs); / G. L1 l0 Z( i: \: X# W } ; I+ S& A f8 S, W( ~) L* k' F} . a6 m1 F* p; E7 \! wmain() " g; o! ?# d4 s+ k/ ` V- ]{ : f E2 T! r* R int flag; + K' s; r: z6 g2 J- D7 V, Q flag = count(); / r& B/ N( y/ Z7 L if(flag==0) printf("此软件为试用版,请勿任意修改!\ n"); # W* y/ W) g. l V- a' v: I" A if(flag==1) printf("此软件为试用版,您的试用次数已满!\n"); 7 f. c6 A. {* X* Q if(flag==2) printf("此软件为试用版,欢迎试用!\n"); ' B# \% I3 }) w* U } - s+ i' u3 i: k, h

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-6-14 04:34 , Processed in 0.296158 second(s), 52 queries .

回顶部