[Bug] exe.ProductName.optionalEquals fails on latest rolling unless i check exe variable's debugger view first #205

Closed
opened 2026-01-29 21:07:07 +00:00 by claunia · 2 comments
Owner

Originally created by @HeroponRikiBestest on GitHub (Sep 19, 2025).

The paul.dll in the 64-bit binaries for the d2d edition of Crysis 1 SE
paul.dll.zip
is incorrectly detected on latest rolling as "SecuROM Product Activation - Modified" instead of "SecuROM Product Activation v{exe.GetInternalVersion()} - EA Game Authorization Management". The check that's supposed to result in the latter, if (exe.ProductName.OptionalEquals("drEAm")), is failing, even though the ProductName is drEAm. If I step through the program in a debugger and break on this check, and print exe.ProductName, it returns null, and if I continue stepping it will still fail, just like rolling. If I mouse over the exe variable and wait for my debugger to populate all the subvariables, then try it again, it will return "drEAm", and the check will work. To be clear, this is not a debugger issue, the debugger is the only way I could get it to work properly; the check will happen incorrectly on the latest release binaries.

I assume there's something async happening that shouldn't, but I wouldn't know.

https://github.com/user-attachments/assets/e1b8f58e-0593-444d-8d6b-79f7d37f08d5

Originally created by @HeroponRikiBestest on GitHub (Sep 19, 2025). The paul.dll in the 64-bit binaries for the d2d edition of Crysis 1 SE [paul.dll.zip](https://github.com/user-attachments/files/22435336/paul.dll.zip) is incorrectly detected on latest rolling as "SecuROM Product Activation - Modified" instead of "SecuROM Product Activation v{exe.GetInternalVersion()} - EA Game Authorization Management". The check that's supposed to result in the latter, `if (exe.ProductName.OptionalEquals("drEAm"))`, is failing, even though the ProductName is drEAm. If I step through the program in a debugger and break on this check, and print exe.ProductName, it returns null, and if I continue stepping it will still fail, just like rolling. If I mouse over the exe variable and wait for my debugger to populate all the subvariables, then try it again, it will return "drEAm", and the check will work. To be clear, this is not a debugger issue, the debugger is the only way I could get it to work properly; the check will happen incorrectly on the latest release binaries. I assume there's something async happening that shouldn't, but I wouldn't know. https://github.com/user-attachments/assets/e1b8f58e-0593-444d-8d6b-79f7d37f08d5
Author
Owner

@HeroponRikiBestest commented on GitHub (Sep 20, 2025):

I realize now that I'm unsure if this issue maybe should have gone in serialization. Regardless, in the video I'm also using the latest version of serialization hooked up and it still occurs. I can move this issue if necessary.

This also occurs on other paul.dll files. I assume it probably occurs on similar checks across BOS, but I don't know enough about other protection checks to know which ones to check.

@HeroponRikiBestest commented on GitHub (Sep 20, 2025): I realize now that I'm unsure if this issue maybe should have gone in serialization. Regardless, in the video I'm also using the latest version of serialization hooked up and it still occurs. I can move this issue if necessary. This also occurs on other paul.dll files. I assume it probably occurs on similar checks across BOS, but I don't know enough about other protection checks to know which ones to check.
Author
Owner

@HeroponRikiBestest commented on GitHub (Sep 20, 2025):

Fixed by 484415d0e5

@HeroponRikiBestest commented on GitHub (Sep 20, 2025): Fixed by https://github.com/SabreTools/SabreTools.Serialization/commit/484415d0e585b34e2d773aac6d8715a150143964
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: SabreTools/BinaryObjectScanner#205