Frage zu: Im Projekt integrierte Dateien

JK_net

Erfahrenes Mitglied
Hallo!

Ich habe in meinem C#-Projekt eine XML-Datei integriert um Benutzereinstellungen zu speichern.

Meine Frage dazu ist, wie sicher ist diese Datei nach außen, wenn ich dort z.B. Passworte speicher? Lässt sich überhaupt von außen auf diese Datei zu greifen?

MfG
Jens
 
Sowas solltest Du darin immer verschlüsselt abspeichern, ist doch klar.
XML-Dateien lassen sich ohne Probleme in jedem HTML Browser anschauen.

Du könntest deine BenutzerDaten auch binär serialisieren ( ist aber nicht das gelbe vom Ei ).
Ich verschlüssele meine Serialisierten Beutzerdaten oder erstellte XML-Dateien immer hinterher.

MfG cosmo
 
Hi.

Wenns jetzt mal nur ein Passwort geht das gespeichert wird. Du könntest von diesem Passwort auch einen Hashwert speichern. Wenn der Benutzer sich authentifizieren muss wird sein eingegebenes Passwort mit dem selben Algorithmus gehasht und mit dem gespeicherten Hash verglichen.

MfG,
Alex
 
Hi!

Nochmal zu der Datei, die ist ja in der *.exe mit drin. Lässt sich trotzdem von "außen" ansehen?
Wie kann ich das machen? Sorry, ich kenne mich nicht so aus mit dem Verschlüsseln...

MfG
Jens
 
Hi.

Diese eingebettete Datei ist von aussen nur durch spezielle Tools sichtbar, irgendwie bekommt man sie sicher raus. Dir sollte aber eines klar sein, diese Datei wirst du nicht verändern können.

MfG,
Alex
 
Fragestellung:
JK_net hat gesagt.:
Ich habe in meinem C#-Projekt eine XML-Datei integriert um Benutzereinstellungen zu speichern.
Wie willst Du überhaupt was in einer Integrierten XML Datei überhaupt was abspeichern?
JK_net hat gesagt.:
Nochmal zu der Datei, die ist ja in der *.exe mit drin.

Schau mal in den [thread=176748]Thread[/thread]. Dort geht es darum Beutzereingaben zu speichern. Entweder in ein XML oder in die App.config.

MFG cosmo
 
Das Speichern und ändern / auslesen von Daten aus dieser Datei ist kein Problem, das funktioniert bei mir einwandfrei.

Ich habe dem Programm einfach eine XML-Datei hinzugefügt. Das sie von außen nicht bearbeitbar ist, ist völlig OK, ich wollte nur wissen, ob man da grundsätzlich von außen herankommen würde, oder ob es schwierig ist.

MfG
Jens
 
JK_net hat gesagt.:
Das Speichern und ändern / auslesen von Daten aus dieser Datei ist kein Problem, das funktioniert bei mir einwandfrei.

Ich habe dem Programm einfach eine XML-Datei hinzugefügt. Das sie von außen nicht bearbeitbar ist, ist völlig OK, ich wollte nur wissen, ob man da grundsätzlich von außen herankommen würde, oder ob es schwierig ist.

MfG
Jens

Es ist einfach. Kannst dir ja mal das folgende Programm ansehen.

Code:
/*
 * a simple assembly information display application .. bla
 * (c) 2004 Alexander Schuc <aschuc@furred.net>
 *
 * free for use and distribution .. ;)
 *
 */

using System;
using System.IO;
using System.Reflection;

namespace furred.Tools
{
  public class AssemblyInformation
  {

    public static void Main(string[] args)
    {
      if (args.Length < 1)
      {
        Console.WriteLine("usage resinfo [options] asssembly.(exe|dll)");
        return;
      }
      else
        new AssemblyInformation(args[args.Length-1]);
      
    }

    private string asm_path;
    private Assembly asm;
    private static string NL = Environment.NewLine;
    
    public AssemblyInformation(string file)
    {
      asm_path = file;

      if (init())
        loop();
    }

    private void loop()
    {
      while (true)
      {
          for (int i = 0; i < 6; i++)
            Console.Write(NL);

          Console.Write("\t## Assembly Information{0}\t1) File Info{1}\t2) Ressource Information{2}\t3) Save Ressource{3}{4}\t0) Quit{5}"
              , NL, NL, NL, NL, NL, NL);

          int code = -1;

          Console.Write("\t> ");
          
          try
          {
            code = int.Parse(Console.ReadLine());
            Console.WriteLine();
          }
          catch (Exception ex)
          {
            Console.WriteLine("\tINVALID COMMAND");
            continue;
          }

          if (processCode(code))
            break;
        
      }
    }

    private bool processCode(int code)
    {
      switch (code)
      {
        case 1: showFileInfo(); break;
        case 2: listRessources(); break;
        case 3: saveRessource(); break;
        case 0: return true;
      }

      return false;
    }

    private void showFileInfo()
    {
      Console.WriteLine("\tCurrent file:\t{0}", asm_path);
      Console.WriteLine("\tLocation:\t{0}", asm.Location);
      Console.WriteLine("\tFull name:\t{0}", asm.FullName);
      Console.WriteLine("\tImage Runtime Version:\t", asm.ImageRuntimeVersion);
    }

    private void listRessources()
    {
      string[] names = asm.GetManifestResourceNames();

      for (int i = 0; i < names.Length; i++)
      {
        Console.WriteLine("\t#{0} - {1}", i, names[i]);
      }
      Console.WriteLine();
      Console.WriteLine("To save one of these files in a file, remember the number of the file and use the 'Save Ressource' command");
    }

    private void saveRessource()
    {
      Console.WriteLine("\t### Save Ressource");
      Console.Write("\tPlease enter the number of the file: ");
      int num;
      try
      {
        num = int.Parse(Console.ReadLine());
      }
      catch (Exception ex)
      {
        Console.WriteLine("INVALID ARGUMENT!");
        return;
      }

      if (num >= asm.GetManifestResourceNames().Length)
      {
        Console.WriteLine("INVALID ARGUMENT!");
        return;
      }

      string filename = asm.GetManifestResourceNames()[num];
      int bytes;

      using (FileStream fs = File.Create(filename))
      {
        using (BinaryWriter bw = new BinaryWriter(fs))
        {
          using (Stream strm = asm.GetManifestResourceStream(filename))
          {
            bytes = (int)strm.Length;
            byte[] buffer = new byte[bytes];
            strm.Read(buffer, 0, bytes);
            bw.Write(buffer);
          }
        }
      }

      Console.WriteLine("\t{0} Bytes written to \"{1}\"", bytes, filename);
    }

    private bool init()
    {
      if (!File.Exists(asm_path))
      {
        Console.WriteLine("File not found!");
        return false;
      }

      asm = Assembly.LoadFrom(asm_path);
      
      return true;
    }
    
  }
}

MfG,
Weihnachtswiesel
(aka Alex)
 

Anhänge

  • resinfo.zip
    3,8 KB · Aufrufe: 95
Ok, der liest ja "nur" aus der AssemblyInfo.cs soweit ich das gesehen habe. Wie ist es denn mit zusätzlichen Assembly-Einträgen? Ich habe ihn zwar nicht entdeckt, lässt sich dieser auch auslesen?
 
Hi.

Wie kommst du drauf das er "nur" beziehungsweise "überhaupt" aus der AssemblyInfo.cs liest? Schau dir das Programm an, probier es aus.

Mit ihm kannst du ein Assembly laden, so nennen sich die von einem .net Compiler erstellten Dateien, kurz Infos anzeigen lassen (Name, Ort,..), weiters noch auflisten was für Dateien noch zusätzlich in ihr gespeichert sind, und auf Wunsch einzelne Dateien auch wieder normal als eigene Datei speichern.

MfG,
Alex
 

Neue Beiträge

Zurück