Laden...
C
cprogrammer
myCSharp.de - Member
28
Themen
73
Beiträge
Letzte Aktivität
vor einem Jahr
Dabei seit
07.05.2023
Erstellt vor einem Jahr

Zitat von T-Virus

Die meisten hier haben sich diese Erfahrung durch Jahre langes einarebiten mit lesen, Videos schauen und probieren beigebracht.

Sag ich ja, wer sich Jahre lang mit einem Thema befasst, der kennt sich gut aus, nix worauf man sich etwas einbilden müsste.

Nimm dein Wissen mit ins Grab.

Erstellt vor einem Jahr

Im Prinzip kann man sich alles ergoogeln und anlesen, dann erübrigt sich auch dieses Forum hier.

Mit mergen meinte ich, ob mann aus der cpp.dll und der c#.dll eine datei machen kann, aber auch das habe ich mir gegoogelt:

https://www.codeproject.com/Messages/1424822/Using-ILMerge-to-embedd-Cplusplus-DLL-into-Csharp.aspx

Ihr seid wirklich ein hilfbereiter Haufen hier, selten solch charmante Menschen erlebt.

Wenn man sich Jahrzente lang mit ein und demselben Thema befasst, kennt man sich natürlich auch sehr gut damit aus, das liegt in der Natur der Sache und ist keine besondere Begabung (auch wenn sich das gewisse Oberschlaumeier einbilden). Allerdings ist es eine besondere Begabung sich mal in andere Menschen zu versetzten, die vielleicht nicht diesselbe Erfahrung und Screentime haben.

Erstellt vor einem Jahr

Hallo,

ich habe eine c++ dll in meinen c# code eingebunden:

using System.Runtime.InteropServices;
   class Hello
   {
       static void Main(string[] args)
       {
       [DllImport("CPPTestDLL.dll", CallingConvention = CallingConvention.Cdecl)]
       static extern int subtract(int a, int b);

       int x = 10;
       int y = 5;
       int z = subtract(x, y);
       System.Console.WriteLine($"{z}");

       }
   }
#include < stdio.h >
#include <pch.h>
extern "C" 
{
   __declspec(dllexport) int add(int a, int b) {
       return a + b;
   }
   __declspec(dllexport) int subtract(int a, int b) {
       return a - b;
   }
}

Wenn nun gilt:

decimal x = 10;
decimal y = 5;
decimal z = subtract(x, y);

Welchen Datentyp müsste ich in c++ wählen bzw. wie könnte man das lösen ?

Falls es sich beim C# code um eine dll handelt, gibt es eine Möglichkeit beide zu mergen, so dass ich letztlich nur eine dll habe ?

besten Dank für ein paar Tipps.

Erstellt vor einem Jahr

Hallo,

habt Ihr ein paar Tipps bzw. könnt Ihr Anbieter empfehlen, mit denen man serverbasiert Softwarelizenzen vergeben und überwachen kann.

Erstellt vor einem Jahr

Hallo,

kann man davon ausgehen, dass die hier angebotene Code Virtualisierung, wie sie auch von diversen anderen Produkten angeboten wird, einen effektiven Schutz darstellt ?

https://www.gapotchenko.com/eazfuscator.net/features/virtualization

Wie sind eure Erfahrungen mit diesem Mechanismus ?

Alternativ:

Macht es Sinn z.B. kritische Codeteile anstatt in C# in C++ oder C zu formulieren, eine dll damit zu erzeugen und diese dll dann in den C#-Code einzubinden ?

Könnte man eine C# dll mit einer C++ dll "verschmelzen, so dass nur eine dll übrig bleibt und wäre der C++ Teil dann weitestgehend sicher vor den üblichen Tools ?

Erstellt vor einem Jahr

Oben wurde geschrieben: "Sobald der Code ausgeführt wird, lässt sich das mit einem Debugger rekonstruieren."

Wo und wie setzt du hier den Einstieg, denn du hast ja weder den Sourcecode, noch das pdb file ?

Insgesamt wäre es dennoch interessant zu wissen wie das funktioniert.

Die obfuscated Klassen sehen nach der Obfuscation beispielhaft so aus:


internal sealed class XYZ
{
    internal SortedList<double, abc> Name { get; set; }

    [MethodImpl(MethodImplOptions.NoInlining)]
    internal YXZ()
    {
    }
    [MethodImpl(MethodImplOptions.NoInlining)]
    internal void Method1(XYZ name zone)
    {
    }
    [MethodImpl(MethodImplOptions.NoInlining)]
    internal void AddMethod()
    {
    }
    [MethodImpl(MethodImplOptions.NoInlining)]
    internal void RemoveMethod()
    {
    }
    [MethodImpl(MethodImplOptions.NoInlining)]
    static XYZ()
    {
        <AgileDotNetRTPro>.Initialize();
        <AgileDotNetRTPro>.PostInitialize();
    }
}

Also alle Methoden leer und die untere Methode wird aufgerufen.

Als Assemly existiert eine AgileDotNetRTPro.dll, welche mit dem ursprünglichen Projekt nix zu tun hat.

Die letzte static Methode wurde hinzugefügt.

Erstellt vor einem Jahr

Hallo, normalerweise werden bei Obfuscation ja codeteile verändert, aber sind (mit gewissem Aufwand) immer noch lesbar.

Hier ist etwas, was scheinbar bullet proof ist.

Alle Methoden der Applikation sind leer und gekennzeichnet mit:

[MethodImpl(MethodImplOptions.NoInlining)]
    protected override void OnConnectionStatusUpdate(ConnectionStatusEventArgs status)
    {
    }

zu den Referenzen gehören u.a.

kernel32.dd

AgileDotNetRT64Pro.dll

AgileDotNetRTPro.dll

Letztere dll stellt eine Klasse mit Methoden bereit, mit denen die eigentliche (geschützte) Applikation scheinbar Initialisiert und geladen wird, fraglich ist nur wie und von wo, letztlich wird sie ja ausgeführt:

internal static IntPtr Load()
    {
        WindowsImpersonationContext windowsImpersonationContext = WindowsIdentity.Impersonate(IntPtr.Zero);
        Type typeFromHandle;
        Monitor.Enter(typeFromHandle = typeof(global::<AgileDotNetRTPro>));
        string text = ((IntPtr.Size != 4) ? "AgileDotNetRT64Pro.dll" : "AgileDotNetRTPro.dll");
        string text2 = Path.Combine(Path.GetDirectoryName(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath), text);
        if (!File.Exists(text2))
        {
            text2 = text;
        }
        IntPtr result = LoadLibraryA(text2);
        windowsImpersonationContext.Undo();
        Monitor.Exit(typeFromHandle);
        return result;
    }
 internal static int InitializeThroughDelegate(IntPtr P_0)
    {
        IntPtr intPtr = Load();
        IntPtr procAddress = GetProcAddress(intPtr, "_Initialize");
        global::InitializeDelegate initializeDelegate = (global::InitializeDelegate)Marshal.GetDelegateForFunctionPointer(procAddress, typeof(global::InitializeDelegate));
        return initializeDelegate(P_0);
    }

Kann jemand was dazu sagen, wie das hier funktionieren könnte, wäre zu Lehrzwecken schon recht interessant ?

Erstellt vor einem Jahr

Ich arbeite mit einer dll und m.E. ohne Windows Forms.

Wenn ich WindowsBase mit using einbinde, dann meckert er auch und sagt es sei "unnessesary".

Erstellt vor einem Jahr

Im Projekt unter Frameworks - Microsoft.NetCore.App ist WindowsBase vorhanden, ja, und auch SystemWindows.

Erstellt vor einem Jahr

Ja, hatte ich ja auch geschrieben, dennoch kennt es der Compiler nicht, siehe Bild.