#NET

2026-01-30

When Malware Talks Back

A sophisticated multi-stage malware campaign employs living-off-the-land techniques and in-memory payload delivery to evade security controls. The infection chain begins with a hidden batch file that executes an embedded PowerShell loader, which then injects Donut-generated shellcode into legitimate Windows processes. The final payload is a heavily obfuscated .NET framework implementing advanced anti-analysis techniques, credential harvesting, surveillance capabilities, and remote system control. Data exfiltration occurs via Discord webhooks and Telegram bots. The malware, identified as Pulsar RAT, features live chat functionality and background payload deployment, demonstrating a modern, high-evasion Windows malware operation designed for long-term access and large-scale data theft.

Pulse ID: 697c7ba66b8f43dd7b4370c5
Pulse Link: otx.alienvault.com/pulse/697c7
Pulse Author: AlienVault
Created: 2026-01-30 09:36:38

Be advised, this data is unverified and should be considered preliminary. Always do further verification.

#CredentialHarvesting #CyberSecurity #DataTheft #Discord #InfoSec #Malware #NET #OTX #OpenThreatExchange #PowerShell #RAT #ShellCode #Telegram #Windows #bot #AlienVault

Krótkofalowcy 2.0 SP9FLDsp9fld@mastodon.radio
2026-01-30

Dziś (tym razem o 20:00 LT) nasz lokalny NET na 145.350 NFM! 📡
Serdecznie zapraszamy wszystkich krótkofalowców - również tych korzystających z tańszego sprzętu 😉
73!
KF2.0 SP9FLD

#NET #ham #hamradio #KF20 #klub #radio #NCS #Krakow #CQ #UKF #2m #lokalnie #SP9FLD

2026-01-30

winapp: Microsoft's CLI tool for cross-platform Windows development

With the CLI tool winapp, Microsoft wants to simplify Windows development for cross-platform developers. It handles SDK management and packaging.

heise.de/en/news/winapp-Micros

#NET #CC #Softwareentwicklung #GitHub #IT #Microsoft #Rust #news

2026-01-30

winapp: Microsofts CLI-Tool für die plattformübergreifende Windows-Entwicklung

Mit dem CLI-Tool winapp will Microsoft die Windows-Entwicklung für Cross-Platform-Entwickler vereinfachen. Es übernimmt SDK-Management und Packaging.

heise.de/news/winapp-Microsoft

#NET #CC #Softwareentwicklung #GitHub #IT #Microsoft #Rust #news

2026-01-30

Наш опыт формирования шаблона фоновых сервисов на базе .NET

Привет, Хабр! На связи снова разработчик из компании АльфаСтрахование. Наша скрам-команда занимается автоматизацией бизнес-процессов Операционного блока, и для решения многих задач нам часто требуются фоновые операции. В этой статье я расскажу о шаблоне фонового сервиса на .NET, который мы используем в своей работе

habr.com/ru/companies/alfastra

#альфастрахование #альфастрах #net #asp_net_core #c# #worker #workers #воркеры #фоновые_приложения

2026-01-30

Neu in .NET 10.0 [8]: Neuerungen für partielle Klassen in C# 14.0

In C# 14.0 gibt es nun auch partielle Konstruktoren und partielle Ereignisse.

heise.de/blog/Neu-in-NET-10-0-

#NET #C #DerDotnetDoktor #Developer #IT #news

2026-01-30

Вероятности и .NET: сравниваем библиотечные решения для оценки спортивных событий и не только

Как вычисляется шанс того, что теннисист возьмёт следующий гейм? Или что футбольная команда забьёт гол в течение пяти минут? Всё это — не просто угадайка, а работа математической модели, построенной на статистике и обрабатывающей события матча в реальном времени. В Altenar, разработчике решений для зарубежных операторов спортивных прогнозов, такие модели — часть большой системы. Моя команда работает над реализацией алгоритмов расчёта таких вероятностей. В этой статье рассказываю, как формулируется гипотеза, как из неё строится модель, почему это важнее, чем «просто посчитать формулу», и как мы выбирали между несколькими .NET-библиотеками по точности и скорости. Всё на примере тенниса. Это один из самых сложных видов спорта для моделирования: стандартные подходы здесь не работают, счёт специфический, а сила игрока выражается не в счёте, а в вероятности взять очко на своей подаче.

habr.com/ru/articles/990002/

#вероятности #net #с# #математика #спортивные_события

//devdigestdevdigest
2026-01-29

⚡️ JetBrains ships 2025.3 update for .NET tools

🏷️

devdigest.today/goto/5301

//devdigestdevdigest
2026-01-29

⚡️ ReSharper and Rider 2025.3.2 Bring Polished .NET Updates

🏷️

devdigest.today/goto/5300

How do Newtonsoft.Json and System.Text.Json cause unloadability issues?

Newtonsoft.Json and System.Text.Json are libraries that achieve one goal: to provide an easy way to parse JSON files by serializing and deserializing them. In modern .NET frameworks, such as .NET 10.0, AssemblyLoadContext was introduced to provide you a way to load and unload assemblies cooperatively, and it was first released with .NET Core 1.0.

As a result, it’s frequently used in cases where loading and unloading assemblies are required, such as the plugin system in a C# application. However, there is a massive drawback when it comes to unloading assemblies that internally use Newtonsoft.Json and System.Text.Json. When an assembly uses one of the two libraries and their serialization functions, and when unloading such assembly is requested by AssemblyLoadContext.Unload(), even if garbage collection is forced, the assembly will not unload.

We will use two small Nitrocid addons as examples: Nitrocid.Extras.Chemistry and Nitrocid.Extras.Mods. While the Chemistry addon becomes impossible to unload once the element command is used, the Mods addon also becomes impossible to unload once it registers its own settings instance to the settings manager. We will first take a look at Nitrocid.Extras.Mods.

Newtonsoft.Json – Nitrocid.Extras.Mods

The Tips addon includes a settings class that is defined like this:

 using Newtonsoft.Json;  using Nitrocid.Base.Kernel.Configuration;  using Nitrocid.Base.Kernel.Configuration.Instances;  using Nitrocid.Base.Kernel.Configuration.Settings;  using Nitrocid.Base.Kernel.Exceptions;  using Nitrocid.Base.Languages;  using Nitrocid.Base.Misc.Reflection.Internal;   namespace Nitrocid.Extras.Mods.Settings  {      /// <summary>      /// Configuration instance for Mods      /// </summary>      public partial class ModsConfig : BaseKernelConfig      {          /// <inheritdoc/>          [JsonIgnore]          public override SettingsEntry[] SettingsEntries          {              get              {                  var dataStream = ResourcesManager.GetData("ModsSettings.json", ResourcesType.Misc, typeof(ModsConfig).Assembly) ??                      throw new KernelException(KernelExceptionType.Config, LanguageTools.GetLocalized("NKS_MODS_SETTINGS_EXCEPTION_ENTRIESFAILED"));                  string dataString = ResourcesManager.ConvertToString(dataStream);                  return ConfigTools.GetSettingsEntries(dataString);              }          }      }  } 
 using Nitrocid.Base.Kernel.Configuration.Instances;   namespace Nitrocid.Extras.Mods.Settings  {      /// <summary>      /// Configuration instance for Mods      /// </summary>      public partial class ModsConfig : BaseKernelConfig      {          /// <summary>          /// Automatically start the kernel modifications on boot.          /// </summary>          public bool StartKernelMods { get; set; }          /// <summary>          /// Allow untrusted mods          /// </summary>          public bool AllowUntrustedMods { get; set; }          /// <summary>          /// Write the filenames of the mods that will not run on startup. When you're finished, write "q". Write a minus sign next to the path to remove an existing mod.          /// </summary>          public string BlacklistedModsString { get; set; } = "";          /// <summary>          /// Show the mod commands count on help          /// </summary>          public bool ShowModCommandsCount { get; set; } = true;      }  } 

Internally, Nitrocid uses Newtonsoft.Json to read the configuration entries from the user configuration files found under the following paths:

  • Windows: %LOCALAPPDATA%\KS\
  • Linux: ~/.config/ks/

So, in this case, the tips settings are stored in:

  • Windows: %LOCALAPPDATA%\KS\ModsConfig.json
  • Linux: ~/.config/ks/ModsConfig.json

When the current main branch of Nitrocid shuts down, it tells all the addon load context classes that the addon subsystem manages to unload all the addons’ load contexts when the addon finally unloads itself, as in the following code:

 [MethodImpl(MethodImplOptions.NoInlining)]  internal static void UnloadAddons()  {      Dictionary<string, string> errors = [];      for (int addonIdx = addons.Count - 1; addonIdx >= 0; addonIdx--)      {          var addonInfo = addons[addonIdx];          var addonInstance = addonInfo.Addon;          var alc = addonInfo.alc;          try          {              using var context = alc.EnterContextualReflection();              addonInstance.StopAddon();          }          catch (Exception ex)          {              DebugWriter.WriteDebug(DebugLevel.E, "Failed to stop addon {0}. {1}", vars: [addonInfo.AddonName, ex.Message]);              DebugWriter.WriteDebugStackTrace(ex);              errors.Add(addonInfo.AddonName, ex is KernelException kex ? kex.OriginalExceptionMessage : ex.Message);          }          finally          {              // Unload the assembly on garbage collection              alc.Unload();              addons.RemoveAt(addonIdx);          }      }       // Unload all addon assemblies      GC.Collect();      GC.WaitForPendingFinalizers();      GC.Collect();      if (errors.Count != 0)          throw new KernelException(KernelExceptionType.AddonManagement, LanguageTools.GetLocalized("NKS_KERNEL_EXTENSIONS_ADDONS_EXCEPTION_STOPFAILED") + $"\n  - {string.Join("\n  - ", errors.Select((kvp) => $"{kvp.Key}: {kvp.Value}"))}");  } 

When looking at this code, one thinks that all addon assemblies must unload once we call the garbage collector to force disposal of all load contexts. When Nitrocid shut down, we’ve placed the breakpoint at the stage where the RPC is supposed to stop, as seen here.

When looking at the output window, we have seen that some of the addons got unloaded successfully. However, all addons that used the kernel configuration subsystem to read their own configuration that the kernel knows about didn’t get unloaded, including the Mods addon, as per the output window:

 'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Calculators/Nitrocid.Extras.Calculators.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.UnitConv/Nitrocid.Extras.UnitConv.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.ColorConvert/Nitrocid.Extras.ColorConvert.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Dictionary/Nitrocid.Extras.Dictionary.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Caffeine/Nitrocid.Extras.Caffeine.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/ThemePacks/Nitrocid.ThemePacks.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.ThemeStudio/Nitrocid.Extras.ThemeStudio.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Hashes/Nitrocid.Extras.Hashes.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.BeepSynth/Nitrocid.Extras.BeepSynth.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons.Essentials/Extras.Images/Nitrocid.Extras.Images.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Docking/Nitrocid.Extras.Docking.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:\Users\aptiv\Aptivi\Source\Public\Nitrocid\public\Nitrocid\KSBuild\net10.0\Addons.Essentials\Extras.Images.Icons\Terminaux.Images.Icons.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons.Essentials/Extras.Images.Icons/Nitrocid.Extras.Images.Icons.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Pastebin/Nitrocid.Extras.Pastebin.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Chemistry/Nitrocid.Extras.Chemistry.dll'  'Nitrocid.exe' (CoreCLR: clrhost): Unloaded 'C:/Users/aptiv/Aptivi/Source/Public/Nitrocid/public/Nitrocid/KSBuild/net10.0/Addons/Extras.Notes/Nitrocid.Extras.Notes.dll' 

That’s 15 addons out of 31 addons! Now, let’s use Visual Studio to examine the situation. We are now at the RemoteProcedure.StopRPC() line, and the we’ve seen that 16 addons didn’t get unloaded, when they’re supposed to. Looking at the Diagnostic tools > Memory Usage and taking a snapshot of the memory, we’ve seen an object type of Newtonsoft.Json.Serialization.JsonProperty in the object type view of the snapshot. The count was 1715, the size was 376608, and the inclusive size was 5918488.

Digging deeper revealed something interesting.

This revealed that Newtonsoft.Json has been caching properties as soon as the Nitrocid kernel processes and reads the configuration, as per:

 if (ConfigTools.IsCustomSettingBuiltin(typeName))      baseConfigurations[typeName] = (BaseKernelConfig?)JsonConvert.DeserializeObject(jsonContents, type.GetType()) ??          throw new KernelException(KernelExceptionType.Config, LanguageTools.GetLocalized("NKS_KERNEL_CONFIGURATION_EXCEPTION_BASECONFIGDESERIALIZE"), typeName);  else      customConfigurations[typeName] = (BaseKernelConfig?)JsonConvert.DeserializeObject(jsonContents, type.GetType()) ??          throw new KernelException(KernelExceptionType.Config, LanguageTools.GetLocalized("NKS_KERNEL_CONFIGURATION_EXCEPTION_CUSTOMCONFIGDESERIALIZE"), typeName); 

The default contract resolver contains caches to contracts for each type, which, in turn, caches the properties as seen here:

This improves performance of future JSON operations, but causes unloading to fail due to them being strong references.

System.Text.Json – Nitrocid.Extras.Chemistry

When it comes to System.Text.Json, we’ve run another Nitrocid session and ran the element Br command to let ChemiStar load all elements before we shut the kernel down to tell all assemblies to unload. This caused the Chemistry addon to no longer unload. We’ve used the memory snapshot function and searched for ChemiStar-related classes, and got the JSON type info and property info instances that are related to how caching works.

As you can see, we have JSON serialization options that caches the types and the properties for performance reasons. However, those, again, cause unloading issues.

In general, mods and addons that use any of Newtonsoft.Json and System.Text.Json’s serialization functions will no longer be able to be unloaded once Nitrocid shuts down. You can find more information in one of the GitHub issues listed here:

#Net #Net100 #dotnet #news #NewtonsoftJson #SystemTextJson #Tech #Technology #update

//devdigestdevdigest
2026-01-28

⚡️ .NET AI Essentials redefines intelligent app building

🏷️

devdigest.today/goto/5296

2026-01-28
//devdigestdevdigest
2026-01-27

⚡️ Visual Studio adds long‑awaited editor controls

🏷️

devdigest.today/goto/5295

2026-01-27

GreatEasyCert или как реализовать контейнер ключа по ГОСТу

Привет, Хабр! Меня зовут Гоша, я старший инженер-программист в Контуре. Практически любой сценарий ЭДО связан с использованием криптографии, будь то ЭДО с государством или контрагентами: где-то нужно подписать документы, где-то зашифровать архив с отчетом, где-то проверить подпись документа от контрагента. Каждый из таких сценариев хочется тестировать не на реальных данных, но на наиболее похожих в реальности. Помимо самих данных нам нужны сертификаты, имитирующие сертификаты участников ЭДО: организаций, физлиц, государственных органов. Ранее для генерации тестовых сертификатов мы использовали сервис на базе ПАК УЦ , проприетарной штуки, выпускающей сертификаты по определённым правилам, не позволяя издеваться над сроками действия серта как хочется. Отсюда появилась идея в качестве эксперимента написать небольшой сервис, который мог бы генерировать какие угодно сертификаты с ГОСТ-алгоритмами, но при этом успешно работающие с КриптоПро. В этой статье хочу поделиться, какая техника скрывается под капотом такой функциональности.

habr.com/ru/companies/skbkontu

#net #криптография #криптопро #сертификаты #pki #гост_34 #pfx #pbkdf2 #pbes2 #криптопровайдер

//devdigestdevdigest
2026-01-27

⚡️ Building Custom Metrics with System.Diagnostics.Metrics

🏷️

devdigest.today/goto/5294

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst