- Added new ScanFolder() and ScanFolderString() functions
- Fixed memory usage spike when scanning large files
- Removed file size limit for scanned files by default
- Version **4.2.1**:
- The checkUpdate function can now check for SDK updates
- Optimized scanning speed of big files
- Added 3 new settings "EnableAIScan", "MaxScanLength" and "DatabaseVersion"
- Optimized scanning speed in Linux version
- Version **4.2**:
- Reduced glibc minimum version to 2.17 on Linux
- Added "Logging()" function to enable/disable logging
- Added "BaseFolder()" function to set a custom base folder
- Added new setting "DatabaseFolder" to set the Database folder path
- Fixed C++ binding will return "Success=false" correctly when failing to scan a file
- Version **4.1**:
- Upgraded from .NET 5 to .NET 7
- C++ bindings now also support Linux
- Changed how exceptions are handled in C++ bindings
- Version **4.0**:
- Completely redone in .NET 5
- Now supports Linux (CLI and C# bindings only)
- Added XvirusAI scan engine (BETA)
- Scan speed is up to 2x faster
- Fixed memory usage spike when scanning large files
- Removed file size limit for scanned files by default
- The checkUpdate function can now check for SDK updates
- Added 3 new settings "EnableAIScan", "MaxScanLength" and "DatabaseVersion"
## Known Issues
## Known Issues
- XvirusAI engine is still in BETA. It is not recomended to use in production yet.
- XvirusAI engine is still in BETA. It is not recomended to use in production yet.
- XvirusAI engine does not work in C++ bindings.
- The checkUpdate function can now check for SDK updates but can't update it
- The checkUpdate function can now check for SDK updates but can't update it
## Get Started
## Get Started
The "`example`" folder contains an example project on how to import and use Xvirus SDK in C# (.NET Core 5).
The "`example`" folder contains an example project on how to import and use Xvirus SDK in C# (.NET 7).
You can run it by building it and then running executable file in the output folder.
You can run it by building it and then running executable file in the output folder.
@ -48,7 +91,7 @@ You have the following functions available:
- **Load** - Loads Xvirus Scan Engine into memory, if set `force`=true it will reload the scan engine, even if it is already loaded.
- **Load** - Loads Xvirus Scan Engine into memory, if set `force`=true it will reload the scan engine, even if it is already loaded.
- **Unload** - Unloads Xvirus Scan Engine from memory.
- **Unload** - Unloads Xvirus Scan Engine from memory.
- **Scan** - Scans the file located at `filepath`. It will return a [`ScanResult`](#Model).
- **Scan** - Scans the file located at `filepath`. It will return a [`ScanResult`](#Model).
- **ScanAsString** - Scans the file located at `filepath`. It will return one of the following strings:
- **ScanString** - Scans the file located at `filepath`. It will return one of the following strings:
- "**Safe**" - If no malware is detected.
- "**Safe**" - If no malware is detected.
- "**Malware**" - If malware is detected but the name isn't known.
- "**Malware**" - If malware is detected but the name isn't known.
- **_Malware Name_** - If it is malware from a known family (example: "Trojan.Downloader").
- **_Malware Name_** - If it is malware from a known family (example: "Trojan.Downloader").
@ -56,17 +99,21 @@ You have the following functions available:
- "**File not found!**" - If no file is found in the submited path.
- "**File not found!**" - If no file is found in the submited path.
- "**File too big!**" - If the file size is bigger than the set limit.
- "**File too big!**" - If the file size is bigger than the set limit.
- "**Could not get file hash!**" - There was an error calculating the hash of the file.
- "**Could not get file hash!**" - There was an error calculating the hash of the file.
- **ScanFolder** - Scans all the files inside the folder at `folderpath`. It will return an IEnumerable of [`ScanResult`](#Model).
- **ScanFolderString** - Scans all the files inside the folder at `folderpath`. It will return the scan result message for each file scanned.
- **CheckUpdates** - Checks and updates the databases and AI engine to the most recent versions. If `checkSDKUpdates`=true then it will also check for SDK updates. If `loadDBAfterUpdate`=true then it will reload the Xvirus Scan Engine after the update is done. It can return the following strings:
- **CheckUpdates** - Checks and updates the databases and AI engine to the most recent versions. If `checkSDKUpdates`=true then it will also check for SDK updates. If `loadDBAfterUpdate`=true then it will reload the Xvirus Scan Engine after the update is done. It can return the following strings:
- "**There is a new SDK version available!**"
- "**There is a new SDK version available!**"
- "**Database was updated!**"
- "**Database was updated!**"
- "**Database is up-to-date!**"
- "**Database is up-to-date!**"
- **GetSettings** - returns object representation of the `settings.json` file.
- **GetSettings** - returns object representation of the `settings.json` file.
- **GetSettingsAsString** - returns a string representation of the `settings.json` file.
- **GetSettingsAsString** - returns a string representation of the `settings.json` file.
- **Logging** - Sets and returns if `Logging` is enabled. If no `enableLogging` value is provided it will only return.
- **BaseFolder** - Sets and returns the `BaseFolder` path. If no `baseFolder` value is provided it will only return.
- **Version** - returns the version of the SDK/CLI.
- **Version** - returns the version of the SDK/CLI.
## Model
## Model
The `scan` function returns a class `ScanResult` with the following properties:
The `scan`and `scanFolder`functions return a class `ScanResult` with the following properties:
```c#
```c#
public class ScanResult
public class ScanResult
@ -74,16 +121,18 @@ public class ScanResult
public bool IsMalware { get; set; } // true if malware
public bool IsMalware { get; set; } // true if malware
public string Name { get; set; } // detection name
public string Name { get; set; } // detection name
public double MalwareScore { get; set; } // between 0 and 1, higher score means more likely to be malware, -1 if there was an error
public double MalwareScore { get; set; } // between 0 and 1, higher score means more likely to be malware, -1 if there was an error
public string Path { get; set; } // file path
}
}
```
```
## Settings
## Settings
Settings are located in the "`settings.json`" file in the root folder of the SDK. There are 4 avaiable options:
Settings are located in the "`settings.json`" file in the root folder of the SDK. There are 5 avaiable options:
- **EnableHeuristics** - Enables heuristics scanning of files. Default: _true_
- **EnableHeuristics** - Enables heuristics scanning of files. Default: _true_
- **EnableAIScan** - Enables XvirusAI scan engine. This feature is still in BETA. Default: _false_
- **EnableAIScan** - Enables XvirusAI scan engine. This feature is still in BETA. Default: _false_
- **MaxScanLength** - Maximum file size to be scanned in bytes. If set "null" then there is no limit. Default: _null_
- **MaxScanLength** - Maximum file size to be scanned in bytes. If set "null" then there is no limit. Default: _null_
- **DatabaseFolder** - Path to the database folder, it accepts both relative and absolute paths. Default: _"Database"_
- **DatabaseVersion** - KeyValue list of database files version. This is updated automatically when using the "checkUpdate()" function.
- **DatabaseVersion** - KeyValue list of database files version. This is updated automatically when using the "checkUpdate()" function.
Example of a `settings.json` file:
Example of a `settings.json` file:
@ -93,6 +142,7 @@ Example of a `settings.json` file: