BuzzteeBear / OpenXR-MotionCompensation

OpenXR API layer for motion compensation
GNU Lesser General Public License v2.1
45 stars 7 forks source link

Sign the DLLs #18

Open fredemmott opened 1 month ago

fredemmott commented 1 month ago

This is related to #17

Most games with anti-cheat will refuse to load DLLs that are unsigned; this includes iRacing, and also games that people don't want to use OXRMC with, if the layer is enabled (even if inactive). In this case, the OpenXR loader will not simply skip the layer - it will entirely fail, so the game can not enter VR - it will stay non-VR, stall, crash, or exit depending on the game.

This does not require EV code signing, or a business/LTD/LLC/DBA/other local equivalent legal entity. My recommendations are:

fredemmott commented 1 month ago

To clarify, this is not a requirement of the OpenXR standard or the OpenXR loader; anti-cheat software generally modifies the LoadLibraryA()/LoadLibraryW() and similar functions to add this requirement, which in turn changes the behavior of the OpenXR loader.

BuzzteeBear commented 1 month ago

Thank you again for your advice! I am aware of the unsigned binary issue and will look into potential solutions. I don't think it's an issue in iRacing as other users reported it as working fine for them. But ofc that could potentially change with any upcoming update, if the developer decides to enforce a check.

fredemmott commented 1 month ago

My guess is that someone who works at iRacing uses your layer, and adds it to the whitelist shortly after they update their installation of your layer; that would explain why the report you have is shortly after a new release.

again though, this doesn’t just affect sim games: if I want to play a competitive VR FPS with anti-cheat, I must entirely disable or uninstall the layer, because the issue occurs when the loader tries to load the DLL, not when it attempts to modify the game behavior. My point here isn’t “I should be able to use OXRMC in those games”, but that I shouldn’t need to enable/disable layers on a per-game basis every time I switch between them.