Skip to content

Erik-JS/proxy-dll-32

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Proxy DLL 32

Proxy DLL's with ASI loader for 32-bit games. For 64-bit games, click here.

See Releases for binaries.

About this repository

A DLL proxy acts like a "middle man" between the game and the original Windows DLL. The goal is to be able to load custom code into a game's memory by loading additional DLL files renamed as *.asi (dubbed as 'ASI plugin').

A little backstory about "ASI"

Grand Theft Auto III was released for PC in 2002.
GTAForums (one of the biggest GTA communities at the time, and probably the biggest today) hosts discussions about GTA hacking and modding, and back then people found an exploit which allowed custom user-made DLL's to be loaded by the game without the use of injectors if they were named with ASI extension.
It turned out that this was due to how the Miles Sound System middleware (Mss32.dll) attempts to load "ASI codecs" by looking for files ending with .asi in the game's executable folder.
For the sequels, I reckon that Vice City retained the exploit, but not San Andreas. For GTASA, dedicated ASI loaders were made in form of proxy DLL's.
Believe it or not, I contacted the creator of Miles Sound System, John Miles, via e-mail only to ask him what "ASI" stood for, which he politely replied that it's supposed to be "Audio Stream Interface".

The ASI loader

I implemented here the same scheme I used with the Binkw32 proxy DLL's for Mass Effect 1, 2 and 3.
The proxy DLL will attempt to load ASI plugins from a subfolder "ASI", and if it doesn't find anything there, then it'll load from the current folder.
The ASI loading function in this repo and on Binkw32's is based on XLiveless made by Stanislav "listener" Golovin. There's no secret: it performs a file search for "*.asi" and attempts to load what it founds.
The loading function has been tweaked by me so it looks for plugins in a given subfolder, relative to where the game's executable is, while counting what has been already loaded. This is intentionally done to avoid loading plugins with the same name from different places. See Erik-JS/masseffect-binkw32#12.

How things work

  • Place fake DLL in the game's exe folder;
  • Game loads fake DLL;
  • Fake DLL loads real DLL from System folder;
  • Fake DLL writes a log to fakedll_proxy32.log to current user's Documents folder;
  • Fake DLL loads ASI files from ASI subfolder (or the game's executable folder).

Games with Denuvo

As far as I can tell, Denuvo doesn't prevent hacking and modding. Game devs may employ anti-cheat and/or anti-modding measures which aren't related to Denuvo.
In any event, I cannot guarantee that these proxy DLL's will work with every game you own, regardless of having Denuvo or not.


Software used for writing and compiling:
Code::Blocks
TDM-GCC