|
@@ -1,54 +0,0 @@
|
|
|
-using Moonlight.App.Database.Entities;
|
|
|
-using Moonlight.App.Models.Misc;
|
|
|
-using Moonlight.App.Services;
|
|
|
-
|
|
|
-namespace Moonlight.App.MalwareScans;
|
|
|
-
|
|
|
-public class DiscordNukeScan : MalwareScan
|
|
|
-{
|
|
|
- public override string Name => "Discord nuke";
|
|
|
- public override string Description => "Discord nuke bot detector";
|
|
|
- public override async Task<MalwareScanResult?> Scan(Server server, IServiceProvider serviceProvider)
|
|
|
- {
|
|
|
- var serverService = serviceProvider.GetRequiredService<ServerService>();
|
|
|
- var access = await serverService.CreateFileAccess(server, null!);
|
|
|
-
|
|
|
- var files = await access.Ls();
|
|
|
- var filteredFiles = files.Where(x =>
|
|
|
- x.Name.EndsWith(".py") ||
|
|
|
- x.Name.EndsWith(".js") ||
|
|
|
- x.Name.EndsWith(".json") ||
|
|
|
- x.Name.EndsWith(".env"));
|
|
|
-
|
|
|
- foreach (var file in filteredFiles)
|
|
|
- {
|
|
|
- var content = await access.Read(file);
|
|
|
- var filteredContent = content.ToLower();
|
|
|
-
|
|
|
- if (filteredContent.Contains("quake") ||
|
|
|
- filteredContent.Contains("nuked by") ||
|
|
|
- filteredContent.Contains("nuke bot") ||
|
|
|
- (filteredContent.Contains("fucked by") && filteredContent.Contains("nuke"))) // fucked by in context with nuke
|
|
|
- {
|
|
|
- return new()
|
|
|
- {
|
|
|
- Title = "Discord nuke bot",
|
|
|
- Description = "Found suspicious content which may indicate there is a nuke bot running",
|
|
|
- Author = "Marcel Baumgartner"
|
|
|
- };
|
|
|
- }
|
|
|
-
|
|
|
- if (files.Any(x => x.Name == "nukes.json"))
|
|
|
- {
|
|
|
- return new()
|
|
|
- {
|
|
|
- Title = "Discord nuke bot",
|
|
|
- Description = "Found suspicious content which may indicate there is a nuke bot running",
|
|
|
- Author = "Marcel Baumgartner"
|
|
|
- };
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- return null;
|
|
|
- }
|
|
|
-}
|