# 完美永久免费使用MyBase——Windows+*nix
> `MyBase`是啥就不多说了,知道的人自然知道,不知道的人一般也没必要知道……
注意,我写的是“完美永久免费使用”而非破解。一是技术上还不到直接对可执行文件动刀子的程度,二是针对个人文档库这种性命攸关的数据,我相信还是用未经魔改的程序来操作更安全。`MyBase`里面可能积累着你几年的工作成果,泄露了可能未必有人感兴趣,但若出现文件损坏之类的事情,那真是叫天天不应。
废话至此为止。`MyBase`作为著名良心软件,认证机制也是十分宽松,提供了三十天全功能免费试用,而且这三十天的计时方式颇有愿者上钩的意思:主要是在可执行文件旁边的`myBase.ini`文件中,用`App.UserLic.FirstUseOn=1535716238`项目记录了一个`unix`时间戳。只要每次开启软件前将这个条目改为当前时间稍微早一点点的时间戳,即可实现永久免费使用。
当然这个办法比较麻烦,也许是官网留着筛选时间很值钱的用户的方法?不过我们完全可以用一个脚本,每次启动前自动修改文件嘛。
关于脚本,网上的参考教程其实比较多,但都是仅关注了`App.UserLic.FirstUseOn=1535716238`一项,实际上还有额外两个项目:`App.UserLic.LaunchNum=`记录软件开启的次数,`App.UserLic.SecsUsed=`记录软件开启的总时间,这俩货应该也会在验证中起作用。你说你总共打开了一万次,使用总时间一亿秒,却声称软件是一分钟前安装的,谁信啊。所以本文提供的脚本把这几个项目也一并修改了。经自用数月,未发现异常。
# Windows
对于`Windows`用户,可以使用以下`Python`脚本:
import time
import os
from subprocess import Popen
# fix as need
configFilePath="C:\\Users\\metor\\AppData\\Local\\wjjsoft\\nyfedit7\\myBase.ini"
exePath="C:\\Users\\metor\\AppData\\Local\\wjjsoft\\nyfedit7\\myBase.exe"
crackLineHeader1 = "App.UserLic.FirstUseOn="
newContent1 = crackLineHeader1 + str(int(time.time()) - 3600) + "\n"
crackLineHeader2 ="App.UserLic.LaunchNum="
newContent2 = crackLineHeader2 + "4\n"
crackLineHeader3 = "App.UserLic.SecsUsed="
newContent3 = crackLineHeader3 + "1216\n"
# 1216 is the birthday of my girl
with open(configFilePath, 'r') as f:
lines = f.readlines()
for i in range(len(lines)):
if lines[i].startswith(crackLineHeader1):
lines[i] = newContent1
if lines[i].startswith(crackLineHeader2):
lines[i] = newContent2
if lines[i].startswith(crackLineHeader3):
lines[i] = newContent3
with open(configFilePath, 'w') as f:
f.writelines(lines)
f.close()
Popen(exePath)
将上面脚本随便另存个文件,比如`C:\APP\myBaseLauncher.py`,将里面的`configFilePath`和`exePath`修改为跟你的实际情况相符。然后安装`Python`,在桌面新建快捷方式,命令为(`Python`路径不一样的自己修改):
C:\Users\xxxx\AppData\Local\Programs\Python\Python37\python.exe C:\APP\myBaseLauncher.py
以后要用`MyBase`时就双击此快捷方式,永远都是试用期还剩30天!强迫症如我还修改了快捷方式图标,图标路径就是`MyBase.exe`文件,如图:
{{:windows:tools:custommybaseshortcut.png?direct&600|自己加的MyBase快捷方式}}
# *nix
之前我还写过一个`Mac`版的永久试用启动器。由于`Mac`下的`Bash`脚本稍微好用点,就直接写了`Bash`脚本,免去了调用`Python`的麻烦。理论上,`Linux`系统也可以直接用。这俩系统下如何新建**替身/启动器**什么的就不多讲了。
#!/bin/bash
MyBaseIniFile='/Users/metorm/.myBase7.ini'
MyBaseExeFile='/Applications/myBase.app'
TimeStamp=$(date +%s)
SecondsToMinus=7200 # 2 hours earlier
let TimeStamp=($TimeStamp-$SecondsToMinus)
HeaderToReplace1="App.UserLic.Extended="
HeaderToReplace2="App.UserLic.FirstUseOn="
HeaderToReplace3="App.UserLic.LaunchNum="
HeaderToReplace4="App.UserLic.NagNum="
HeaderToReplace5="App.UserLic.SecsUsed="
sedCommand1="s/"$HeaderToReplace1"[0-9]*/"$HeaderToReplace1"0/g"
sedCommand2="s/"$HeaderToReplace2"[0-9]*/"$HeaderToReplace2$TimeStamp"/g"
sedCommand3="s/"$HeaderToReplace3"[0-9]*/"$HeaderToReplace3"4/g"
sedCommand4="s/"$HeaderToReplace4"[0-9]*/"$HeaderToReplace4"0/g"
sedCommand5="s/"$HeaderToReplace5"[0-9]*/"$HeaderToReplace5"1216/g"
sedCommand=$sedCommand1';'$sedCommand2';'$sedCommand3';'$sedCommand4';'$sedCommand5
sed -i "" $sedCommand $MyBaseIniFile
open $MyBaseExeFile
可以发现,Linux版额外多替换了几个项目,不过那几个貌似不动它也都是零,在`Windows`版里面就懒得做了。