Pull to refresh
8
0

Программист

Непонятно что за "Европа", ибо от страны зависит.
Ну и непонятно что сложного в контролировании, ибо в части европейских стран презумпция невиновности не распространяется на доход и на приобретение, в отличии от РФии.

Это если мы рассматриваем только про деньги внутри еврозоны, а не про внешние деньги. Тут уже другая история.

Ты будешь удивлён узнав от куда появляются китайские подделки. ;)

Это в корне всё меняет. Автор нашёл дыру и сообщил стороннему лицу.

Получается что "техноблоггер" сообщил об уязвимости, а обвиняемый - распространил способ использования уязвимости для доступа к данным.

Ну вот и повод для проверки - загрузить GDPR отчёт и сравнить его, превентивно удалив локальный кеш толстого клиента.

Я со слухами не дружу и где там строчит какой-то Медведев - меня не сильно волнует.

Если телегу никто не отожмёт как ВК, то пока он вполне держит свои обещания

ВК под Windows? ВК мессенджер под Windows, судя по новостям, вышел только год назад

https://habr.com/en/news/718278/

Так можно ведь просто запросить все данные по GDPR и посмотреть что у них на самом деле хранится для конкретного пользователя:
https://telegram.org/faq#q-what-about-gdpr

Telegram only keeps the information it needs to function as a feature-rich cloud service. For example, your cloud chats – so that you can access them from any devices without using third-party backups, or your contacts – so that you can rely on your existing social graph when messaging people on Telegram. Please see our Privacy Policy for more information.

You can use @EURegulation to:

  • Request a copy of all your data that Telegram stores.

  • Contact us about Data Privacy.

Если, вдруг, потом выяснится что телега кому-то слила данные, хотя официально на сайте заявлено: https://telegram.org/privacy?setln=en#8-3-law-enforcement-authorities

If Telegram receives a court order that confirms you're a terror suspect, we may disclose your IP address and phone number to the relevant authorities. So far, this has never happened. When it does, we will include it in a semiannual transparency report published at: https://t.me/transparency.

То про это будет сразу известно.

Собянин уже пробовал реализовать такую систему и она не работает, ибо в новых телефоах рандомайзер на MAC адрес стоит по умолчанию.

Но систему сделали, бабки отмыли, так что все довольны.

Согласен, я что-то в контексте NuGet пакетов остался, а тут уже другая ветка

Нынче уже даже VS автоматом с каждой новой версии build number автоматом может инкрементить.

Тем более CI/CD это умеют, даже бесплатные:
https://github.com/DKorablin/PEReader/blob/master/.github/workflows/release.yml#L43

Это вот прям уже что-то совсем специфичное когда надо подменять сборку без идентификации. Потом ведь трассировку не собрать без конкретной идентификации...

О, спасибо. Видел постоянно в (MFC), но как назвается - не знал.

По поводу звенринца сборок MS тоже уже позаботилась, так что начиная с .NET 5 есть PackageCompilationAssemblyResolver, который ищет шаренные сборки в локальном нугете. (Останется только их туда положить и все приложения которые используют кастомный AssemblyLoadContext могут их тягать от туда)

Не всё так плохо.
Проблема DLL Hell заключалась в одном ключе для поиска экспортируемой функции (Название файла - считаем ничтожным).
Т.е. GetProcAddress требовал только название функции, причём без списка входящих аргументов. В результате, мы вызываем функцию передавая указатель на что-то, что в итоге не знает не только отправивший, но и получивший. (Получивший тоже получал адрес на аргумент(ы), но не значение конкретного типа).

В новых версиях .NET'а произошёл только отказ от безопасности сборок исходя из PublicKeyToken. При этом, он остался в качестве идентификатора сборки и его всё ещё можно использовать. В итоге для идентификации сборки у нас остаётся:

  • AssemblyName - Полное название родительской сборки (с версией и ключом) вшитое в метаданные

  • MemberRef - Название метода с типами аргументов, ожидаемые в родительской сборке

Для идентификации сборки лучше использовать snk, но это в рамках одной сборки, а вот как сделать простую защиту от подмены версии, тут уже сложнее и скорее всего что-то с костылями будет. Предположительно можно что-то на уровне AOP сообразить, но со всеми лимитациями конкретного CLR...

Без Enum'ов будет очень печально читать побитовый код :)

	[Flags]
	public enum TestValues
	{
		One = 1 << 0,
		Two = 1 << 1,
		Three = 1 << 2,
		Four = 1 << 3,
		Five = 1 << 4,
	}

		TestValues val1 = TestValues.One | TestValues.Three | TestValues.Five;
		TestValues check1 = TestValues.One | TestValues.Five;
		if((val1 & check1) == check1)
			Console.WriteLine("Success");

		Int32 val2 = 21;
		if((val2 & 17) == 17)
			Console.WriteLine("Success");

Можно, конечно, открыть калькулятор, или выучить один раз, но, боюсь, при сложных вычислениях это будет как с регулярными выражениями :)

Enum ведёт себя без дополнительных проверок как user friendly описание константы.

И без дополнительных проверок undefined значение подходящего базового типа тоже будет считаться валидным значением даже при (де)сериализации:

https://ideone.com/tqpHcN

Я больше отвечал на этот комментарий:

А вот про как раз enum который вы упомянули это не константа. Можете посмотреть рефлексией - значения enum это поля, а вовсе не константы.

Для примера добавил в CommonLib.bat 2 поля рядом со значениями Enum (Я как раз этот момент тоже в статье демонстрировал, что значение enum является константным и копируется в доченюю сборку при компиляции):

  • public const Int32 ConstantValue=123;

  • public static readonly Int32 CtorInitValue=321;

/*
@echo off && cls
set WinDirNet=%WinDir%\Microsoft.NET\Framework
IF EXIST "%WinDirNet%\v2.0.50727\csc.exe" set csc="%WinDirNet%\v2.0.50727\csc.exe"
IF EXIST "%WinDirNet%\v3.5\csc.exe" set csc="%WinDirNet%\v3.5\csc.exe"
IF EXIST "%WinDirNet%\v4.0.30319\csc.exe" set csc="%WinDirNet%\v4.0.30319\csc.exe"
%csc% /nologo /target:library  /out:"CommonLib.dll" %0
goto :eof
*/
using System;


namespace CommonLib
{
public class Test{
    public const Int32 ConstantValue=123;
    public static readonly Int32 CtorInitValue=321;
}
    public enum SharedEnum : int
    {
   	 Undefined = 0,
   	 First = 1,
   	 Second = 2,
   	 Third = 3,
    }
}

Убрал .ctor чтобы не машал:

.namespace CommonLib
{
	.class public auto ansi sealed CommonLib.SharedEnum
		extends [mscorlib]System.Enum
	{
		// Fields
		.field public specialname rtspecialname int32 value__
		.field public static literal valuetype CommonLib.SharedEnum Undefined = int32(0)
		.field public static literal valuetype CommonLib.SharedEnum First = int32(1)
		.field public static literal valuetype CommonLib.SharedEnum Second = int32(2)
		.field public static literal valuetype CommonLib.SharedEnum Third = int32(3)

	} // end of class CommonLib.SharedEnum

	.class public auto ansi beforefieldinit CommonLib.Test
		extends [mscorlib]System.Object
	{
		// Fields
		.field public static literal int32 ConstantValue = int32(123)
		.field public static initonly int32 CtorInitValue

		// Methods
		.method private hidebysig specialname rtspecialname static 
			void .cctor () cil managed 
		{
			// Method begins at RVA 0x2050
			// Header size: 1
			// Code size: 11 (0xb)
			.maxstack 8

			IL_0000: ldc.i4 321
			IL_0005: stsfld int32 CommonLib.Test::CtorInitValue
			IL_000a: ret
		} // end of method Test::.cctor

	} // end of class CommonLib.Test

}

Никакой разницы

Enum - это тоже константа и зачастую она как раз используется вовне. По поводу что нельзя использовать константы, то зависит от проекта и можно-ли собирать константы, скажем, в ресурсах сборки.

Даже в BCL Int32.MaxValue/ Int32.MinValue объявлены константами, что зачастую очень удобно, а вот String.Empty уже статик. Что позволяет его использовать в рантайме, но не позволяет его использовать как значение аргумента в атрибуте.

Information

Rating
5,168-th
Location
Исламабад, Пакистан, Пакистан
Registered
Activity