博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AutoHotKey实现软件授权
阅读量:5248 次
发布时间:2019-06-14

本文共 4011 字,大约阅读时间需要 13 分钟。

工作需要,限定工具使用日期,同时防止程序拷贝到其它机器上直接使用,故需绑定mac,IP,和授权日期。

基本思路:

1、授权程序,获取mac地址,IP地址,及提供的授权日期等信息,编码后入到注册表中。

2、工具在运行时,获取本机mac,IP地址,及当前日期,与注册表中的内容(取出来后反编码)进行比较。如果mac地址和IP地址均正确,则判断授权日期是否有效。任一项不满足,均不允许软件的使用。

 

简单粗暴,下面直接提供授权程序的源代码:

1 argc = %0%  2 If argc != 1  3 {  4     MsgBox, 16, 系统提示,  提供的参数错误。`n使用格式:SoftAuth.exe YYYY-MM-DD`n例如:SoftAuth.exe 2016-12-31  5     ExitApp  6 }  7 ; 获取参数1  8 arg1 = %1%  9 ;MsgBox, 0, 传递的参数, % arg1 10 ; 判断参数是否为日期格式 11 If IsDate(arg1) = 0 12 { 13     MsgBox, 16, 系统提示,  提供的参数错误。`n使用格式:SoftAuth.exe YYYY-MM-DD`n例如:SoftAuth.exe 2016-12-31 14     ExitApp 15 } 16  17 MacFile := % A_Temp "\Mac.info" 18 IpFile  := % A_Temp "\Ip.info" 19 ;获取mac地址 20 run, %ComSpec% /c ipconfig /all |findstr "物理地址" > %MacFile%, ,hide 21  22 ;获取ip地址 23 run, %ComSpec% /c ipconfig /all |findstr "IPv4" > %IpFile% , ,hide 24  25 ;取出mac+ip 26 StrMac = %A_Space% 27 Loop 28 { 29     FileReadLine, line, %MacFile%, %A_Index% 30     if ErrorLevel 31         break 32     RegExMatch(line,"([0-9A-Fa-f]{2}-){5}[0-9A-Fa-f]{2}", matchMac) 33     StrMac := % StrMac matchMac 34 } 35 StringReplace, NewMac, StrMac, -,, ALL 36  37 StrIp = %A_Space% 38 Loop 39 { 40     FileReadLine, line, %IpFile%, %A_Index% 41     if ErrorLevel 42         break 43     RegExMatch(line,"(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})", matchIp) 44     StrIp := % StrIp matchIp 45 } 46 StringReplace, NewIP, StrIp, -,, ALL 47 StringReplace, NewIP, NewIP, .,, ALL 48  49 ;加上有效日期 50 AllInfo := % NewIP NewMac arg1 51  52 ;对字符串加密 53 加密后串 := % RC4(AllInfo, "har@123") 54 解密后串 := % RC4(加密后串, "har@123") 55  56 ;写注册表 57 RegWrite, REG_SZ, HKCU, Software\Microsoft\HAR, AuthInfo, % 加密后串 58  59 ;读注册表 60 ;RegRead, regvalue, HKCU, Software\Microsoft\HAR, AuthInfo 61 ;解密regvalue := % RC4(regvalue, "har@123") 62  63 ;MsgBox, 64, 读注册表, % "读出串regvalue:" regvalue "`n解密regvalue:`n" 解密regvalue "`n原串:`n" AllInfo 64 ;删除临时文件 65 FileDelete, % MacFile 66 FileDelete, % IpFile 67  68 MsgBox, 64, 系统提示, 软件授权成功。授权日期截止到:%arg1% 69 Return 70  71 ;判断是否为日期格式 72 IsDate(Str) 73 { 74     ;RegExMatch(Str, "(\d{4})-(0\d{1}|1[0-2])-(0\d{1}|[12]\d{1}|3[01])", A) 75     RegExMatch(Str, "(\d{4}-\d{2}-\d{2})", A) 76     Return ( A = Str) 77 } 78  79  80 ;___RC4 Encryption by Rajat__________字符串加密算 81 ;使用!----------------------- 82 ;密文 := RC4(原文,密钥)  83 ;解密 := RC4(密文,密钥)  84 RC4(RC4Data,RC4Pass)  85 {  86     global RC4Result  87     ATrim = %A_AutoTrim%  88     AutoTrim, Off  89     BLines = %A_BatchLines%  90     SetBatchLines, -1  91     StringLen, RC4PassLen, RC4Pass  92     Loop, 256  93       {  94         a := A_Index - 1  95         Transform, ModVal, Mod, %a%, %RC4PassLen%  96         ModVal ++  97         StringMid, C, RC4Pass, %ModVal%, 1  98         Transform, AscVar, Asc, %C%  99         Key%a% = %AscVar% 100         sBox%a% = %a% 101       } 102     b = 0 103     Loop, 256 104       { 105         a := A_Index - 1 106         TempVar := b + sBox%a% + Key%a% 107         Transform, b, Mod, %TempVar%, 256 108         T := sBox%a% 109         sBox%a% := sBox%b% 110         sBox%b% = %T% 111       } 112     StringLen, DataLen, RC4Data 113     RC4Result = 114     i = 0 115     j = 0 116     Loop, %DataLen% 117       { 118         TmpVar := i + 1 119         Transform, i, Mod, %TmpVar%, 256 120         TmpVar := sBox%i% + j 121         Transform, j, Mod, %TmpVar%, 256 122         TmpVar := sBox%i% + sBox%j% 123         Transform, TmpVar2, Mod, %TmpVar%, 256 124         k := sBox%TmpVar2% 125         StringMid, TmpVar, RC4Data, %A_Index%, 1 126         Transform, AscVar, Asc, %TmpVar% 127         Transform, C, BitXOr, %AscVar%, %k% 128         IfEqual, C, 0 129             C = %k% 130         Transform, ChrVar, Chr, %C% 131         RC4Result = %RC4Result%%ChrVar% 132       } 133     AutoTrim, %ATrim% 134     SetBatchLines, %BLines% 135     Return RC4Result 136 } 137 ;___RC4 Encryption by Rajat_____________________________________

 工具运行时,只需从注册表中获取注册信息,进行反编码后解析,并验证即可(授权程序中有相应的源代码,可拷贝下来重复使用来达到目的)。

 

转载于:https://www.cnblogs.com/zyxlsh/p/5796390.html

你可能感兴趣的文章
桥接模式-Bridge(Java实现)
查看>>
303. Range Sum Query - Immutable
查看>>
【★】浅谈计算机与随机数
查看>>
C# Dynamic通用反序列化Json类型并遍历属性比较
查看>>
前台freemark获取后台的值
查看>>
Leetcode: Unique Binary Search Trees II
查看>>
C++ FFLIB 之FFDB: 使用 Mysql&Sqlite 实现CRUD
查看>>
Spring-hibernate整合
查看>>
c++ map
查看>>
exit和return的区别
查看>>
Django 相关
查看>>
比较安全的获取站点更目录
查看>>
UVA11374 Airport Express
查看>>
读书汇总贴
查看>>
空间分析开源库GEOS
查看>>
RQNOJ八月赛
查看>>
前端各种mate积累
查看>>
Python(软件目录结构规范)
查看>>
Windows多线程入门のCreateThread与_beginthreadex本质区别(转)
查看>>
Nginx配置文件(nginx.conf)配置详解1
查看>>