Hello, developers! I’m happy to announce you a new plugin I made called Virus Scanner V2.0
Current Version: V2.0
What does it do?
It’s a free plugin that detects Suspected Viruses around the game. It detects suspicious scripts around the game, or around the path you choose!
Virus Scanner V2.0 allows you to personalize your experience with studio, allowing you to detect for intrusive scripts.
It also provides you a Script Search to search Scripts’ sources around the game, depending on the input you put. This way you can find the Scripts that have that input in their sources. There’s also a Insert Anti-Virus Script, which is almost the same as the plugin, but it detects Scripts that insert fires or others. It’s meant to run in Runtime (rin-game). And the last button is Auto Verification, where it auto verifys models you put into your game from the toolbox, which is the best feature in the plugin, since most viruses come from the toolbox, obviously.
How to use it? And how does it work?
The plugin provides you 4 buttons, with different functions:

In this clip you can see the plugin’s toolbar along with the 4 different buttons. The buttons are Scan for Viruses, the main button, Insert Anti-Virus Script (inserts into Workspace, only for Runtime/in-game), Script Search, to search Scripts’ Sources, and Auto Verification, that checks models that you insert from the toolbox, to check for suspicion.
Let’s break down those functions (in order, left to right):
* Scan for Viruses Button

When you click this button, it brings you to the main panel. It will bring you the panel as full screen so the experience is better, but you can resize the window (User is always priority):
** Functions of the main panel’s buttons
- Use AI Toggle – Still in progress, but its objective is to detect with AI. so it’s more correct, but it’s predicted that it will take too long, so I’m still not decided if I should release that function;
- Open Logs after checking Toggle – It’s a toggle (Default Activated) that, when activated, after completeting a complete (or a personalized) check, it opens the logs for you in a disabled script, with the amount of detected suspected scripts, their reason, and their line. located in AntivirusV2Data in game’s path.; but when disabled, it won’t create the script and it won’t open it. This is a toggle made so the user can personalize everything within his choice when developing.
Example of what it printed when it detected a suspicious plugin (on purpose for testing purposes):
Example
--[[
# LOG - PATH: Place1\n
\n
|| MAIN SCRIPTS:\n
Detected:
|| PLUGIN ELEMENTS (SCRIPTS):
Detected:
PLUGIN SCRIPT | PATH: PluginGuiService.PluginGui.Frame.RequestBar.SendButton.RequestSend | NAME: RequestSend
~HttpService detected, which may indicate external communication (e.g., webhook leaks);
~---------
TOTAL DETECTIONS: 1
--]]
- Check all Button – It’s the main button of the panel, that checks a path you selected or the main path (Game). For every suspected script it creates a panel inside the black box/sub-panel with the classification (if it’s a script that works in-game, known as running in Runtime, or if it’s a script inside a plugin’s Dock/CoreUI. It detects the scripts inside PluginGuiService and CoreGui, for the plugins). The sub-panel (in the black box) is divided like a table, with the classification, the reason for it detecting as suspicious (it opens a disabled script also, but it’s diferent than the main logs script since its source is only the script you wanted to see the reason), a button that brings you to the script and the line where it detected the suspicious “activity” and a delete option (for the user’s safety there’s a double-check for clicking on that button, for unconscious reasons of pressing it). Everytime you press this button it also clears everything on the black box. When detecting a suspicious script, it normally takes 1 second so you are conscious of what’s happening and of what it detected. You may ask: How does it work? Well, when checking, it checks all scripts (descendants included) in the selected path. It checks for HTTPService requests, requires, loadstrings, etc.. Everything used to create viruses. Even the oldest ones that we don’t know they exist. It also checks for spammy FireServer calls and for spammy fire Instance creations, especially when it’s in a loop.
Example
The suspicious activity it detected (testing purposes):
The reason it gave:
--[[
# SCRIPT\n
Name: RequestSend\n
Path: PluginGuiService.PluginGui.Frame.RequestBar.SendButton.RequestSend\n
~HttpService detected, which may indicate external communication (e.g., webhook leaks);
~--]]
- Choose path button – It’s a simple button to increase user’s personalization experience with the plugin, that brings you to this window:
What you need to do is just selecting an Instance in Explorer and click on “Apply”. Then you can close the window; That way you can check for suspicious scripts in a specific path.
* Insert Anti-Virus Script Button

When you click this button it inserts a Anti-Virus script into Workspace. This scripts runs in Runtime (in-game), instead of being in studio. But it’s different since it doesn’t detect HTTPService, require, … what it does is that it warns the user about scripts with suspicious names (like “virus”, “SnAp!”, etc..). But if you want you can enable a variable so it deletes them, instead of only warning about them (console log)
Source
-- KarilbolsVirusScannerV2.0_Script
-- Inserted into Workspace
-- Made by Karilbol
wait(5) -- Delay before starting
local delayDetection = 30
local deleteSuspectedScripts = false -- not recommended on true because it can delete legit scripts (suspected script ≠ virus)
-- Name-based suspicious patterns
local suspiciousNamePatterns = {
"virus",
"infect",
"steal",
"backdoor",
"hack",
"exploit",
"malware",
"remote",
"fireserver",
"hintspam",
"messagespam",
"🔥", -- If someone uses this emoji bruh
}
local function checkScriptByName(scr)
local isSuspicious = false
local reason = ""
for _, pattern in ipairs(suspiciousNamePatterns) do
if string.lower(scr.Name):find(pattern) then
isSuspicious = true
reason ..= "Script name matches suspicious keyword: '" .. pattern .. "'; "
end
end
-- ClassName/Instance filter
if scr:IsA("LocalScript") and scr.Parent == game:GetService("ReplicatedStorage") then
isSuspicious = true
reason ..= "LocalScript stored in ReplicatedStorage, could be exploitable; "
end
return isSuspicious, reason
end
local function scanAllScriptsByName()
local detectedCount = 0
for _, descendant in ipairs(game:GetDescendants()) do
if descendant:IsA("Script") or descendant:IsA("LocalScript") or descendant:IsA("ModuleScript") then
if descendant ~= script then
local suspicious, reason = checkScriptByName(descendant)
if suspicious then
detectedCount += 1
if deleteSuspectedScripts then
descendant:Destroy()
end
print("[Karilbol's Anti-Virus V2.0] Found suspicious script:", descendant:GetFullName(), "Reason:", reason)
end
end
end
end
print("[Karilbol's Anti-Virus V2.0] Detected "..detectedCount.." suspicious scripts")
if detectedCount == 0 then
print("[Karilbol's Anti-Virus V2.0] No suspicious scripts detected in this scan (Name-based).")
end
end
while true do
scanAllScriptsByName()
task.wait(delayDetection)
end
* Script Search Button

When you click this button it brings you to the Script Search Panel Window. This function allows you to search around scripts’ sources around the game with the input you put in the panel’s box. To be honest, this is 2nd best button that exists here since many developers, including me, has to write in the command bar to search around scripts in the game with what I input in (example: “source:find(input)”). This function allows you to do that with just a sentence and a single button. It’s even more optimized than doing it in the command bar.
Here’s a video of me testing it, serving as example for the user:
Video Footage
* Auto Verification Button

This is a toggle button. It’s default to be enabled. Its purpose is to verify models you put from the toolbox. This is the coolest feature, since almost every virus comes from models from the toolbox, so it’s pretty useful. How does it work?.. Whenever you insert a model from the toolbox, a little “hint” / frame will appear on your screen. It normally is very fast and lasts 0.3-0.5 seconds. But if the model is huge, then it would be around 1-3 seconds. Its purpose is to warn you about the size of the model, which gives you an idea of how huge it is. The text is normally white, but when you insert a model and our plugin detects it as suspicious, then the text is yellow. To not annoy the user, I made it so its just a small text, no details. But details get printed on the console log. Normally, if it doesn’t detect any suspected script inside that model, then the text is white and it will print “Nothing was detected!” in white letters. Otherwise, it will print the script’s full name (path) in yellow letters, along with the reason.
It’s set default to enabled, but you can disable it if you want.
Here’s a video of me showcasing some models (as example):
Video Footage
This is about it about the plugin. Also the plugin provides settings, so whenever you log into the game again it saves your configurations (ex.: check logs button disabled, no auto verification,..)
How to download?
Well Roblox doesn’t trust me with this plugin so I can’t upload this into the MarketPlace sadly. I know this is gonna make people less motivated to download this, but trust me, this isn’t a virus or anything that makes your game slow or that robs your data or whatever. This is a genuine plugin that took me days to make. But somehow i’m “not respecting” their Community Standards. But I have it locally so you can download it:
Karilbol’s Virus Scanner V2.0.rbxmx (262.4 KB)
How do install it on Studio?
After downloading the file, go on studio, open any game or template, go to Plugins, click on the first button “tools” and then go to Plugins Folder or something called like that (second button). It’s gonna open you a folder. Paste the downloaded file into the folder. Now exit the game and join again. You know the plugin is working when you see a configuration folder on the game called “AntivirusV2Data”. (You can’t delete it because the plugin is using it). If it isn’t, try restarting studio. If you guys want I can show you a video showcasing.
Warning
This plugin is still in the first version so it may not be what users really want. That’s why you can suggest me ideas (it’s called V2.0 but it’s still on the first version because the V2 stands for the second version of another plugin I made that’s supposedly an Anti-Virus, but it’s way worse than this one)
How to update it?
Make sure to follow my devforum page to check for new updates of the plugin!
Do you have any suggestion of what I can do to make it better to update it?
Polls
I’m gonna open a poll so you guys can vote on this.
- Yes!
- Could be better (suggest so you can help make it better)
- Yes!
- No, let it be free!
- 1.00$
- 2.00$
- Other (suggest below)
Suggestions and opinions
If you have any suggestion or opinion to this..





