@ -0,0 +1,559 @@ | |||||
!*.gitkeep | |||||
# User-specific files | |||||
*.rsuser | |||||
*.suo | |||||
*.user | |||||
*.userosscache | |||||
*.sln.docstates | |||||
# User-specific files (MonoDevelop/Xamarin Studio) | |||||
*.userprefs | |||||
# Mono auto generated files | |||||
mono_crash.* | |||||
# Build results | |||||
[Dd]ebug/ | |||||
[Dd]ebugPublic/ | |||||
[Rr]elease/ | |||||
[Rr]eleases/ | |||||
x64/ | |||||
x86/ | |||||
[Ww][Ii][Nn]32/ | |||||
[Aa][Rr][Mm]/ | |||||
[Aa][Rr][Mm]64/ | |||||
bld/ | |||||
[Bb]in/ | |||||
[Oo]bj/ | |||||
[Ll]og/ | |||||
[Ll]ogs/ | |||||
# Visual Studio 2015/2017 cache/options directory | |||||
.vs/ | |||||
# Uncomment if you have tasks that create the project's static files in wwwroot | |||||
#wwwroot/ | |||||
# Visual Studio 2017 auto generated files | |||||
Generated\ Files/ | |||||
# MSTest test Results | |||||
[Tt]est[Rr]esult*/ | |||||
[Bb]uild[Ll]og.* | |||||
# NUnit | |||||
*.VisualState.xml | |||||
TestResult.xml | |||||
nunit-*.xml | |||||
# Build Results of an ATL Project | |||||
[Dd]ebugPS/ | |||||
[Rr]eleasePS/ | |||||
dlldata.c | |||||
# Benchmark Results | |||||
BenchmarkDotNet.Artifacts/ | |||||
# .NET Core | |||||
project.lock.json | |||||
project.fragment.lock.json | |||||
artifacts/ | |||||
# ASP.NET Scaffolding | |||||
ScaffoldingReadMe.txt | |||||
# StyleCop | |||||
StyleCopReport.xml | |||||
# Files built by Visual Studio | |||||
*_i.c | |||||
*_p.c | |||||
*_h.h | |||||
*.ilk | |||||
*.meta | |||||
*.obj | |||||
*.iobj | |||||
*.pch | |||||
*.pdb | |||||
*.ipdb | |||||
*.pgc | |||||
*.pgd | |||||
*.rsp | |||||
*.sbr | |||||
*.tlb | |||||
*.tli | |||||
*.tlh | |||||
*.tmp | |||||
*.tmp_proj | |||||
*_wpftmp.csproj | |||||
*.log | |||||
*.tlog | |||||
*.vspscc | |||||
*.vssscc | |||||
.builds | |||||
*.pidb | |||||
*.svclog | |||||
*.scc | |||||
# Chutzpah Test files | |||||
_Chutzpah* | |||||
# Visual C++ cache files | |||||
ipch/ | |||||
*.aps | |||||
*.ncb | |||||
*.opendb | |||||
*.opensdf | |||||
*.sdf | |||||
*.cachefile | |||||
*.VC.db | |||||
*.VC.VC.opendb | |||||
# Visual Studio profiler | |||||
*.psess | |||||
*.vsp | |||||
*.vspx | |||||
*.sap | |||||
# Visual Studio Trace Files | |||||
*.e2e | |||||
# TFS 2012 Local Workspace | |||||
$tf/ | |||||
# Guidance Automation Toolkit | |||||
*.gpState | |||||
# ReSharper is a .NET coding add-in | |||||
_ReSharper*/ | |||||
*.[Rr]e[Ss]harper | |||||
*.DotSettings.user | |||||
# TeamCity is a build add-in | |||||
_TeamCity* | |||||
# DotCover is a Code Coverage Tool | |||||
*.dotCover | |||||
# AxoCover is a Code Coverage Tool | |||||
.axoCover/* | |||||
!.axoCover/settings.json | |||||
# Coverlet is a free, cross platform Code Coverage Tool | |||||
coverage*.json | |||||
coverage*.xml | |||||
coverage*.info | |||||
# Visual Studio code coverage results | |||||
*.coverage | |||||
*.coveragexml | |||||
# NCrunch | |||||
_NCrunch_* | |||||
.*crunch*.local.xml | |||||
nCrunchTemp_* | |||||
# MightyMoose | |||||
*.mm.* | |||||
AutoTest.Net/ | |||||
# Web workbench (sass) | |||||
.sass-cache/ | |||||
# Installshield output folder | |||||
[Ee]xpress/ | |||||
# DocProject is a documentation generator add-in | |||||
DocProject/buildhelp/ | |||||
DocProject/Help/*.HxT | |||||
DocProject/Help/*.HxC | |||||
DocProject/Help/*.hhc | |||||
DocProject/Help/*.hhk | |||||
DocProject/Help/*.hhp | |||||
DocProject/Help/Html2 | |||||
DocProject/Help/html | |||||
# Click-Once directory | |||||
publish/ | |||||
# Publish Web Output | |||||
*.[Pp]ublish.xml | |||||
*.azurePubxml | |||||
# Note: Comment the next line if you want to checkin your web deploy settings, | |||||
# but database connection strings (with potential passwords) will be unencrypted | |||||
*.pubxml | |||||
*.publishproj | |||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to | |||||
# checkin your Azure Web App publish settings, but sensitive information contained | |||||
# in these scripts will be unencrypted | |||||
PublishScripts/ | |||||
# NuGet Packages | |||||
*.nupkg | |||||
# NuGet Symbol Packages | |||||
*.snupkg | |||||
# The packages folder can be ignored because of Package Restore | |||||
**/[Pp]ackages/* | |||||
# except build/, which is used as an MSBuild target. | |||||
!**/[Pp]ackages/build/ | |||||
# Uncomment if necessary however generally it will be regenerated when needed | |||||
#!**/[Pp]ackages/repositories.config | |||||
# NuGet v3's project.json files produces more ignorable files | |||||
*.nuget.props | |||||
*.nuget.targets | |||||
# Nuget personal access tokens and Credentials | |||||
nuget.config | |||||
# Microsoft Azure Build Output | |||||
csx/ | |||||
*.build.csdef | |||||
# Microsoft Azure Emulator | |||||
ecf/ | |||||
rcf/ | |||||
# Windows Store app package directories and files | |||||
AppPackages/ | |||||
BundleArtifacts/ | |||||
Package.StoreAssociation.xml | |||||
_pkginfo.txt | |||||
*.appx | |||||
*.appxbundle | |||||
*.appxupload | |||||
# Visual Studio cache files | |||||
# files ending in .cache can be ignored | |||||
*.[Cc]ache | |||||
# but keep track of directories ending in .cache | |||||
!?*.[Cc]ache/ | |||||
# Others | |||||
ClientBin/ | |||||
~$* | |||||
*~ | |||||
*.dbmdl | |||||
*.dbproj.schemaview | |||||
*.jfm | |||||
*.pfx | |||||
*.publishsettings | |||||
orleans.codegen.cs | |||||
# Including strong name files can present a security risk | |||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424) | |||||
#*.snk | |||||
# Since there are multiple workflows, uncomment next line to ignore bower_components | |||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | |||||
#bower_components/ | |||||
# RIA/Silverlight projects | |||||
Generated_Code/ | |||||
# Backup & report files from converting an old project file | |||||
# to a newer Visual Studio version. Backup files are not needed, | |||||
# because we have git ;-) | |||||
_UpgradeReport_Files/ | |||||
Backup*/ | |||||
UpgradeLog*.XML | |||||
UpgradeLog*.htm | |||||
ServiceFabricBackup/ | |||||
*.rptproj.bak | |||||
# SQL Server files | |||||
*.mdf | |||||
*.ldf | |||||
*.ndf | |||||
# Business Intelligence projects | |||||
*.rdl.data | |||||
*.bim.layout | |||||
*.bim_*.settings | |||||
*.rptproj.rsuser | |||||
*- [Bb]ackup.rdl | |||||
*- [Bb]ackup ([0-9]).rdl | |||||
*- [Bb]ackup ([0-9][0-9]).rdl | |||||
# Microsoft Fakes | |||||
FakesAssemblies/ | |||||
# GhostDoc plugin setting file | |||||
*.GhostDoc.xml | |||||
# Node.js Tools for Visual Studio | |||||
.ntvs_analysis.dat | |||||
node_modules/ | |||||
# Visual Studio 6 build log | |||||
*.plg | |||||
# Visual Studio 6 workspace options file | |||||
*.opt | |||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) | |||||
*.vbw | |||||
# Visual Studio LightSwitch build output | |||||
**/*.HTMLClient/GeneratedArtifacts | |||||
**/*.DesktopClient/GeneratedArtifacts | |||||
**/*.DesktopClient/ModelManifest.xml | |||||
**/*.Server/GeneratedArtifacts | |||||
**/*.Server/ModelManifest.xml | |||||
_Pvt_Extensions | |||||
# Paket dependency manager | |||||
.paket/paket.exe | |||||
paket-files/ | |||||
# FAKE - F# Make | |||||
.fake/ | |||||
# CodeRush personal settings | |||||
.cr/personal | |||||
# Python Tools for Visual Studio (PTVS) | |||||
__pycache__/ | |||||
*.pyc | |||||
# Cake - Uncomment if you are using it | |||||
# tools/** | |||||
# !tools/packages.config | |||||
# Tabs Studio | |||||
*.tss | |||||
# Telerik's JustMock configuration file | |||||
*.jmconfig | |||||
# BizTalk build output | |||||
*.btp.cs | |||||
*.btm.cs | |||||
*.odx.cs | |||||
*.xsd.cs | |||||
# OpenCover UI analysis results | |||||
OpenCover/ | |||||
# Azure Stream Analytics local run output | |||||
ASALocalRun/ | |||||
# MSBuild Binary and Structured Log | |||||
*.binlog | |||||
# NVidia Nsight GPU debugger configuration file | |||||
*.nvuser | |||||
# MFractors (Xamarin productivity tool) working folder | |||||
.mfractor/ | |||||
# Local History for Visual Studio | |||||
.localhistory/ | |||||
# BeatPulse healthcheck temp database | |||||
healthchecksdb | |||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017 | |||||
MigrationBackup/ | |||||
# Ionide (cross platform F# VS Code tools) working folder | |||||
.ionide/ | |||||
# Fody - auto-generated XML schema | |||||
FodyWeavers.xsd | |||||
# VS Code files for those working on multiple tools | |||||
.vscode/* | |||||
!.vscode/settings.json | |||||
!.vscode/tasks.json | |||||
!.vscode/launch.json | |||||
!.vscode/extensions.json | |||||
*.code-workspace | |||||
# Local History for Visual Studio Code | |||||
.history/ | |||||
# Windows Installer files from build outputs | |||||
*.cab | |||||
*.msi | |||||
*.msix | |||||
*.msm | |||||
*.msp | |||||
# JetBrains Rider | |||||
.idea/ | |||||
*.sln.iml | |||||
### Git ### | |||||
# Created by git for backups. To disable backups in Git: | |||||
# $ git config --global mergetool.keepBackup false | |||||
*.orig | |||||
# Created by git when using merge tools for conflicts | |||||
*.BACKUP.* | |||||
*.BASE.* | |||||
*.LOCAL.* | |||||
*.REMOTE.* | |||||
*_BACKUP_*.txt | |||||
*_BASE_*.txt | |||||
*_LOCAL_*.txt | |||||
*_REMOTE_*.txt | |||||
### vs ### | |||||
# User-specific files | |||||
# User-specific files (MonoDevelop/Xamarin Studio) | |||||
# Mono auto generated files | |||||
# Build results | |||||
# Visual Studio 2015/2017 cache/options directory | |||||
# Uncomment if you have tasks that create the project's static files in wwwroot | |||||
# Visual Studio 2017 auto generated files | |||||
# MSTest test Results | |||||
# NUnit | |||||
# Build Results of an ATL Project | |||||
# Benchmark Results | |||||
# .NET Core | |||||
# StyleCop | |||||
# Files built by Visual Studio | |||||
# Chutzpah Test files | |||||
# Visual C++ cache files | |||||
# Visual Studio profiler | |||||
# Visual Studio Trace Files | |||||
# TFS 2012 Local Workspace | |||||
# Guidance Automation Toolkit | |||||
# ReSharper is a .NET coding add-in | |||||
# TeamCity is a build add-in | |||||
# DotCover is a Code Coverage Tool | |||||
# AxoCover is a Code Coverage Tool | |||||
# Coverlet is a free, cross platform Code Coverage Tool | |||||
coverage*[.json, .xml, .info] | |||||
# Visual Studio code coverage results | |||||
# NCrunch | |||||
# MightyMoose | |||||
# Web workbench (sass) | |||||
# Installshield output folder | |||||
# DocProject is a documentation generator add-in | |||||
# Click-Once directory | |||||
# Publish Web Output | |||||
# Note: Comment the next line if you want to checkin your web deploy settings, | |||||
# but database connection strings (with potential passwords) will be unencrypted | |||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to | |||||
# checkin your Azure Web App publish settings, but sensitive information contained | |||||
# in these scripts will be unencrypted | |||||
# NuGet Packages | |||||
# NuGet Symbol Packages | |||||
# The packages folder can be ignored because of Package Restore | |||||
# except build/, which is used as an MSBuild target. | |||||
# Uncomment if necessary however generally it will be regenerated when needed | |||||
# NuGet v3's project.json files produces more ignorable files | |||||
# Microsoft Azure Build Output | |||||
# Microsoft Azure Emulator | |||||
# Windows Store app package directories and files | |||||
# Visual Studio cache files | |||||
# files ending in .cache can be ignored | |||||
# but keep track of directories ending in .cache | |||||
# Others | |||||
# Including strong name files can present a security risk | |||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424) | |||||
# Since there are multiple workflows, uncomment next line to ignore bower_components | |||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) | |||||
# RIA/Silverlight projects | |||||
# Backup & report files from converting an old project file | |||||
# to a newer Visual Studio version. Backup files are not needed, | |||||
# because we have git ;-) | |||||
# SQL Server files | |||||
# Business Intelligence projects | |||||
# Microsoft Fakes | |||||
# GhostDoc plugin setting file | |||||
# Node.js Tools for Visual Studio | |||||
# Visual Studio 6 build log | |||||
# Visual Studio 6 workspace options file | |||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) | |||||
# Visual Studio LightSwitch build output | |||||
# Paket dependency manager | |||||
# FAKE - F# Make | |||||
# CodeRush personal settings | |||||
# Python Tools for Visual Studio (PTVS) | |||||
# Cake - Uncomment if you are using it | |||||
# tools/** | |||||
# !tools/packages.config | |||||
# Tabs Studio | |||||
# Telerik's JustMock configuration file | |||||
# BizTalk build output | |||||
# OpenCover UI analysis results | |||||
# Azure Stream Analytics local run output | |||||
# MSBuild Binary and Structured Log | |||||
# NVidia Nsight GPU debugger configuration file | |||||
# MFractors (Xamarin productivity tool) working folder | |||||
# Local History for Visual Studio | |||||
# BeatPulse healthcheck temp database | |||||
# Backup folder for Package Reference Convert tool in Visual Studio 2017 | |||||
# Ionide (cross platform F# VS Code tools) working folder |
@ -0,0 +1,3 @@ | |||||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd"> | |||||
<Costura /> | |||||
</Weavers> |
@ -0,0 +1,630 @@ | |||||
using System; | |||||
using System.Collections.Generic; | |||||
using System.Diagnostics; | |||||
using System.IO; | |||||
using System.Linq; | |||||
using System.Threading; | |||||
using System.Runtime.InteropServices; | |||||
using System.ServiceProcess; | |||||
using System.Text; | |||||
using System.Threading.Tasks; | |||||
using Microsoft.Win32; | |||||
namespace ame_integrity_check | |||||
{ | |||||
public enum Type | |||||
{ | |||||
File = 1, | |||||
Directory = 2, | |||||
Process = 3, | |||||
Service = 4 | |||||
} | |||||
internal class Scanner : IDisposable | |||||
{ | |||||
private int result = 1; | |||||
private bool allFound = true; | |||||
private bool found = false; | |||||
private bool errorOverride = false; | |||||
public Task<bool> displayTask; | |||||
public void Dispose() => GC.SuppressFinalize(this); | |||||
public async Task<bool> DisplayQuery(string text, int time = 150) | |||||
{ | |||||
Out.WriteCustomString(text, 3, 11); | |||||
string maxSpaces = " "; | |||||
for (int i = 1; i < 6; i++) { | |||||
Console.SetCursorPosition(59, Console.CursorTop); | |||||
var spaces = maxSpaces.Remove(0, i); | |||||
Console.Write($"[ {spaces.PadLeft(spaces.Length + i, '*')} ]"); | |||||
Thread.Sleep(time); | |||||
} | |||||
return true; | |||||
} | |||||
private static void SetQueryStatus(string status, ConsoleColor color) | |||||
{ | |||||
Console.SetCursorPosition(64 - status.Length, Console.CursorTop); | |||||
Console.Write(" [ "); | |||||
Out.WriteCustomString(status, 3, 0, foregroundColor: color); | |||||
Console.WriteLine(" ]"); | |||||
} | |||||
public async void Query(Type type, string item, bool finalize = false, bool modifyResult = true) | |||||
{ | |||||
item = Environment.ExpandEnvironmentVariables(item); | |||||
bool foundItem = false; | |||||
try { | |||||
switch (type) { | |||||
case Type.File: | |||||
if (item.Contains("*")) | |||||
{ | |||||
var lastToken = item.LastIndexOf("\\"); | |||||
var parentPath = item.Remove(lastToken).TrimEnd('\\'); | |||||
if (parentPath.Contains("*")) throw new ArgumentException("Parent directories to a given file filter cannot contain wildcards."); | |||||
var filter = item.Substring(lastToken + 1); | |||||
foundItem = Directory.GetFiles(parentPath, filter).Any(); | |||||
break; | |||||
} | |||||
foundItem = File.Exists(item); | |||||
break; | |||||
case Type.Directory: | |||||
if (item.Contains("*")) | |||||
{ | |||||
var lastToken = item.LastIndexOf("\\"); | |||||
var parentPath = item.Remove(lastToken).TrimEnd('\\'); | |||||
if (parentPath.Contains("*")) throw new ArgumentException("Parent directories to a given file filter cannot contain wildcards."); | |||||
var filter = item.Substring(lastToken + 1); | |||||
foundItem = Directory.GetDirectories(parentPath, filter).Any(); | |||||
break; | |||||
} | |||||
foundItem = Directory.Exists(item); | |||||
break; | |||||
case Type.Process: | |||||
foundItem = Process.GetProcessesByName(item).Any(); | |||||
break; | |||||
case Type.Service: | |||||
foundItem = ServiceController.GetServices().Any(x => x.ServiceName.Equals("wuauserv", StringComparison.CurrentCultureIgnoreCase)); | |||||
break; | |||||
default: | |||||
foundItem = false; | |||||
break; | |||||
} | |||||
} catch (Exception e) { | |||||
errorOverride = true; | |||||
} | |||||
if (foundItem) found = true; | |||||
if (!finalize) return; | |||||
await displayTask; | |||||
if (errorOverride) { | |||||
errorOverride = false; | |||||
SetQueryStatus("ERROR", ConsoleColor.DarkRed); | |||||
found = false; | |||||
return; | |||||
} | |||||
if (!found) { | |||||
if (modifyResult) allFound = false; | |||||
SetQueryStatus("Absent", ConsoleColor.Green); | |||||
} else { | |||||
result = 2; | |||||
if (allFound) result = 3; | |||||
SetQueryStatus("Present", ConsoleColor.DarkRed); | |||||
} | |||||
found = false; | |||||
} | |||||
public void DisplayResult() | |||||
{ | |||||
switch (result) { | |||||
case 1: | |||||
Out.WriteCustomString("\n\nAME Integrity validated", 1, foregroundColor: ConsoleColor.Green); | |||||
break; | |||||
case 2: | |||||
Out.WriteCustomString("\n\nAME integrity compromised, contact the team for help.", 1, foregroundColor: ConsoleColor.Red); | |||||
break; | |||||
case 3: | |||||
Out.WriteCustomString("\n\nYour system is not ameliorated.", 1, foregroundColor: ConsoleColor.Red); | |||||
break; | |||||
} | |||||
} | |||||
} | |||||
internal static class Program | |||||
{ | |||||
public static string PreviousTitle; | |||||
public static int PreviousBufferHeight; | |||||
public static int PreviousBufferWidth; | |||||
public static int PreviousSizeHeight; | |||||
public static int PreviousSizeWidth; | |||||
public const double Ver = 0.9; | |||||
public static void Main(string[] args) | |||||
{ | |||||
PreviousSizeHeight = Console.WindowHeight; | |||||
PreviousSizeWidth = Console.WindowWidth; | |||||
PreviousBufferHeight = Console.BufferHeight; | |||||
PreviousBufferWidth = Console.BufferWidth; | |||||
Console.SetWindowSize(80, 26); | |||||
Console.SetBufferSize(80, 26); | |||||
Console.SetWindowSize(80, 26); | |||||
Console.Clear(); | |||||
Console.CursorVisible = false; | |||||
PreviousTitle = Console.Title; | |||||
Console.Title = "AME Integrity Check"; | |||||
try { Out.DisableResize(); } catch (Exception) { } | |||||
try { Out.DisableQuickEdit(); } catch (Exception) { } | |||||
Console.CancelKeyPress += Exit; | |||||
Out.WriteCustomString("\n__________________________________________________________" + | |||||
$"\n\n| AME Integrity Check v{Ver} |\n\n", 1); | |||||
displayStart: | |||||
Menu mainMenu = new Menu() { | |||||
Choices = {"Check AME Integrity", "Get Support", "", "Exit"}, | |||||
EndString = "\n__________________________________________________________\n", | |||||
Statement = "Use the arrows keys to navigate" | |||||
}; | |||||
var choice = mainMenu.Load(); | |||||
switch (choice) { | |||||
case 0: | |||||
RunCheck(); | |||||
Out.ResetPane(); | |||||
goto displayStart; | |||||
case 1: | |||||
Process.Start("https://t.me/joinchat/CR-xFBGQKVt7HPZKgZfbxg"); | |||||
Out.ResetPane(); | |||||
goto displayStart; | |||||
case 2: | |||||
PrepProcessExit(); | |||||
Environment.Exit(0); | |||||
break; | |||||
default: | |||||
PrepProcessExit(); | |||||
Environment.Exit(1); | |||||
break; | |||||
} | |||||
} | |||||
private static bool detected = false; | |||||
private static int result = 1; | |||||
private static void RunCheck() | |||||
{ | |||||
Out.ResetPane(); | |||||
bool legacy = false; | |||||
var registryKey = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Windows NT\CurrentVersion"); | |||||
int winVer = 1; | |||||
if (registryKey != null) winVer = Int32.Parse(registryKey.GetValue("CurrentBuildNumber").ToString()); | |||||
if (winVer < 19044) legacy = true; | |||||
using (var scanner = new Scanner()) | |||||
{ | |||||
scanner.displayTask = scanner.DisplayQuery("Checking for Windows Defender activity...", 250); | |||||
scanner.Query(Type.Process, "MsMpEng", true); | |||||
scanner.displayTask = scanner.DisplayQuery("Checking Windows Defender files...", 200); | |||||
if (!legacy) { | |||||
scanner.Query(Type.Directory, "%ProgramFiles%\\Windows Defender"); | |||||
scanner.Query(Type.Directory, "%ProgramData%\\Microsoft\\Windows Defender", true); | |||||
} | |||||
else scanner.Query(Type.Directory, "%ProgramFiles%\\Windows Defender", true); | |||||
if (!legacy) { | |||||
scanner.displayTask = scanner.DisplayQuery("Checking Windows Update service...", 350); | |||||
scanner.Query(Type.Service, "wuauserv", true); | |||||
} | |||||
scanner.displayTask = scanner.DisplayQuery("Checking Windows Update files...", 220); | |||||
scanner.Query(Type.File, "%WINDIR%\\System32\\wuaueng.dll"); | |||||
scanner.Query(Type.File, "%WINDIR%\\System32\\wuapi.dll", true); | |||||
scanner.displayTask = scanner.DisplayQuery("Checking Microsoft Edge...", 200); | |||||
scanner.Query(Type.Directory, "%ProgramFiles(x86)%\\Microsoft\\EdgeCore"); | |||||
scanner.Query(Type.Directory, "%WINDIR%\\SystemApps\\*MicrosoftEdge*", true); | |||||
scanner.displayTask = scanner.DisplayQuery("Checking for Microsoft Store activity...", 200); | |||||
scanner.Query(Type.Process, "WinStore.App", true, false); | |||||
scanner.displayTask = scanner.DisplayQuery("Checking Windows SmartScreen..."); | |||||
scanner.Query(Type.Process, "smartscreen"); | |||||
scanner.Query(Type.File, "%WINDIR%\\System32\\smartscreen.exe", true); | |||||
scanner.displayTask = scanner.DisplayQuery("Checking SIH Client..."); | |||||
scanner.Query(Type.File, "%WINDIR%\\System32\\SIHClient.exe", true); | |||||
scanner.displayTask = scanner.DisplayQuery("Checking Storage Sense...", 300); | |||||
scanner.Query(Type.File, "%WINDIR%\\System32\\StorSvc.dll", true); | |||||
scanner.DisplayResult(); | |||||
} | |||||
Out.WriteCustomString("__________________________________________________________\n\n\nPress any key to return to the Menu: ", 3, 11); | |||||
ClearBuffer(); | |||||
Console.CursorVisible = true; | |||||
Console.ReadKey(false); | |||||
Console.CursorVisible = false; | |||||
} | |||||
private static bool anyNotPresent; | |||||
private static void ClearBuffer() | |||||
{ | |||||
var posCacheTop = Console.CursorTop; | |||||
var posCacheLeft = Console.CursorLeft; | |||||
while (Console.KeyAvailable) { | |||||
Console.ReadKey(false); | |||||
} | |||||
Console.SetCursorPosition(posCacheLeft, posCacheTop); | |||||
Console.Write("".PadLeft(Console.WindowHeight, ' ')); | |||||
Console.SetCursorPosition(posCacheLeft, posCacheTop); | |||||
} | |||||
private static void Exit(object sender, ConsoleCancelEventArgs args) | |||||
{ | |||||
PrepProcessExit(); | |||||
Environment.Exit(0); | |||||
} | |||||
private static void PrepProcessExit() | |||||
{ | |||||
var parent = ParentProcess.ProcessName; | |||||
if (parent.Equals("Explorer", StringComparison.CurrentCultureIgnoreCase)) return; | |||||
try { Out.EnableResize(); } catch (Exception) { } | |||||
try { Out.EnableQuickEdit(); } catch (Exception) { } | |||||
Console.CursorVisible = true; | |||||
Console.Clear(); | |||||
Console.Title = PreviousTitle; | |||||
Console.SetWindowSize(PreviousSizeWidth, PreviousSizeHeight); | |||||
Console.SetBufferSize(PreviousBufferWidth, PreviousBufferHeight); | |||||
} | |||||
} | |||||
internal static class Out | |||||
{ | |||||
public static void ResetPane(int fromTop = 6) | |||||
{ | |||||
Console.SetCursorPosition(Console.CursorLeft, fromTop - 1); | |||||
var length = Console.WindowHeight - fromTop - 1; | |||||
for (int i = 0; i < length; i++) { | |||||
Console.Write("".PadRight(Console.WindowWidth, ' ')); | |||||
} | |||||
Console.SetCursorPosition(0, fromTop); | |||||
} | |||||
public static void WriteCustomString(string text, int type, int offset = 11, ConsoleColor foregroundColor = ConsoleColor.DarkYellow, ConsoleColor backgroundColor = ConsoleColor.DarkYellow) | |||||
{ | |||||
bool resetColor = false; | |||||
ConsoleColor foregroundCache = Console.ForegroundColor; | |||||
ConsoleColor backgroundCache = Console.BackgroundColor; | |||||
if (foregroundColor == ConsoleColor.DarkYellow) { | |||||
foregroundColor = Console.ForegroundColor; | |||||
} | |||||
if (backgroundColor == ConsoleColor.DarkYellow) { | |||||
backgroundColor = Console.BackgroundColor; | |||||
} | |||||
if (Console.ForegroundColor != foregroundColor) { | |||||
resetColor = true; | |||||
Console.ForegroundColor = foregroundColor; | |||||
} | |||||
if (Console.BackgroundColor != backgroundColor) { | |||||
resetColor = true; | |||||
Console.BackgroundColor = backgroundColor; | |||||
} | |||||
switch (type) { | |||||
case 1: | |||||
// Indented and centered | |||||
Console.WriteLine(CenterString(text, offset)); | |||||
break; | |||||
case 2: | |||||
Console.WriteLine(text.Insert(0, new string(' ', offset))); | |||||
break; | |||||
case 3: | |||||
var loopOnce = false; | |||||
foreach (string line in text.Split('\n')) { | |||||
if (line == "") { | |||||
Console.WriteLine(); | |||||
continue; | |||||
} | |||||
Console.Write(line.Insert(0, new string(' ', offset))); | |||||
} | |||||
break; | |||||
default: | |||||
break; | |||||
} | |||||
if (resetColor) { | |||||
Console.ForegroundColor = foregroundCache; | |||||
Console.BackgroundColor = backgroundCache; | |||||
} | |||||
} | |||||
private static string CenterString(string text, int offset = 11, int width = 58) | |||||
{ | |||||
StringBuilder subLines = new StringBuilder(); | |||||
string newLine = ""; | |||||
foreach (string line in text.Split('\n')) { | |||||
if (!subLines.ToString().Equals("")) newLine = "\n"; | |||||
if (line == "" && !subLines.ToString().Equals("")) { | |||||
subLines.Append("\n"); | |||||
continue; | |||||
} | |||||
var space = ""; | |||||
if (!(line.Length % 2).Equals(0) && line.Length != width) { | |||||
space = " "; | |||||
} | |||||
if (line.Length > width) { | |||||
for (int index = 0; index < line.Length; index += (width - 10)) { | |||||
if (!subLines.ToString().Equals("")) newLine = "\n"; | |||||
var subLine = line.Substring(index, Math.Min(width - 10, line.Length - index)); | |||||
subLine = subLine.Trim(' '); | |||||
var subCentered = CenterString(subLine, offset, width); | |||||
subLines.Append(newLine + subCentered); | |||||
} | |||||
continue; | |||||
} | |||||
var leadingLength = (width - line.Length) / 2; | |||||
subLines.Append(newLine + space + line.PadLeft(line.Length + leadingLength, ' ').Insert(0, new string(' ', offset))); | |||||
} | |||||
return subLines.ToString(); | |||||
} | |||||
private const int MF_BYCOMMAND = 0x00000000; | |||||
public const int SC_CLOSE = 0xF060; | |||||
public const int SC_MINIMIZE = 0xF020; | |||||
public const int SC_MAXIMIZE = 0xF030; | |||||
public const int SC_SIZE = 0xF000;//resize | |||||
[DllImport("user32.dll")] | |||||
public static extern int DeleteMenu(IntPtr hMenu, int nPosition, int wFlags); | |||||
[DllImport("user32.dll")] | |||||
private static extern IntPtr GetSystemMenu(IntPtr hWnd, bool bRevert); | |||||
[DllImport("kernel32.dll", ExactSpelling = true)] | |||||
private static extern IntPtr GetConsoleWindow(); | |||||
public static void DisableResize() | |||||
{ | |||||
IntPtr handle = GetConsoleWindow(); | |||||
IntPtr sysMenu = GetSystemMenu(handle, false); | |||||
if (handle != IntPtr.Zero) | |||||
{ | |||||
//DeleteMenu(sysMenu, SC_CLOSE, MF_BYCOMMAND); | |||||
//DeleteMenu(sysMenu, SC_MINIMIZE, MF_BYCOMMAND); | |||||
DeleteMenu(sysMenu, SC_MAXIMIZE, MF_BYCOMMAND); | |||||
DeleteMenu(sysMenu, SC_SIZE, MF_BYCOMMAND);//resize | |||||
} | |||||
} | |||||
public static void EnableResize() | |||||
{ | |||||
IntPtr handle = GetConsoleWindow(); | |||||
GetSystemMenu(handle, true); | |||||
} | |||||
const uint CHECK_QUICK_EDIT = 0x0040; | |||||
const int ENABLE_QUICK_EDIT = 0x40 | 0x80; | |||||
// STD_INPUT_HANDLE (DWORD): -10 is the standard input device. | |||||
const int STD_INPUT_HANDLE = -10; | |||||
[DllImport("kernel32.dll", SetLastError = true)] | |||||
static extern IntPtr GetStdHandle(int nStdHandle); | |||||
[DllImport("kernel32.dll")] | |||||
static extern bool GetConsoleMode(IntPtr hConsoleHandle, out uint lpMode); | |||||
[DllImport("kernel32.dll")] | |||||
static extern bool SetConsoleMode(IntPtr hConsoleHandle, uint dwMode); | |||||
internal static void DisableQuickEdit() { | |||||
IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE); | |||||
// get current console mode | |||||
uint consoleMode; | |||||
GetConsoleMode(consoleHandle, out consoleMode); | |||||
// set the new mode | |||||
SetConsoleMode(consoleHandle, consoleMode &= ~CHECK_QUICK_EDIT); | |||||
} | |||||
internal static void EnableQuickEdit() { | |||||
IntPtr consoleHandle = GetStdHandle(STD_INPUT_HANDLE); | |||||
// get current console mode | |||||
uint consoleMode; | |||||
GetConsoleMode(consoleHandle, out consoleMode); | |||||
// set the new mode | |||||
SetConsoleMode(consoleHandle, consoleMode|(ENABLE_QUICK_EDIT)); | |||||
} | |||||
} | |||||
internal class Menu | |||||
{ | |||||
public List<string> Choices; | |||||
public string EndString; | |||||
public string Statement; | |||||
public int Offset; | |||||
public Menu(int offset = 16, string endString = null) | |||||
{ | |||||
Choices = new List<string>(); | |||||
EndString = endString; | |||||
Offset = offset; | |||||
} | |||||
public int Load() | |||||
{ | |||||
int max = -1; | |||||
var posCache = Console.CursorTop; | |||||
bool loopedOnce = false; | |||||
foreach (string choice in Choices) { | |||||
Console.SetCursorPosition(Offset - 2, Console.CursorTop); | |||||
if (!loopedOnce) { | |||||
Out.WriteCustomString("> " + choice, 2, 0, foregroundColor: ConsoleColor.Green); | |||||
loopedOnce = true; | |||||
} else { | |||||
Out.WriteCustomString(choice, 2, 2); | |||||
} | |||||
max += 1; | |||||
} | |||||
if (EndString != null) Out.WriteCustomString(EndString, 1); | |||||
if (Statement != null) Out.WriteCustomString(Statement, 2); | |||||
int index = 0; | |||||
ConsoleKey keyPressed; | |||||
Console.SetCursorPosition(Offset, posCache); | |||||
while ((keyPressed = Console.ReadKey(true).Key) != ConsoleKey.Enter) { | |||||
if (keyPressed == ConsoleKey.DownArrow) { | |||||
if (index >= max) continue; | |||||
Console.SetCursorPosition(Offset - 2, Console.CursorTop); | |||||
Out.WriteCustomString(Choices[index], 3, 2); | |||||
if (!String.IsNullOrEmpty(Choices[index + 1])) { | |||||
index += 1; | |||||
Console.SetCursorPosition(Offset - 2, Console.CursorTop + 1); | |||||
Out.WriteCustomString("> " + Choices[index], 3, 0, foregroundColor: ConsoleColor.Green); | |||||
} else { | |||||
index += 2; | |||||
Console.SetCursorPosition(Offset - 2, Console.CursorTop + 2); | |||||
Out.WriteCustomString("> " + Choices[index], 3, 0, foregroundColor: ConsoleColor.Green); | |||||
} | |||||
} | |||||
if (keyPressed == ConsoleKey.UpArrow) { | |||||
if (!(index > 0)) continue; | |||||
Console.SetCursorPosition(Offset - 2, Console.CursorTop); | |||||
Out.WriteCustomString(Choices[index], 3, 2); | |||||
if (!String.IsNullOrEmpty(Choices[index - 1])) { | |||||
index -= 1; | |||||
Console.SetCursorPosition(Offset - 2, Console.CursorTop - 1); | |||||
Out.WriteCustomString("> " + Choices[index], 3, 0, foregroundColor: ConsoleColor.Green); | |||||
} else { | |||||
index -= 2; | |||||
Console.SetCursorPosition(Offset - 2, Console.CursorTop - 2); | |||||
Out.WriteCustomString("> " + Choices[index], 3, 0, foregroundColor: ConsoleColor.Green); | |||||
} | |||||
} | |||||
} | |||||
return index; | |||||
} | |||||
} | |||||
public static class ParentProcess | |||||
{ | |||||
public static string ProcessName | |||||
{ | |||||
get { return GetParentProcess().ProcessName; } | |||||
} | |||||
private static Process GetParentProcess() | |||||
{ | |||||
int iParentPid = 0; | |||||
int iCurrentPid = Process.GetCurrentProcess().Id; | |||||
IntPtr oHnd = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); | |||||
if (oHnd == IntPtr.Zero) | |||||
return null; | |||||
PROCESSENTRY32 oProcInfo = new PROCESSENTRY32(); | |||||
oProcInfo.dwSize = | |||||
(uint)System.Runtime.InteropServices.Marshal.SizeOf(typeof(PROCESSENTRY32)); | |||||
if (Process32First(oHnd, ref oProcInfo) == false) | |||||
return null; | |||||
do | |||||
{ | |||||
if (iCurrentPid == oProcInfo.th32ProcessID) | |||||
iParentPid = (int)oProcInfo.th32ParentProcessID; | |||||
} | |||||
while (iParentPid == 0 && Process32Next(oHnd, ref oProcInfo)); | |||||
if (iParentPid > 0) | |||||
return Process.GetProcessById(iParentPid); | |||||
else | |||||
return null; | |||||
} | |||||
static uint TH32CS_SNAPPROCESS = 2; | |||||
[StructLayout(LayoutKind.Sequential)] | |||||
public struct PROCESSENTRY32 | |||||
{ | |||||
public uint dwSize; | |||||
public uint cntUsage; | |||||
public uint th32ProcessID; | |||||
public IntPtr th32DefaultHeapID; | |||||
public uint th32ModuleID; | |||||
public uint cntThreads; | |||||
public uint th32ParentProcessID; | |||||
public int pcPriClassBase; | |||||
public uint dwFlags; | |||||
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)] | |||||
public string szExeFile; | |||||
}; | |||||
[DllImport("kernel32.dll", SetLastError = true)] | |||||
static extern IntPtr CreateToolhelp32Snapshot(uint dwFlags, uint th32ProcessID); | |||||
[DllImport("kernel32.dll")] | |||||
static extern bool Process32First(IntPtr hSnapshot, ref PROCESSENTRY32 lppe); | |||||
[DllImport("kernel32.dll")] | |||||
static extern bool Process32Next(IntPtr hSnapshot, ref PROCESSENTRY32 lppe); | |||||
} | |||||
} |
@ -0,0 +1,35 @@ | |||||
using System.Reflection; | |||||
using System.Runtime.InteropServices; | |||||
// General Information about an assembly is controlled through the following | |||||
// set of attributes. Change these attribute values to modify the information | |||||
// associated with an assembly. | |||||
[assembly: AssemblyTitle("ame_status_check")] | |||||
[assembly: AssemblyDescription("")] | |||||
[assembly: AssemblyConfiguration("")] | |||||
[assembly: AssemblyCompany("")] | |||||
[assembly: AssemblyProduct("ame_status_check")] | |||||
[assembly: AssemblyCopyright("Copyright © 2022")] | |||||
[assembly: AssemblyTrademark("")] | |||||
[assembly: AssemblyCulture("")] | |||||
// Setting ComVisible to false makes the types in this assembly not visible | |||||
// to COM components. If you need to access a type in this assembly from | |||||
// COM, set the ComVisible attribute to true on that type. | |||||
[assembly: ComVisible(false)] | |||||
// The following GUID is for the ID of the typelib if this project is exposed to COM | |||||
[assembly: Guid("1C067083-0635-4B14-A975-60D0B97F9DDA")] | |||||
// Version information for an assembly consists of the following four values: | |||||
// | |||||
// Major Version | |||||
// Minor Version | |||||
// Build Number | |||||
// Revision | |||||
// | |||||
// You can specify all the values or you can default the Build and Revision Numbers | |||||
// by using the '*' as shown below: | |||||
// [assembly: AssemblyVersion("1.0.*")] | |||||
[assembly: AssemblyVersion("1.0.0.0")] | |||||
[assembly: AssemblyFileVersion("1.0.0.0")] |
@ -0,0 +1,22 @@ | |||||
# AME Integrity Check (ameck) | |||||
Program for checking the integrity of an AME installation. | |||||
![AME Integrity Check Screenshot](screenshot.png) | |||||
## Usage | |||||
You can download the script by going to the [latest release](https://git.ameliorated.info/Joe/ameck/releases/latest) and selecting `ameck.exe` from the **Downloads** section. Once downloaded, simply run `ameck.exe`. | |||||
## Compilation | |||||
Compiling the program is very simple: | |||||
1. Clone the repository: | |||||
`git clone https://git.ameliorated.info/Joe/ameck.git` | |||||
2. Open `ameck.sln` | |||||
3. Set the build configuration to `Release | Any CPU` | |||||
4. Build the project |
@ -0,0 +1,125 @@ | |||||
<?xml version="1.0" encoding="utf-8"?> | |||||
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" /> | |||||
<PropertyGroup> | |||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> | |||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> | |||||
<ProjectGuid>{1C067083-0635-4B14-A975-60D0B97F9DDA}</ProjectGuid> | |||||
<OutputType>Exe</OutputType> | |||||
<AppDesignerFolder>Properties</AppDesignerFolder> | |||||
<RootNamespace>ame_integrity_check</RootNamespace> | |||||
<AssemblyName>ameck</AssemblyName> | |||||
<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion> | |||||
<FileAlignment>512</FileAlignment> | |||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> | |||||
<PlatformTarget>x64</PlatformTarget> | |||||
<DebugSymbols>true</DebugSymbols> | |||||
<DebugType>full</DebugType> | |||||
<Optimize>false</Optimize> | |||||
<OutputPath>bin\Debug\</OutputPath> | |||||
<DefineConstants>DEBUG;TRACE</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
<Prefer32bit>false</Prefer32bit> | |||||
</PropertyGroup> | |||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> | |||||
<PlatformTarget>x64</PlatformTarget> | |||||
<DebugType>embedded</DebugType> | |||||
<Optimize>true</Optimize> | |||||
<OutputPath>bin\Release\</OutputPath> | |||||
<DefineConstants>TRACE</DefineConstants> | |||||
<ErrorReport>prompt</ErrorReport> | |||||
<WarningLevel>4</WarningLevel> | |||||
<Prefer32bit>false</Prefer32bit> | |||||
</PropertyGroup> | |||||
<ItemGroup> | |||||
<Reference Include="mscorlib" /> | |||||
<Reference Include="System" /> | |||||
<Reference Include="System.ComponentModel.Composition" /> | |||||
<Reference Include="System.Core" /> | |||||
<Reference Include="System.Data" /> | |||||
<Reference Include="System.IO.Compression.FileSystem" /> | |||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> | |||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath> | |||||
</Reference> | |||||
<Reference Include="System.Numerics" /> | |||||
<Reference Include="System.ServiceProcess" /> | |||||
<Reference Include="System.Xml" /> | |||||
<Reference Include="System.Xml.Linq" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<Compile Include="Program.cs" /> | |||||
<Compile Include="Properties\AssemblyInfo.cs" /> | |||||
</ItemGroup> | |||||
<ItemGroup> | |||||
<PackageReference Include="Costura.Fody" Version="5.7.0"> | |||||
<PrivateAssets>all</PrivateAssets> | |||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | |||||
</PackageReference> | |||||
<PackageReference Include="Fody" Version="6.5.5"> | |||||
<PrivateAssets>all</PrivateAssets> | |||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> | |||||
</PackageReference> | |||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="1.1.0" /> | |||||
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" /> | |||||
<PackageReference Include="NETStandard.Library" Version="1.6.1" /> | |||||
<PackageReference Include="System.AppContext" Version="4.3.0" /> | |||||
<PackageReference Include="System.Collections" Version="4.3.0" /> | |||||
<PackageReference Include="System.Collections.Concurrent" Version="4.3.0" /> | |||||
<PackageReference Include="System.Console" Version="4.3.0" /> | |||||
<PackageReference Include="System.Diagnostics.Debug" Version="4.3.0" /> | |||||
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="4.3.0" /> | |||||
<PackageReference Include="System.Diagnostics.EventLog" Version="7.0.0" /> | |||||
<PackageReference Include="System.Diagnostics.Process" Version="4.1.0" /> | |||||
<PackageReference Include="System.Diagnostics.Tools" Version="4.3.0" /> | |||||
<PackageReference Include="System.Diagnostics.Tracing" Version="4.3.0" /> | |||||
<PackageReference Include="System.Globalization" Version="4.3.0" /> | |||||
<PackageReference Include="System.Globalization.Calendars" Version="4.3.0" /> | |||||
<PackageReference Include="System.IO" Version="4.3.0" /> | |||||
<PackageReference Include="System.IO.Compression" Version="4.3.0" /> | |||||
<PackageReference Include="System.IO.Compression.ZipFile" Version="4.3.0" /> | |||||
<PackageReference Include="System.IO.FileSystem" Version="4.3.0" /> | |||||
<PackageReference Include="System.IO.FileSystem.Primitives" Version="4.3.0" /> | |||||
<PackageReference Include="System.Linq" Version="4.3.0" /> | |||||
<PackageReference Include="System.Linq.Expressions" Version="4.3.0" /> | |||||
<PackageReference Include="System.Net.Http" Version="4.3.0" /> | |||||
<PackageReference Include="System.Net.Primitives" Version="4.3.0" /> | |||||
<PackageReference Include="System.Net.Sockets" Version="4.3.0" /> | |||||
<PackageReference Include="System.ObjectModel" Version="4.3.0" /> | |||||
<PackageReference Include="System.Reflection" Version="4.3.0" /> | |||||
<PackageReference Include="System.Reflection.Extensions" Version="4.3.0" /> | |||||
<PackageReference Include="System.Reflection.Primitives" Version="4.3.0" /> | |||||
<PackageReference Include="System.Resources.ResourceManager" Version="4.3.0" /> | |||||
<PackageReference Include="System.Runtime" Version="4.3.0" /> | |||||
<PackageReference Include="System.Runtime.Extensions" Version="4.3.0" /> | |||||
<PackageReference Include="System.Runtime.Handles" Version="4.3.0" /> | |||||
<PackageReference Include="System.Runtime.InteropServices" Version="4.3.0" /> | |||||
<PackageReference Include="System.Runtime.InteropServices.RuntimeInformation" Version="4.3.0" /> | |||||
<PackageReference Include="System.Runtime.Numerics" Version="4.3.0" /> | |||||
<PackageReference Include="System.Security.Cryptography.Algorithms" Version="4.3.0" /> | |||||
<PackageReference Include="System.Security.Cryptography.Encoding" Version="4.3.0" /> | |||||
<PackageReference Include="System.Security.Cryptography.Primitives" Version="4.3.0" /> | |||||
<PackageReference Include="System.Security.Cryptography.X509Certificates" Version="4.3.0" /> | |||||
<PackageReference Include="System.Security.Principal.Windows" Version="5.0.0" /> | |||||
<PackageReference Include="System.ServiceProcess.ServiceController" Version="7.0.0" /> | |||||
<PackageReference Include="System.Text.Encoding" Version="4.3.0" /> | |||||
<PackageReference Include="System.Text.Encoding.Extensions" Version="4.3.0" /> | |||||
<PackageReference Include="System.Text.RegularExpressions" Version="4.3.0" /> | |||||
<PackageReference Include="System.Threading" Version="4.3.0" /> | |||||
<PackageReference Include="System.Threading.Tasks" Version="4.3.0" /> | |||||
<PackageReference Include="System.Threading.Timer" Version="4.3.0" /> | |||||
<PackageReference Include="System.Xml.ReaderWriter" Version="4.3.0" /> | |||||
<PackageReference Include="System.Xml.XDocument" Version="4.3.0" /> | |||||
</ItemGroup> | |||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> | |||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. | |||||
Other similar extension points exist, see Microsoft.Common.targets. | |||||
<Target Name="BeforeBuild"> | |||||
</Target> | |||||
<Target Name="AfterBuild"> | |||||
</Target> | |||||
--> | |||||
</Project> |
@ -0,0 +1,16 @@ | |||||
| |||||
Microsoft Visual Studio Solution File, Format Version 12.00 | |||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ameck", "ameck.csproj", "{B1D8E77E-A3AE-4B56-BE50-E47BB77F24A3}" | |||||
EndProject | |||||
Global | |||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution | |||||
Debug|Any CPU = Debug|Any CPU | |||||
Release|Any CPU = Release|Any CPU | |||||
EndGlobalSection | |||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution | |||||
{B1D8E77E-A3AE-4B56-BE50-E47BB77F24A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU | |||||
{B1D8E77E-A3AE-4B56-BE50-E47BB77F24A3}.Debug|Any CPU.Build.0 = Debug|Any CPU | |||||
{B1D8E77E-A3AE-4B56-BE50-E47BB77F24A3}.Release|Any CPU.ActiveCfg = Release|Any CPU | |||||
{B1D8E77E-A3AE-4B56-BE50-E47BB77F24A3}.Release|Any CPU.Build.0 = Release|Any CPU | |||||
EndGlobalSection | |||||
EndGlobal |