justinstenning / Direct3DHook

DirectX Capture and Overlays by using Direct3D API hooks
http://spazzarama.com/2011/03/14/c-screen-capture-and-overlays-for-direct3d-9-10-and-11-using-api-hooks
MIT License
580 stars 178 forks source link

Failed injection in League of Legends #69

Open nuclearWinters opened 5 years ago

nuclearWinters commented 5 years ago

Error says: Capture.InjectionFailedException: 'Injection to the target process failed. See InnerException for more detail.'

Is this a issue with the game expecifically?

justinstenning commented 5 years ago

Possibly, definitely used to work with LoL, but it has been a long time since I tried. Would need to check the inner exception. If it is Code 5, then it is a permissions problem (ie game anticheat/ protection logic or similar preventing injection)

vacekj commented 5 years ago

Same exception happening when trying to inject into Overwatch. Access denied. #60 might be of help, though I haven't tested it yet.

vacekj commented 5 years ago

How do we go from here then?

I've looked into OBS Studio capturing method, since it can capture it no problem. How does their method work? Can we use it here?

justinstenning commented 5 years ago

OBS is probably whitelisted. Certainly that is the case with the protection in ARK and Fortnite.

It might be worth trying the stealth injection but I wouldn’t hold my breath.

If you are after screencapture, then you could use windows desktop duplication APIs, this requires no hooking at all, but requires Windows 8+

vacekj commented 5 years ago

I just tried recording Overwatch using https://github.com/smourier/Duplicator and it shows up as black, as a result of Overwatch screenblock protection. So I guess the only way to go about this is to somehow manage to hook into OW.

nuclearWinters commented 5 years ago

If you are after screencapture, then you could use windows desktop duplication APIs, this requires no hooking at all, but requires Windows 8+

I want a screenshot every second and do computer vision with them in python simultaneously. I will try that.

jazzup commented 5 years ago

@nuclearWinters @JouzaLoL Referring to @spazzarama https://github.com/spazzarama/Direct3DHook/issues/56

I modified CaptureProcess.cs to use SetWindowsHookEx CaptureProcess.zip

Use the uploaded file instead of existing one after changing a couple of lines. It should inject Capture.dll like it did for Call of duty Infinite Warfare for me; it was giving Access denied code 5

pe

Next step is to use the LocalHook but I haven't been able to make it work. Perhaps you or @spazzarama, whenever he has the time, can take it from where I got stuck.

justinstenning commented 5 years ago

@jazzup have you tried the LocalHook at all after injecting using SetWindowsHookEx? If you want the IPC etc.. you will have to come up with a way to setup the channel and connect to it from the injected assembly - you could use a static name during testing for the channel or just not use the IPC and see how it fairs.

bittzz commented 5 years ago

I get this when trying to inject into League of Legends.exe

System.ApplicationException: STATUS_INTERNAL_ERROR: C++ completion routine has returned success but didn't raise the remote event. (Code: 0)