QQ登录

只需要一步,快速开始

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

软件试用次数的限制

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

( i6 v V- e# c. E3 k

% S7 G! l4 K! c1 v. ~) W

软件试用次数的限制有很多种方法,其关键是把次数这个值存储在哪里。本文介绍一种方法,通过改变文件 的时间来存储试用次数,从而限制软 件的试用。 ! E* [7 `5 E5 B: f一、通过改变文件时间来限制软件的试用次数 ( e- Y' z; ?9 M 在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如,在下面的示例 程序中,笔者就使用了保存分钟数的 位来保存试用次数。运行一下示例程序,我们可以看到,只是文件时间的分 钟数加了1,一般人很难察觉,这种方 法有比较好的隐蔽性。 # u) Z( @0 L+ y l( n, @% U) v 二、示例程序中所涉及的中断 ; `+ r g d$ b1 N" d C: F1.中断21H的功能3DH % b9 r) r6 ~; k5 \7 ^ 用途:打开文件用于读。写或补 充。 3 B. Z; `8 I' e 调用寄存器:AH=3DH,AL=00H,DSX=文件名; 2 S% |1 _2 G' ^7 m4 [ 返回寄存器:CF 复位--成功,AX=文件把柄。 1 Y4 A/ r8 a, q* F$ F9 ?7 i CF 置位--出错,AX=错误代码。 " v2 p' H& S) E' `+ ?4 ^4 n 2.中断21H的功能3EH 8 ~* I! F" O; Y) ^( ]+ G* W: X 用途:强迫清除所有缓冲区,更新目录,使文件把 柄无效。 ( H. A- g1 r8 H# u8 x 调用寄存器:AH=3EH,BX=文件把柄; 3 Y" X3 o: K) J; G) B) r. E; B 返回寄存器:CF 复位--成功,AX被破坏, ( C" x! p& x! I6 s& ^3 ` CF 置位--出错,AX=错误代码。 7 b0 a2 i3 S A+ u 3.中断21H的功能57H、子功能00H 3 i7 T/ U( ~* V4 G, ~5 P 用途:读出文件被最后修改的日期和时间。 6 X6 @2 b: F. z+ I0 D 调用寄存器:AX=5700H,BX=文件把柄; % G5 g% v+ B5 _! l0 |5 R 返回寄存器:CF 复位--成功,CX=文件时间, DX=文件日期, 0 S2 t. [; a ~8 ] CF 置位--出错,AX=错误代码。 % p/ e y/ j9 N3 s. l$ \- F3 P$ |8 L 4。中断21H的功能57H、子功能01H # k- M. O( [: B& S4 F \, G6 e5 N: _ 用途:将文件最后被修改过的日期和时间信息变 成指定值。 , ?3 T# ^: l. D, P% O 调用寄存器:AX=5701H,BX=文件把柄,CX= 新时间,DX=新日期; s; Z' B8 h% L! e( [8 h 返回寄存器:CF 复位--成功, # i4 H9 }' t/ V! U; C9 p0 c+ u; s CF 置位--出错,AX=错误代码。 - o! J) W7 e& B+ G$ B三、示例程序 - n2 U* }+ E5 R3 U& o5 k1 T #include <sidio.h> ! m: K' F9 z4 e+ w) |: h# g# w" U ^ #include <dos.h> 7 }4 W: B# }4 M( T#include <conio.h> ( ]+ q- `- ~9 B3 O int count( ) * |% l$ R; s4 u; h! N{ $ {' \* A: i: N! o U \ union REGS inregs,outregs; . c9 y, @& S- _5 a5 B8 c5 W strut SREGS segs; ' j' }" r! B; l; z+ F unsigned handle; ' P( c' a: K- x2 I5 f) S9 |: d unsigned times; , s2 K3 H+ e% l# O / * 打开文件 * / & d3 E" P% b: h inregs.h.ah =0x3d; . A! _, l0 e) _5 a: q inregs.h.al =0; 0 a* Q% g( ^4 o a- S scgread(& segs); ) f$ E/ p9 _/ Y6 W7 s inregs.x.dx ="test.exe"; 5 ~9 o# m/ g* z, F intdosx(& inregs, & outregs, & segs); % z9 P' b, y& b$ f if(outregs.x.cflag) return(0); + t- U0 M" A" [% q. ? else 4 Z/ s; f% ]0 n1 e8 q { 0 a& |/ _4 D, p2 j9 g+ p$ V / * 读取文件日期时间 * / O; [8 A$ R/ h) x4 N) L handle = Outregs.x.ax; . Z$ j5 P0 L$ l$ w0 N" F6 i inregs.x.ax = 0x5700; $ ~& W* B+ o3 }3 \ inregs.x.bx = handle; ' D2 I& F2 i5 L2 ~& Z intdosx(& inregs, & outregs, &segs); ! w& e7 J% R$ ~$ Z- M2 k times = (outregs.x.cx &0x7e0)> > 5; ! i8 T3 O% B. p+ B4 Z& Q' A" X; m$ Q if(times <40)/ * 试用次数可以通过改变此处的'40'来实现 * / 8 Y" K4 ~6 o! O: ]4 D2 \ { $ n! m i" Z* v9 s' R$ S/ B! h* w$ s' A inregs.x.ax = 0x5701; 5 ^. t3 g( g. e6 h# S5 ^+ s) l# b! V inregs.x.bx = handle; ( Q7 {6 O3 U J+ U- L inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * / ' |- ? P+ P" b% {7 Q* { inregs.x.dx = outregs.x.dx; : e6 j/ A P3 z6 @# q1 G intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * / 2 ?/ X# B5 c0 @4 _1 h return(2); : B! Y* n- M8 m$ I! q2 N1 e6 C- D } - ~8 ]! o* Z& E else return(1); ; X5 e- H( c. F- S$ }9 l$ T" R / * 关闭文件 * / - H$ u: {/ y6 X3 F+ @8 O6 L inregs.h.ah = 0x3e; & A, C1 C% M. ], { inregs.x.bx = handle; * y7 [6 Y2 R+ d, p( | R intdosx(& inregs, & outregs, & segs); 5 F0 \# c6 B3 e( \9 x } 0 T' _) G2 c) p/ e' M } 9 D6 ]! b7 N. M2 z' J! h8 Omain() 9 E3 b3 H/ S& C' \ { : `5 Q) _8 r0 V- i; R3 ~/ ]7 l int flag; , y. {6 i1 y+ p3 K flag = count(); : f) X$ C, x- T$ _* M if(flag==0) printf("此软件为试用版,请勿任意修改!\ n"); ) |4 U0 A& O6 b& { if(flag==1) printf("此软件为试用版,您的试用次数已满!\n"); 1 |: i; g0 V0 Z2 { if(flag==2) printf("此软件为试用版,欢迎试用!\n"); / N; f% g6 A* I3 z3 z e- Z } * B( |; Y' _2 U, p

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-4-18 22:02 , Processed in 0.330183 second(s), 52 queries .

回顶部