AutoHotKey实现软件授权

工作需要,限定工具使用日期,同时防止程序拷贝到其它机器上直接使用,故需绑定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_____________________________________ 

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

 

posted @ 2016-08-22 17:29  Tiger.liang  阅读(1778)  评论(0编辑  收藏  举报