“Player.exe/zh”的版本间的差异
小 |
|||
(未显示2个用户的2个中间版本) | |||
第4行: | 第4行: | ||
包括 {{zh|Startup.exe}} 在内的所有 Ballance 启动器皆为通过运行 Player.exe 而启动 Ballance。即使游戏未经正常安装而导致缺乏[[注册表参数|相关的注册表数据]](导致 Startup.exe 无法启动游戏),通过运行 Player.exe 也能直接将 Ballance 启动。同理,调整 Ballance 的兼容性等设置,也需要直接调节 Player.exe。 | 包括 {{zh|Startup.exe}} 在内的所有 Ballance 启动器皆为通过运行 Player.exe 而启动 Ballance。即使游戏未经正常安装而导致缺乏[[注册表参数|相关的注册表数据]](导致 Startup.exe 无法启动游戏),通过运行 Player.exe 也能直接将 Ballance 启动。同理,调整 Ballance 的兼容性等设置,也需要直接调节 Player.exe。 | ||
+ | |||
+ | == 版本 == | ||
就目前而言,Player.exe具有2个不同的版本: | 就目前而言,Player.exe具有2个不同的版本: | ||
第10行: | 第12行: | ||
* 修改版:{{FileProperty|hashName=SHA256|hashData=95A029844BF1DEF8164ABA7E77B2CC3A6816E03BD953451CDA5B9B64CAE2189C}} | * 修改版:{{FileProperty|hashName=SHA256|hashData=95A029844BF1DEF8164ABA7E77B2CC3A6816E03BD953451CDA5B9B64CAE2189C}} | ||
− | 而究其原因,是文件中文件偏移<code>0x11F0</code>处2个连续的字节被替换,从原版的<code>0xEB 0X71</code>被替换为<code>0X77 0X22</code>。通过IDA进一步逆向之后发现:原版中的跳转语句<code>ja short loc_401214</code>被修改为<code>jmp short loc_401263</code>。而此举正好屏蔽了Player. | + | 而究其原因,是文件中文件偏移<code>0x11F0</code>处2个连续的字节被替换,从原版的<code>0xEB 0X71</code>被替换为<code>0X77 0X22</code>。通过IDA进一步逆向之后发现:原版中的跳转语句<code>ja short loc_401214</code>被修改为<code>jmp short loc_401263</code>。而此举正好屏蔽了Player.exe中的一个重要操作:检测Ballance光盘是否插入。这非常明显是一位软件破解者所作的,原因如下: |
* 修改程度如此之小,不应当是官方重新编译源代码的结果,因为破解软件向来以最小的代价达成最大的目的为优。 | * 修改程度如此之小,不应当是官方重新编译源代码的结果,因为破解软件向来以最小的代价达成最大的目的为优。 | ||
第16行: | 第18行: | ||
* 如果你熟悉破解软件,那么你应当非常熟悉上述的跳转语句修改,因为那就是破解软件最常用的方法。 | * 如果你熟悉破解软件,那么你应当非常熟悉上述的跳转语句修改,因为那就是破解软件最常用的方法。 | ||
− | 目前全球流通的Ballance中,几乎所有的Player. | + | 目前全球流通的Ballance中,几乎所有的Player.exe都是修改版,我们不知道是谁修改了它,但是这种修改的确让Ballance被更多人玩了。目前已知,至少在2005年1月,这种版本已经开始传播。对于原版Player.exe,如果在启动时不插入光盘,那么其会弹出一个窗口要求你插入光盘,从而拒绝启动。检测的原理是检测系统中是否有一个名为Ballance的,类型为光驱的磁盘编号。对于是否会读取里面的内容,尚待探究。 |
+ | |||
+ | == 调试卡顿 == | ||
+ | |||
+ | 在Windows中对Player.exe附加调试器进行调试时,若暂停调试,则可能会发生鼠标移动卡顿的情况,极大地影响了调试的便利性。据chirs241097推测,可能是某些Callback(回调)或同步对象等未注销。后经过Swung 0x48的查找,chirs241097的实践验证,得出可能是因为Ballance通过调用<code>SetWindowsHookEx(WH_KEYBOARD_LL, ...)</code>使用了一个底层的键盘Hook,所有键盘鼠标操作均需要通过Ballance所创建的回调处理,而此使Ballance被调试器暂停,无法得到处理,因此Windows在等待默认时间的超时后,取消处理,最终造成了卡顿。 | ||
+ | |||
+ | 解决方案<ref>https://stackoverflow.com/a/64018775</ref>则是打开注册表编辑器,转到<code>HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout</code>(值为DWORD类型),将其改为1即可。此数值代表了之前所说的超时等待时间,单位为毫秒。 | ||
+ | |||
+ | == 参考 == | ||
+ | |||
+ | <references /> | ||
{{游戏文件}} | {{游戏文件}} |
2024年1月23日 (二) 09:27的最新版本
不完善的条目 | ||
---|---|---|
Player.exe 是位于 Bin 目录下的 Ballance 游戏文件,起到实际运行游戏的作用。
包括 Startup.exe 在内的所有 Ballance 启动器皆为通过运行 Player.exe 而启动 Ballance。即使游戏未经正常安装而导致缺乏相关的注册表数据(导致 Startup.exe 无法启动游戏),通过运行 Player.exe 也能直接将 Ballance 启动。同理,调整 Ballance 的兼容性等设置,也需要直接调节 Player.exe。
版本
就目前而言,Player.exe具有2个不同的版本:
- 原版:SHA256: 7EA69DB3FE1EF1E3365A0C4EE41F492DEFAB05FB6AB2DF38E2E96E3006962ACB
- 修改版:SHA256: 95A029844BF1DEF8164ABA7E77B2CC3A6816E03BD953451CDA5B9B64CAE2189C
而究其原因,是文件中文件偏移0x11F0
处2个连续的字节被替换,从原版的0xEB 0X71
被替换为0X77 0X22
。通过IDA进一步逆向之后发现:原版中的跳转语句ja short loc_401214
被修改为jmp short loc_401263
。而此举正好屏蔽了Player.exe中的一个重要操作:检测Ballance光盘是否插入。这非常明显是一位软件破解者所作的,原因如下:
- 修改程度如此之小,不应当是官方重新编译源代码的结果,因为破解软件向来以最小的代价达成最大的目的为优。
- 如果重新编译,那么被跳过的光盘检测功能应当被编译器优化掉,而不是用跳转语句跳过它。
- 如果你熟悉破解软件,那么你应当非常熟悉上述的跳转语句修改,因为那就是破解软件最常用的方法。
目前全球流通的Ballance中,几乎所有的Player.exe都是修改版,我们不知道是谁修改了它,但是这种修改的确让Ballance被更多人玩了。目前已知,至少在2005年1月,这种版本已经开始传播。对于原版Player.exe,如果在启动时不插入光盘,那么其会弹出一个窗口要求你插入光盘,从而拒绝启动。检测的原理是检测系统中是否有一个名为Ballance的,类型为光驱的磁盘编号。对于是否会读取里面的内容,尚待探究。
调试卡顿
在Windows中对Player.exe附加调试器进行调试时,若暂停调试,则可能会发生鼠标移动卡顿的情况,极大地影响了调试的便利性。据chirs241097推测,可能是某些Callback(回调)或同步对象等未注销。后经过Swung 0x48的查找,chirs241097的实践验证,得出可能是因为Ballance通过调用SetWindowsHookEx(WH_KEYBOARD_LL, ...)
使用了一个底层的键盘Hook,所有键盘鼠标操作均需要通过Ballance所创建的回调处理,而此使Ballance被调试器暂停,无法得到处理,因此Windows在等待默认时间的超时后,取消处理,最终造成了卡顿。
解决方案[1]则是打开注册表编辑器,转到HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout
(值为DWORD类型),将其改为1即可。此数值代表了之前所说的超时等待时间,单位为毫秒。
参考
|