GeDoSaTo 0.19 “Chaos Flare” – Completely revamped injection

I just released a new version of GeDoSaTo, 0.19 “Chaos Flare”. This release completely changes the injection method. The goal is to be:

  • More consistent. There is now only one method of injection for everything.
  • More compatible. The first injected dll is extremely small, adheres to the Windows standards for DllMain and has no dependencies on any libraries.
  • Safer. The inital dll is written in a very defensive fashion, always loads correctly, and always unloads itself from processes.

This required switching to a 2-stage injection process. Instead of directly injecting the full GeDoSaTo dll, dragging in all its dependencies, and then checking whether it should unload itself, there is now a separate, minimal “shim” dll which has the sole task of injecting the full GeDoSaTo only into whitelisted processes. The entire injection workflow now looks like this:

injectionIn some more detail, the advantages of this are primarily that the “shim” dll, gedoshim.dll, has no dependencies at all except for kernel32.dll, which can be assumed to be present. Furthermore, it doesn’t perform any extensive processing in its DllMain entry point, but rather defers it to a thread it launches. Finally, it always unloads itself, regardless of what happens. All of these properties together should make it almost impossible for it to crash arbitrary processes, even if something does go wrong.

All of this required somewhat major changes, over the course of which I also got rid of some features which shouldn’t really have been used anyways. There are also some drawbacks to this, the extent of which will only be apparent after more people test this latest release:

  • The blacklist feature is gone completely. Every executable you want to run with GeDoSaTo now needs to be whitelisted. It’s safer, reduces complexity, and is really not much work at all.
  • Due to purging the old dual-injection method, the “delayDetouring” option no longer exists. The hope is that games which required it will now simply work anyway, due to the more solid implementation.
  • As you can already see to some extent in the illustration, it’s possible that the new injection mechanism leads to hooks being initialized only after a game has already performed some processing. This has not occurred in my limited testing so far, but it could nevertheless be an issue.

I’ve also used this opportunity to clean up the interface a bit, particularly in Windows 10, and update the readme for the first time in a while.

I’m looking forward to some user feedback on this release. I knew that these changes have been necessary for a while, but I dragged it out due to the high degree of annoyance caused by the shim dll implementation. String processing in C++ isn’t that great in the first place, but without any libraries (including the standard library!) it’s just terrible.

You can get the latest version and test this injection method with the installer provided here. And, as always, you can donate to support GeDoSaTo development (including annoying injection shims!) here.

Note that the main GeDoSaTo dll still requires the latest VC libraries.

Update:
From feedback on Github, it sounds like this update accomplished what it was supposed to. Whew, I’d have hated for all this work to be in vain.

12 thoughts on “GeDoSaTo 0.19 “Chaos Flare” – Completely revamped injection

  1. I hate to be bothersome, but I can’t get this new version to work either. I’ve used old versions months ago (I use it for Mass Effect 3) well before it stopped working for some people but now it doesn’t seem to activate for it at all.

    I have checked for “obvious” possible errors (running as admin, visual studio redist. installed, doing a completely fresh install, origin overlay not interfering) and like Anvi I tried enabling logs but nothing was created, it doesn’t seem to hook at all. No idea if this is useful but I’m on Windows 8.1 64bit.

    Otherwise thank you so much for this great utility, I’ve made good use of it before and it’s great to see it being worked on

  2. I was just thinking. Would it be reasonable to be able to switch shaders out by using texture loading or rendering as a trigger?

    It might be enough to detect certain textures specific to various areas of a game and allow the shaders to react accordingly so they can be more fine-tuned. Right now shaders mostly have to be adjusted one-size-fits-all for the whole game.

    Not sure how stable the results would be, but could be interesting to experiment with. Might even be sensible to have shader parameters blend between different presets on those triggers instead of only being able to switch whole shaders out.

    • It’s an interesting idea, and you could already do it by writing a game-specific plugin. I assume you ideally want it to work without toughing C++? Because then the interface will be challenging.

  3. Thank you for your work and dedication!

    I just updated to 0.19.1947 successfully. I was having the same issue as others, (update w0uld download and prompt to restart after install but the version would not change, as well as applications not loading at all with GeDoSaTo open) but these issues have been resolved!

    I do have a bug for you though. I just did a quick test with Dead Space 1 and if I have GeDoSaTo running even without applying any sort of downsampling or post process effects I have an increase in game speed of at least 100%. It may even be 200%. This takes place immediately upon loading the game, the intro sequence and menus all move at this increased speed the entire time, as well as gameplay itself.

    I do have a 144hz monitor so I attempted to fix this by changing my desktop refresh rate to 60hz as well as all of the downsampling options within GeDoSaTo’s ‘edit settings’ tab but no change.

    I will try some other games (and engines) to see if this is localized specifically to Dead Space 1.

    The only error I see in log is this: -> ERROR 3 creating hook for GetDeviceCaps, target: 5F1FE8C8, dll: 773F0000

    System: i7 4790k @ 4.9, 16gb 2400 DDR3, GTX 980Ti Sli, acer xb270hu, win 7 x64

     

  4. Not sure if this is user error, but I tried updating and version still reads as “0.18.1912 built on 2015/10/19..”

    Hooking stopped working. I was happily playing Tales of Zestiria earlier today with gedosato active :)

      • I managed to update after restarting and doing clean install, but hook is still not working. I also set loglevel to 1 and started Tales of Zestiria, but no logs were generated.

        Tried so far:
        Closed MSI AB + RTSS
        Disabled Steam Overlay
        Disabled Windows Defender

        OS Windows 10 X64 Pro

        • Was it working for you previously?

          For what it’s worth, Zestiria on Windows 10 x64 is actually one of the things I personally tested before releasing this build — works perfectly for me.

          • Yes, it was working today on the previous build. I’ve tried on 2 computers now, both with Windows 10, but gedosato is not hooking.

            Tested games:
            1st rig (worked on previous build)
            Tales of Zestiria

            2nd rig (GeDoSaTo first time install):
            Tales of Zestiria
            FF13-2

        • It now works for me once I installed it on a different hdd/partition. Not sure if that’s what made the difference.

Leave a Reply to Carri Cancel reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">