C# .NET and Enigma Protector
Re: C# .NET and Enigma Protector
Да многим это интересно. Давай начнем с простого примера. Два приложения обмениваются сериализованным объектом через pipe. Одно под нет коре 3 https://dotnet.microsoft.com/download/dotnet-core/3.0, второе скомпилировано через corert
https://my.pcloud.com/publink/show?code ... hSmkFAqjGy
Задача - вытащить сорцы
Я не силен в реверсе но код получается похожим (просмотр в hex редакторе ) на то что генерирует .net native в UWP приложениях
https://my.pcloud.com/publink/show?code ... hSmkFAqjGy
Задача - вытащить сорцы
Я не силен в реверсе но код получается похожим (просмотр в hex редакторе ) на то что генерирует .net native в UWP приложениях
Re: C# .NET and Enigma Protector
Да, в явном виде ничего нет. Я сомневался, потому что увидел вот это:
Re: C# .NET and Enigma Protector
Если добавить в csproj
Первые две опции и так активны по умолчанию но лучше подстрахаваться (https://github.com/dotnet/corert/blob/m ... -corert.md)
Получается вот так:
Исходник:
Еще можно поэксперементировать с IlcFoldIdenticalMethodBodies и IlcGenerateStackTraceData
Code: Select all
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<IlcGenerateCompleteTypeMetadata>true</IlcGenerateCompleteTypeMetadata>
<RootAllApplicationAssemblies>true</RootAllApplicationAssemblies>
<IlcOptimizationPreference>Speed</IlcOptimizationPreference>
</PropertyGroup>
Получается вот так:
Исходник:
Code: Select all
private bool DeadLockCheck(out ICollection<IBotTask> tasks)
{
tasks = new List<IBotTask>();
var extra = Services.Container.GetInstance<IExtra>();
var hand = Services.Container.GetInstance<IHand>();
var handCount = hand.Count();
if (handCount == 0)
return false;
if (handCount == LastHandSize &&
extra.IsOurTurn == true)
{
SameHandSizeTimes++;
}
else
{
LastHandSize = handCount;
SameHandSizeTimes = 0;
}
if (SameHandSizeTimes >= MaxSameHandSize)
{
tasks.Add(new TooltipTask("[DEADLOCK] Lets try to press some keys"));
tasks.Add(new KeyboardTask(Messaging.VKeys.Left));
tasks.Add(new KeyboardTask(Messaging.VKeys.Enter));
return true;
}
return false;
}
Re: C# .NET and Enigma Protector
Конечно https://my.pcloud.com/publink/show?code ... 2bW5TGpzHk Я так понял название классов остается для совместимости с рефлексией и сериализации
Re: C# .NET and Enigma Protector
Да, подтверждаю, файл скомпилирован в нейтив, очень интересно. Явно managed кода в файле не прописано.
Хотя это не значит, что его там нет. Смущает название первой секции как "managed", вполне возможно там лежит managed код, который запускается вручную при старте программы (а значит его можно достать).
Можете в этот файл добавить пару вызовов Enigma API - EP_Marker с параметрами:
EP_Marker("vm_begin") и EP_Marker("vm_end")?
Интересно проверить, будут ли в такой конструкции работать маркеры виртуализации кода.
Хотя это не значит, что его там нет. Смущает название первой секции как "managed", вполне возможно там лежит managed код, который запускается вручную при старте программы (а значит его можно достать).
Можете в этот файл добавить пару вызовов Enigma API - EP_Marker с параметрами:
EP_Marker("vm_begin") и EP_Marker("vm_end")?
Интересно проверить, будут ли в такой конструкции работать маркеры виртуализации кода.
Re: C# .NET and Enigma Protector
Попробуем спросить у разрабов https://github.com/dotnet/corert/issues/7401
По поводу маркеров. Их как то вот так оформить в нет коде ?
По поводу маркеров. Их как то вот так оформить в нет коде ?
Code: Select all
byte[] vm_start = new byte[] {
0xEB, 0x08, 0x56, 0x4D, 0x42, 0x45, 0x47, 0x49, 0x4E, 0x00
};
Re: C# .NET and Enigma Protector
Открыл The Enigma Protector\Examples\ProtectedStrings\C# (.NET)\Enigma_IDE.cs и там такой функции нет. Это, наверное, потому что я пока только присматриваюсь к продукту и у меня демка Я попробую потом с простым x86 проектом.
Кстати разраб ответил, можем быть спокойны
https://github.com/dotnet/corert/issues ... -489658520
Кстати разраб ответил, можем быть спокойны
https://github.com/dotnet/corert/issues ... -489658520