QQ登录

只需要一步,快速开始

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

软件试用次数的限制

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

+ b( e* |' `) a% b; s

0 K+ q3 t9 {* U( g% Y3 s: H

软件试用次数的限制有很多种方法,其关键是把次数这个值存储在哪里。本文介绍一种方法,通过改变文件 的时间来存储试用次数,从而限制软 件的试用。 6 _. k* x& T& F' S3 x8 _4 u 一、通过改变文件时间来限制软件的试用次数 9 t* V+ H( H- L% H 在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如,在下面的示例 程序中,笔者就使用了保存分钟数的 位来保存试用次数。运行一下示例程序,我们可以看到,只是文件时间的分 钟数加了1,一般人很难察觉,这种方 法有比较好的隐蔽性。 + z! X- R6 c6 @( d c二、示例程序中所涉及的中断 * W0 j; I n" n* _" y; s1.中断21H的功能3DH + |3 v% C2 w2 b5 }5 J! S) c 用途:打开文件用于读。写或补 充。 ( ^1 ~7 H! a, B+ v 调用寄存器:AH=3DH,AL=00H,DSX=文件名; * a. B f2 G/ v 返回寄存器:CF 复位--成功,AX=文件把柄。 7 f9 T5 \* ^6 e4 H# ] CF 置位--出错,AX=错误代码。 8 _0 k( o2 \( [$ m9 z4 v; h 2.中断21H的功能3EH $ c# O2 S8 f) J" Z 用途:强迫清除所有缓冲区,更新目录,使文件把 柄无效。 * I5 Y( p4 E v) r 调用寄存器:AH=3EH,BX=文件把柄; 8 b) C- U8 x: y- ^, Z( k 返回寄存器:CF 复位--成功,AX被破坏, 1 u7 u A5 K8 k5 n1 g j CF 置位--出错,AX=错误代码。 # N' y/ Z- V, C8 s 3.中断21H的功能57H、子功能00H 5 |! R8 d- o- s4 T7 T: [ 用途:读出文件被最后修改的日期和时间。 ( g2 ]! f' R; W# x& } 调用寄存器:AX=5700H,BX=文件把柄; 6 u1 @$ ?! q$ b. w5 `2 R9 e 返回寄存器:CF 复位--成功,CX=文件时间, DX=文件日期, 2 J& n9 [' Y0 q CF 置位--出错,AX=错误代码。 : _7 J% {1 e8 w' @ 4。中断21H的功能57H、子功能01H ( U, R% P8 l; g' w* I 用途:将文件最后被修改过的日期和时间信息变 成指定值。 " g1 k- c8 F6 S& M4 o 调用寄存器:AX=5701H,BX=文件把柄,CX= 新时间,DX=新日期; 8 S' E) Y$ {4 [# `9 v 返回寄存器:CF 复位--成功, 6 Q0 K. D1 p- M4 w! {! l9 T4 D" w CF 置位--出错,AX=错误代码。 ! ]) T& ^* I6 E) n. G( `7 s, W0 ^* C 三、示例程序 - X7 L* M7 I$ X6 c5 A #include <sidio.h> 4 x' J( L$ X; C0 k$ ?, d6 `$ N #include <dos.h> 7 F+ |% K- O5 X#include <conio.h> * u& |# R9 G7 Z& H8 ?* `2 a& B int count( ) / a3 ~, N! k5 M4 K2 o { % j7 ]2 Y$ k2 u9 { union REGS inregs,outregs; 9 ^: e" @: A5 l! {8 W9 v: @ strut SREGS segs; " S! `3 U* D. @+ U: C) e unsigned handle; - O" W: B E9 a4 b3 T, j unsigned times; 2 e6 z( B4 M& N2 ~- q- p% { / * 打开文件 * / % u' e* u+ r1 a inregs.h.ah =0x3d; - }) X9 h2 Q3 g+ i j4 B Q4 Y4 O inregs.h.al =0; ! d/ S7 i8 x" `% ` scgread(& segs); 7 b; R0 k8 V& V/ ` j* X K inregs.x.dx ="test.exe"; & x3 ]6 S, ]9 i, w% o* h! ` intdosx(& inregs, & outregs, & segs); 5 Y0 u0 w6 M$ A5 ?8 S if(outregs.x.cflag) return(0); . ^% d$ p5 O' n4 m else ; W; P6 R5 O3 N5 c/ Q { 1 }2 `* `, P/ m# e / * 读取文件日期时间 * / 5 _4 s! j1 d! Y B5 v handle = Outregs.x.ax; - L2 {5 r0 K! E inregs.x.ax = 0x5700; 7 m5 B0 z6 L9 Z8 B" T: | inregs.x.bx = handle; , ]5 |' Y) x8 S# @/ d4 Q intdosx(& inregs, & outregs, &segs); + i6 ^; H: Y4 V x9 E times = (outregs.x.cx &0x7e0)> > 5; . E3 u5 R$ z& J3 ]( h& _; W. ? if(times <40)/ * 试用次数可以通过改变此处的'40'来实现 * / : {0 q7 G# O, q" f- c$ n { & J6 z& K1 ~4 w inregs.x.ax = 0x5701; ' A& H! ?" y# x9 r inregs.x.bx = handle; 4 e9 ]: G0 ~2 M inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * / $ A* E% D$ \' M0 e9 [4 N8 L inregs.x.dx = outregs.x.dx; " b) R+ [; L* E3 a: S, V intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * / 0 K( @( F% J( o( G, r. q return(2); " ?9 X' q9 p4 a: u% K5 u \9 { } % [7 X# W A# R& |. A0 A else return(1); 3 M4 K$ v8 ]- V8 }: l Z / * 关闭文件 * / 5 {5 Z8 D1 A, `: H7 d inregs.h.ah = 0x3e; 8 G6 O+ S$ ^+ j4 V3 e inregs.x.bx = handle; f9 S: o2 r$ M+ I4 u intdosx(& inregs, & outregs, & segs); % J, Y5 [5 E6 x, k& E } 2 y: j1 k+ U6 S5 S1 | } 2 L5 p8 ~1 R8 o1 y/ I; b# k+ Cmain() * b+ Q; v/ i2 j2 I. `' N i { 9 u6 ] c' R( p6 d. a4 e int flag; 3 h$ o" s0 J1 C i flag = count(); 3 @. ]& M! |; p6 r2 j `" K if(flag==0) printf("此软件为试用版,请勿任意修改!\ n"); # v: }6 h0 A0 q ?# E& T if(flag==1) printf("此软件为试用版,您的试用次数已满!\n"); 1 s! B* H9 ~# h* T3 G if(flag==2) printf("此软件为试用版,欢迎试用!\n"); ! R" g, @) `2 w: M j# J6 Q} - h4 U1 c' @( L5 ~3 n

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 12:07 , Processed in 0.388678 second(s), 52 queries .

回顶部