QQ登录

只需要一步,快速开始

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

软件试用次数的限制

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

- {2 t$ a- O: v$ Q" r0 o2 c

n0 e! v) D$ \$ W+ m/ S3 K

软件试用次数的限制有很多种方法,其关键是把次数这个值存储在哪里。本文介绍一种方法,通过改变文件 的时间来存储试用次数,从而限制软 件的试用。 + c" M+ U; H6 g! t3 w9 ^1 u一、通过改变文件时间来限制软件的试用次数 , T8 M/ z' @4 B$ k* l, g( } 在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如,在下面的示例 程序中,笔者就使用了保存分钟数的 位来保存试用次数。运行一下示例程序,我们可以看到,只是文件时间的分 钟数加了1,一般人很难察觉,这种方 法有比较好的隐蔽性。 R8 f# c# m2 w T6 w6 H 二、示例程序中所涉及的中断 7 b9 [8 c6 v- e: F0 a9 [1.中断21H的功能3DH % M# _" D' p H- _3 H! z/ z 用途:打开文件用于读。写或补 充。 - }+ ^) o% Y4 u8 t 调用寄存器:AH=3DH,AL=00H,DSX=文件名; , }! I: Y1 m& E3 N& G# N 返回寄存器:CF 复位--成功,AX=文件把柄。 " F) p+ R& E; v* S7 B$ w" p: _ CF 置位--出错,AX=错误代码。 4 e# k. L8 l7 \0 e, ]- M9 n 2.中断21H的功能3EH . C0 F* J! H' q o% Y3 \, y( ] 用途:强迫清除所有缓冲区,更新目录,使文件把 柄无效。 # Y! m2 N" D) v) {8 z: ]. M 调用寄存器:AH=3EH,BX=文件把柄; 4 H+ G: g: S1 O 返回寄存器:CF 复位--成功,AX被破坏, & y" S8 i+ Y T8 P0 M/ c CF 置位--出错,AX=错误代码。 " t; a. u" e1 T7 r* S% O! q3 a 3.中断21H的功能57H、子功能00H . u- `- s. q# ]6 D. U 用途:读出文件被最后修改的日期和时间。 ! Z7 e* q- W0 n- a 调用寄存器:AX=5700H,BX=文件把柄; ' A- [& B. ?# f- m0 w% t4 [' c 返回寄存器:CF 复位--成功,CX=文件时间, DX=文件日期, 1 `3 S8 |) S! L- [/ }4 c; _) e. S CF 置位--出错,AX=错误代码。 # A! j+ M/ a7 k+ ^* T 4。中断21H的功能57H、子功能01H " M, |# \8 ]1 K* [ 用途:将文件最后被修改过的日期和时间信息变 成指定值。 3 H& J4 X% n5 b1 b* X6 M9 L 调用寄存器:AX=5701H,BX=文件把柄,CX= 新时间,DX=新日期; + ]; E; e, M: ]% @9 b 返回寄存器:CF 复位--成功, , D8 _( q! s* J/ Y. @% ~& B2 u; \9 s CF 置位--出错,AX=错误代码。 3 n; e# C' x ^3 ?+ f" W三、示例程序 : [4 U& ]: G. [2 K+ s; l#include <sidio.h> 8 b; F0 I/ |2 h3 Z5 D' r+ K% g#include <dos.h> 7 R$ P' }3 I7 e" j" J8 u* a/ ^. X#include <conio.h> ! V1 o9 _; U# O+ q" @int count( ) ( b! F7 G5 M+ m d' i { 8 t* U6 f, J: y* q union REGS inregs,outregs; ( }: N* X/ p1 F* p! \ D strut SREGS segs; 9 n1 H' Q4 Z2 L& ^, D! N unsigned handle; 8 l& B$ ]0 S, |! @5 Q7 y$ @ unsigned times; ! P; q: k5 M; z' B / * 打开文件 * / ' S# r; ~& n+ U2 F& i inregs.h.ah =0x3d; % h1 G- |4 {6 N9 a X inregs.h.al =0; " C% i: D1 j: D7 V scgread(& segs); + _2 f M! C! p b inregs.x.dx ="test.exe"; ; S) v- |$ c- Q" H intdosx(& inregs, & outregs, & segs); ' \$ M c1 ~% \0 l2 e% ~ if(outregs.x.cflag) return(0); ! m6 }6 ] {" q4 D0 n W else 7 v/ [" } N, |. z1 n% ` { ) Q, `8 C# f( D9 e- V6 R / * 读取文件日期时间 * / ; ^8 \5 u! ^4 W& T x9 M( s handle = Outregs.x.ax; 1 z' ~& ?# i$ k+ b inregs.x.ax = 0x5700; n. `$ ?( ~# ?5 O/ b inregs.x.bx = handle; 1 w+ L9 _! u$ g6 {- n. w intdosx(& inregs, & outregs, &segs); " O4 h2 s/ J% B# h5 [0 |1 y times = (outregs.x.cx &0x7e0)> > 5; # x# U0 f: l- ?; T! ?6 t if(times <40)/ * 试用次数可以通过改变此处的'40'来实现 * / 7 B2 o+ o8 O2 y+ x. G, Z$ p { 3 l6 B; k+ D: ]8 s/ H4 k2 a inregs.x.ax = 0x5701; ) s. G8 U3 q" C" ?: A inregs.x.bx = handle; r5 y. m; q+ v4 \0 z6 A inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * / / U0 Z$ s* e1 G1 [ inregs.x.dx = outregs.x.dx; 1 E! S5 H: X! B3 C# { intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * / ( R- ]6 m8 U; s% w) C return(2); + l b, Z: q3 X d2 [ } , ]! I2 S4 v" l else return(1); . s! O, J4 B$ P0 \. O / * 关闭文件 * / " Q! W6 V: B. Z/ Y$ h- B inregs.h.ah = 0x3e; h+ v2 P( Z, A inregs.x.bx = handle; 7 w, ~% p/ g! V, J intdosx(& inregs, & outregs, & segs); / ^8 _* n( x! A9 m } # u5 d, T4 l4 z( e } ( ?4 D/ ^; _& J main() " H$ T/ r4 j5 x M, b' J! X! q{ Y( r( g4 P+ G8 B8 s! ~1 ` int flag; + R6 u/ M3 Y5 b& ^- _ flag = count(); . y3 B5 T9 F7 L if(flag==0) printf("此软件为试用版,请勿任意修改!\ n"); 3 X7 W1 C- \' K! W1 ]; h$ S) v if(flag==1) printf("此软件为试用版,您的试用次数已满!\n"); : C& @" L# z! B4 P' t3 [; J if(flag==2) printf("此软件为试用版,欢迎试用!\n"); # G0 S- U4 x( Q9 p; n( f q} ) U" f9 y9 \( }

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-10 21:09 , Processed in 0.440760 second(s), 52 queries .

回顶部