QQ登录

只需要一步,快速开始

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

软件试用次数的限制

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

h5 y: {) N( p$ ]2 Y

/ Z$ t+ p. Q* T0 j& Y5 Y

软件试用次数的限制有很多种方法,其关键是把次数这个值存储在哪里。本文介绍一种方法,通过改变文件 的时间来存储试用次数,从而限制软 件的试用。 w' e, {3 S1 ?! O: Z* h 一、通过改变文件时间来限制软件的试用次数 5 R' y# ~& H1 f8 ~ 在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如,在下面的示例 程序中,笔者就使用了保存分钟数的 位来保存试用次数。运行一下示例程序,我们可以看到,只是文件时间的分 钟数加了1,一般人很难察觉,这种方 法有比较好的隐蔽性。 . P; \9 l6 q6 n* y2 @1 H3 B( A1 [二、示例程序中所涉及的中断 2 o, O" ?+ ~: O1.中断21H的功能3DH 3 U- v4 d; c! u8 i# J! P 用途:打开文件用于读。写或补 充。 , b9 q' ]; `& v! O Q; u" k 调用寄存器:AH=3DH,AL=00H,DSX=文件名; e* G. X# l* c& _4 p1 C 返回寄存器:CF 复位--成功,AX=文件把柄。 P; h- Y5 z; R( X/ k$ a0 |: V CF 置位--出错,AX=错误代码。 + u) L5 r8 i7 P; Q0 Z( r# h# f 2.中断21H的功能3EH . A% Y& ^* S3 g6 Q, i 用途:强迫清除所有缓冲区,更新目录,使文件把 柄无效。 " ^7 C3 M9 Q& Y- G" } 调用寄存器:AH=3EH,BX=文件把柄; 3 t4 p `$ \ Q; f" ^+ O$ ~ }, `; t 返回寄存器:CF 复位--成功,AX被破坏, + |0 i" X6 X: W3 U0 d- x7 O CF 置位--出错,AX=错误代码。 d& a2 D" [/ {5 q( U 3.中断21H的功能57H、子功能00H 9 F$ s! q0 F& P, P7 C 用途:读出文件被最后修改的日期和时间。 1 J& |' n8 ] h$ x 调用寄存器:AX=5700H,BX=文件把柄; ! W$ X. e5 j$ j6 Y+ k 返回寄存器:CF 复位--成功,CX=文件时间, DX=文件日期, 8 L5 Q5 X' G0 v( x# K: A CF 置位--出错,AX=错误代码。 4 Q( F+ e3 m, F+ ]" W4 D 4。中断21H的功能57H、子功能01H * w. @+ d4 b5 c 用途:将文件最后被修改过的日期和时间信息变 成指定值。 0 P# h- q& C3 A. u! p3 T" N6 l 调用寄存器:AX=5701H,BX=文件把柄,CX= 新时间,DX=新日期; 9 d: |# X1 @: i B1 j 返回寄存器:CF 复位--成功, ; q% K! x7 C+ S' q/ a CF 置位--出错,AX=错误代码。 * j; `) x* h" g) q7 v/ J0 ~ 三、示例程序 3 ~) Z- Q J' v #include <sidio.h> 7 V( x5 b& D7 T+ y7 E4 w; o" P #include <dos.h> 3 [) R9 j. G3 k) g. s/ Z7 M#include <conio.h> ; X y& N% Z z1 U! z; q7 _( ~ int count( ) ! v: y3 v8 |' ^* C5 r { / T \$ D# S' J, c union REGS inregs,outregs; # V/ @% u, C7 ?! S3 y; P/ b4 N5 } strut SREGS segs; * K7 Q! ~. x4 V6 K unsigned handle; 2 M$ U ?7 k1 }# n& Z unsigned times; % [0 y* g2 S) Z- X7 Y / * 打开文件 * / 5 I9 ]& G0 O/ v( V' j+ Q$ T inregs.h.ah =0x3d; $ j, u- I4 v, x( c inregs.h.al =0; % F3 ?2 x4 Y$ p+ w) j scgread(& segs); ) O1 Y' R& H* W( E" f0 n inregs.x.dx ="test.exe"; - b" u7 t$ z' ^' b9 a& O! L3 E intdosx(& inregs, & outregs, & segs); 6 z# e# l/ j# r4 A1 G if(outregs.x.cflag) return(0); . ]! z: N' C @, v5 f8 G1 h else 9 j, u2 |( p7 }5 K3 D) D { ; u4 b2 _: N2 h0 k! z; q1 V. x3 z+ O / * 读取文件日期时间 * / 0 p: Y/ d* Z6 @5 C5 ?% x- q( \ handle = Outregs.x.ax; ; @' @( P+ t. w, O/ W0 o# q inregs.x.ax = 0x5700; & ]0 t/ o+ A, i$ I: z4 P1 B5 O9 E inregs.x.bx = handle; % C! J, y' {4 d9 S# d$ Q7 i intdosx(& inregs, & outregs, &segs); S! n- _/ c7 E3 ~ times = (outregs.x.cx &0x7e0)> > 5; # x4 z' a, i2 A/ C if(times <40)/ * 试用次数可以通过改变此处的'40'来实现 * / - e/ w1 Z0 z) X# E9 H; x) g* x { w! K6 p& B2 G/ O3 E inregs.x.ax = 0x5701; . l4 D. h) ?0 w inregs.x.bx = handle; ( d5 e1 N4 W9 A+ n, H8 B inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * / $ c, ~/ H' r+ H7 P5 d, S inregs.x.dx = outregs.x.dx; & K$ C. M7 p; h0 @2 J+ |8 f* W- F, T intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * / - m5 B8 q; n9 V& c4 r' J# ?6 v return(2); 6 `9 I7 t/ @# U3 t } 8 E' y6 {2 h) H0 V" `/ G else return(1); - K. m8 N/ v* ^4 J / * 关闭文件 * / + j w8 Z# I& T7 D. S inregs.h.ah = 0x3e; , i) H! L4 M0 h Z% o/ a; J; B inregs.x.bx = handle; 6 E& r t9 F7 x ^. x intdosx(& inregs, & outregs, & segs); ( \( Q3 h' h1 E- T4 [7 n } / ?8 `5 L; h! X& O) R} , _* D" p2 F8 h4 F8 W9 n( ymain() 8 D/ c* D9 u5 T& h' Y0 q& ^{ 2 G T P% q/ D: p9 g( n' K/ N/ X int flag; . x' U$ l r+ ]0 U flag = count(); " `1 H' Q z: y if(flag==0) printf("此软件为试用版,请勿任意修改!\ n"); $ L& L" n* L1 l1 C+ w if(flag==1) printf("此软件为试用版,您的试用次数已满!\n"); 5 k! ?2 d& h% j if(flag==2) printf("此软件为试用版,欢迎试用!\n"); 2 U) [: K# b7 I; I8 X) W- c} 7 T7 |* q% W- T# O ~. V$ J

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-12 00:42 , Processed in 0.413253 second(s), 51 queries .

回顶部