BakoMa Tex可以实时预览Tex编译出的pdf,也可以通过修改预览的结果,反过来影响Tex源码,这个功能是十分有用的。目前官网(http://bakoma-tex.com/menu/download.php)上能找到的最新版是11.80,发布于2018年10月18日,有较长时间未更新了。这个版本不支持中文,中文在预览区无法显示,而且只要中文夹杂了英文,在源码区的中文还会重叠显示,光标也无法正确定位。我把软件的各个和编码有关的设置都修改过,也不能解决中文的问题。所以,BakoMa目前只能拿来写英文论文了。
接下来讲解如何实现无限试用。安装后启动,会出现如下输注册码的窗口,
注意上面的最后一段话,尤其是结尾的ISN = 262721426。Installation Serial Number /ISN/ may be required for some kinds of licenses at payment processing. Your installation of BaKoMa TeX has ISN = 262721426. 底部显示了剩余的试用期,直接点Apply会报注册码unsuitable的错误,点击Evaluate则会联网下载一个试用的License. 既然要联网下载,那么很自然地会好奇:如果在断网的情况下点击Evaluate,会出现什么情况呢?
必然会报无法下载试用许可证文件的错误,但竟然连下载地址都给我们展示了。那肯定要把这个地址扔到浏览器的地址栏里,把文件下载了看看。结果这个地址居然无法访问,我之前确实成功下载过许可证文件,怎么就无法访问呢?于是拿出Fiddler进行网络抓包,马上就找到了原因。
原来它分别向.net和.com两个域名发起了下载请求,bakoma-tex.net无法访问,而bakoma-tex.com是可以正常访问的。下载的文件内容如下:
Windows Registry Editor Version 5.00 [HKEY_CURRENT_USER\Software\BaKoMa\Keys] Deprecated: Function split() is deprecated in /storage/content/70/1008570/bakoma-tex.com/public_html/menu/user-keys.php on line 35 "Request"="3E7DDDE-21D4-3E7A132-2FCA-D0F1-77F4" "Server"="bakoma-tex.com" "ReqID"="262721426" "ISN"="262721426" "ISN64"="262721426" "ViD"="6929" "Status"="0" "Message"="Success" "Count"="29.333333333333" @="701578c1-fe4a4939-41596a5d-c07703cd"这是可以导入Windows注册表的文件,"Count"="29.333333333333"应该就是指试用30天,(在注册表中把Count改成一个更大的数并没有用,不能增加试用时间),最后一项可能就是试用注册码。换一台电脑(虚拟机)下载试用许可证文件看看:
"Request"="3E7CF7F-4DB3-3E7D615-BB1E-E538-4954" "Server"="bakoma-tex.com" "ReqID"="490000303" "ISN"="490000303" "ISN64"="490000303" "ViD"="6929" "Status"="0" "Message"="Success" "Count"="29.333333333333" @="4fef0bed-fb71ec99-673525ed-e6fad68d"已经能看出一些规律了,Server、ViD、Status、Message、Count这5项对不同电脑都一样,Request、ReqID=ISN=ISN64、@这几项不一样。Request由5个“-”分成6段,第一段和第三段的开头都是3E7,如果去掉3E7,那么6段都是4个16进制位了(CF7F-4DB3-D615-BB1E-E538-4954)。首先想到的是尝试随意修改Request(3E7还是保留),看能否成功下载许可证文件,结果如下
"Status"="3" "Message"="inconsistent request"看来不是随便改改就能搞得定的,服务器会对Request进行校验,不符合预设规则就不生成许可证文件。那我们再猜一猜,ISN会根据电脑的什么信息生成呢?比如CPU、硬盘、主板、网卡的序列号,先找个小软件改改硬盘序列号呗。
运气很好,在虚拟机中修改硬盘序列号后,ISN由490000303变成了103180492,然后就有新的Request,可以下载新的试用许可证文件了,又能获得30天的试用期了。另外,用IDA或者OllyDbg打开安装路径下的texword.exe,能在其中找到对GetVolumeInformationA的调用。BakoMa是用wxWidgets开发的,弹出提示对话框的API是wxMessageBox.
所以,无限试用的方法就是,在前一次试用期结束之后,用软件修改硬盘序列号(需要管理员身份运行才能修改),在注册表中删去HKEY_CURRENT_USER\Software\BaKoMa\Keys这一项,然后启动Bakoma,点击Evaluate重新下载许可证文件,就又能获得30天试用期。