最近做实验,老师沿往年方案布置使用OPENTRACK列车仿真软件进行仿真实验。这软件要授权,而且授权费不便宜。因此,只有实验室的几台电脑可以用上正版。
传统的解决方案:32位的虚拟机安装这个软件,并使用老师给的安装包,利用32位保存的漏洞保存实验数据。
但实际使用时,我发现即使是32位系统也依旧无法完成数据保存: 
即CTRL+S等功能不能使用。(按下会有报错音)
同时,新建自定义引擎(Engine)无法保存,在自定义的Train中无法调用新建的引擎。
32位的window压根不设防,很方便对程序进行反编译和断点,

纯正的味道😝,根本没混淆。甚至还是debug模式编译,符号表齐全,函数名是明文。

也是很正确的找到了程序入口点,也没有异常代码。确认没壳无疑了。
既然软件启动时提示NOT Licensed
那么显示这段文字时,对应的ascii码的二进制就应该被压入寄存器,校验判断的代码就在函数。对这段字符ASCII码的二进制查找,找到很多出处代码段。
一个个下断点后,找到了打开软件时执行的判断函数名称:isLicensed -> isBlockedLicensed->ismac64....
跳转很多,但分不出哪个是检查落点。
不管了,直接将isLicensed结果取反,结果:

不仅功能用不了,甚至打不开了😢。此次尝试宣告失败。
转变思路找Registration ,尝试在注册环节修改,使其用错误的密钥也能成功注册。果不其然,注册环节十分简单,在找了几十条入栈的字符串,断点测试相关代码后,在OTController registration OKpressed Master函数调用下找到了注册相关的代码,发现注册按钮按下后(地址005A4080),完成校验的校验值放在于指向栈帧的底部的基址寄存器ebp下,然后使用了一个cmp byte指令[ebp-0x4]是否为0x01.

对这条指令进行修改,使校验结果位为0x00。
打包可执行文件进行验证。随意输入验证码进行注册后:

注册成功。但是程序应该是启动校验,功能还是用不了,懒得找执行启动校验的程序了。直接关闭软件重新打开。

至此,解锁所有功能。
将可执行文件放到64位机子上,也能够成功完成注册。
如果有基于学习用途等非商业需求,可以尝试参考上述步骤。