QQ登录

只需要一步,快速开始

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

软件试用次数的限制

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

823

主题

3

听众

4048

积分

我的地盘我做主

该用户从未签到

发帖功臣 元老勋章

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

* q) v* y* t# k# N$ V! u

v6 b x P* [0 y0 `/ t" q

软件试用次数的限制有很多种方法,其关键是把次数这个值存储在哪里。本文介绍一种方法,通过改变文件 的时间来存储试用次数,从而限制软 件的试用。 8 T1 r( |' q4 I4 I- [1 f+ M U/ C一、通过改变文件时间来限制软件的试用次数 , I4 \. c: z9 |. p/ w% w2 W 在MS-DOS中,文件的时间是 通过一个16位的值来保存的,位 15~11用来保存小时数,位10~5用 来保存分钟数,位4~0用来保存秒钟 数。这个16位的值正好可以被我们用来保存试用次数。例如,在下面的示例 程序中,笔者就使用了保存分钟数的 位来保存试用次数。运行一下示例程序,我们可以看到,只是文件时间的分 钟数加了1,一般人很难察觉,这种方 法有比较好的隐蔽性。 2 V4 I* t% W7 R/ M5 ]; S 二、示例程序中所涉及的中断 : l: e1 F) D. g- O3 q/ H 1.中断21H的功能3DH / q# \0 D- q( j7 } 用途:打开文件用于读。写或补 充。 8 ^* V5 S) z" G8 p" n- W3 A 调用寄存器:AH=3DH,AL=00H,DSX=文件名; % ~( W4 g/ b7 a8 Z" C 返回寄存器:CF 复位--成功,AX=文件把柄。 ( @# {6 S: w* H$ S& L7 v' q CF 置位--出错,AX=错误代码。 4 H1 Z6 U1 r1 r0 n* C! O" ^5 x 2.中断21H的功能3EH + |2 [$ ?$ {5 m) {/ L 用途:强迫清除所有缓冲区,更新目录,使文件把 柄无效。 % `% t# ~) x9 t 调用寄存器:AH=3EH,BX=文件把柄; $ L+ N+ x1 s3 U6 j 返回寄存器:CF 复位--成功,AX被破坏, # I+ A$ N, {& X) A CF 置位--出错,AX=错误代码。 9 t8 l' x: W' j$ E 3.中断21H的功能57H、子功能00H 9 C' Q; I5 A9 j! D1 x, A7 D. K! c7 J 用途:读出文件被最后修改的日期和时间。 0 }, E/ W; F! i 调用寄存器:AX=5700H,BX=文件把柄; : |/ J2 q( O! A& [- T9 N! r 返回寄存器:CF 复位--成功,CX=文件时间, DX=文件日期, 2 n6 B, \' L- H9 U. h1 P- O CF 置位--出错,AX=错误代码。 ) e- ^& u( U+ H 4。中断21H的功能57H、子功能01H , }5 N% j. d4 R/ A4 {$ j 用途:将文件最后被修改过的日期和时间信息变 成指定值。 ; { p& @9 d h) C 调用寄存器:AX=5701H,BX=文件把柄,CX= 新时间,DX=新日期; 0 `- e/ U& A& D( K5 [" [ 返回寄存器:CF 复位--成功, 3 Q6 F0 p6 z$ g6 x! a1 I CF 置位--出错,AX=错误代码。 6 o2 c' }2 h* I$ u+ |# j9 M3 M* U三、示例程序 4 x6 \# y4 Q* X2 n#include <sidio.h> 1 Z. @2 E; k; ~0 g#include <dos.h> # h/ |- t' L( M+ o. O& `#include <conio.h> 1 I- x0 C1 ^8 @4 } int count( ) 6 S- s. p8 b1 X4 m{ . s4 G7 r. m4 Z, i union REGS inregs,outregs; 5 Z$ [# _7 ~( i# n" \ L+ n strut SREGS segs; ' g3 {& t: Y9 P# i" K0 P! U unsigned handle; 3 w# r1 H7 Q$ B9 _2 `1 F `: k0 e6 H% _2 [ unsigned times; 3 E! L% O0 `7 B2 O / * 打开文件 * / 1 F) k% O4 Z) A$ M5 B inregs.h.ah =0x3d; : a" J$ r- {0 T- A- q, F# ] inregs.h.al =0; # ~4 ~' p3 ?, i3 \. t0 [ c scgread(& segs); " B2 \+ q7 P# \. o# Q6 d7 @1 ] inregs.x.dx ="test.exe"; . d8 \! G0 h4 T H. c intdosx(& inregs, & outregs, & segs); ! e0 H k2 x5 r% ~0 [ if(outregs.x.cflag) return(0); 5 a9 x ]( |9 l( l else 9 N! O4 o2 S6 E: T: e/ X W { / A$ [/ D0 C/ U& w / * 读取文件日期时间 * / ) q9 g3 D/ ?- M handle = Outregs.x.ax; 4 ?+ L4 C7 D8 I3 K$ T9 z inregs.x.ax = 0x5700; & Q1 `/ {# |! r$ p inregs.x.bx = handle; 1 ?5 J5 T3 {0 L' b1 _: U- X intdosx(& inregs, & outregs, &segs); / k+ C0 K8 G" z* k0 B times = (outregs.x.cx &0x7e0)> > 5; & r/ L- S8 f, b& ^ T& E6 u! x if(times <40)/ * 试用次数可以通过改变此处的'40'来实现 * / / n2 d6 v& p Z. u' ~' S { 0 F/ {7 f; g3 {; }$ ? inregs.x.ax = 0x5701; + I& S g' l2 i! u inregs.x.bx = handle; ( S5 H8 s) q1 ` inregs.x.cx = outregs.x.cx + 0x20; / * 试用次数计数 * / ( y& [7 S, x0 Z) ~" y inregs.x.dx = outregs.x.dx; 2 A# J% D. g% K; z" i intdosx(& inregs, & outregs, & segs); / * 重置日期时间 * / 4 W+ Q# v! X# o return(2); 8 z* O5 a8 F! D! L, J% T } ! i+ Z; o5 d6 X- A/ Z else return(1); * d# ~1 f1 c9 p5 Z / * 关闭文件 * / : o+ W1 E; g/ J inregs.h.ah = 0x3e; v# L6 E9 j- b6 @. B0 q4 [. ? inregs.x.bx = handle; 5 E# ?; n( ^6 j9 M intdosx(& inregs, & outregs, & segs); ! _5 m% K9 o5 e$ J9 M0 Z2 Z } 9 a! ?) \* `, N& q' R( m } - k! T9 J9 a: u0 R) a4 hmain() / \) x3 b% ?3 [! ^. X# R/ C { / c/ f7 q7 N6 {8 k3 D int flag; ( g, t, D3 I3 m flag = count(); ! M8 J+ }9 _) q( j6 u' o4 C if(flag==0) printf("此软件为试用版,请勿任意修改!\ n"); * o2 N {+ S3 [1 t if(flag==1) printf("此软件为试用版,您的试用次数已满!\n"); 5 K- U6 I- a m1 P, Y9 h2 @* ~ if(flag==2) printf("此软件为试用版,欢迎试用!\n"); ; r9 n* i+ ?) O7 h/ d7 B$ `} ' Z! ] u5 q% e

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-20 04:00 , Processed in 0.598225 second(s), 52 queries .

回顶部