Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Floste
Thema: Reflection-/unsafe-/SOAP-Hacks in SpaceWarrior verhindern
Am im Forum: Rund um die Programmierung

Zitat
Ob in Silverlight allerdings der native weg funktioniert kann ich nicht genau sagen aber prinzipiell spricht nichts dagegen und man versucht ja nciht aus der Sandbox auszubrechen, sondern nur den inhalt der Sandbox zu verändern....

dein weg mit den native delegaten ist ganz klar ein ausbruch aus der sandbox
und ich werde gleich mal versuchen, ob ich den inhalt eines datetime mittels reflektion manipulieren kann. (das zählt jawohl noch nicht als hacken, oder?)

Resultat: es geht nicht! Alles was permissions braucht geht nicht. Hier eine Liste von sachen, die nicht gehen (in der silverlight-version):
-private methoden aufrufen geht nicht
-private variablen manipulieren geht nicht
-> man kann keine delegaten manipulieren
->und somit keinen assemblercode ausführen
-unsafe verwenden geht nicht

Thema: Reflection-/unsafe-/SOAP-Hacks in SpaceWarrior verhindern
Am im Forum: Rund um die Programmierung

@ jack: du vergisst offensichtlich, dass es sich um silverlight handelt. Man kann also grundsätzlich alles vergessen, was securitypermissions braucht, soweit ich das weiß.

Wenn ich mich irren sollte, dann sagt mir bitte bescheid und wenn ich mich tatsächlich irre, dann weiß ich in dem Fall schon, was ich als nächstes deinstalliere.

Thema: Coding Styles Horror
Am im Forum: Smalltalk

o.O der ganze überflüssige mist wurde wegoptimiert im release modus und jetzt steht nurnoch isinst gefolgt von brfalse dort

Thema: Coding Styles Horror
Am im Forum: Smalltalk

Passt zwar nur so halb hier rein, aber was der c#-compiler so verzapft wenn man folgendes compiliert, ist eindeutig coding styles horror auf msil ebene!


object obj=....
if(obj is string)
{
    //mach was
}

Daraus wird folgender code:

        L_000e: ldloc.0 
        L_000f: isinst string
        L_0014: ldnull 
        L_0015: cgt.un 
        L_0017: ldc.i4.0 
        L_0018: ceq 
        L_001a: stloc.1 
        L_001b: ldloc.1 
        L_001c: brtrue.s L_0039
....
Wenn man den ilcode mal exakt rückübersetzen würde:


object obj=....
bool helper=((obj as string)>null)==false;
IfTrue(helper)goto endif; //brtrue
//mach was
endif:;

man beachte, das es auchnoch einen befehl brfalse gibt und die befehle brtrue und brfalse auch direkt auf verweistypen angewendet werden können (wie in c++)

Thema: Größe der Exe bei Hoster funpic wird kleiner - warum?
Am im Forum: Smalltalk

es gibt genügend hoster. warum ausgerechnet funpic?

http://www.free-webhosts.com/reviews/

einer der bekanntesten ist bplaced.net, allerdings wurden die schon gehackt.
Es empfielt sich so oder so, die dateien mit einer digitalen signatur zu versehen und diese nach dem herunterladen automatisch zu prüfen.

Thema: SpaceWarrior - Programmierungsspiel in Silverlight 4
Am im Forum: Projekte

1.) Ich habe nur an einem ort null-reference-exceptions bekommen: beim auswählen des gegbners, wenn ich nichts gewählt habe.
2.) wenn man was geschrieben hat und gleich auf play geht, ohne zu compalieren, sind die änderunegn nach dem spiel weg.
3.) ein paar mehr Vektorfunktionen, die man auf punkte anwenden kann wären für mich hilfreich: add,mul, sub, dot, length, dist, angleOf,...
4.) es fehlt eine angabe, das der winkel in bogengrade gemessen wird bei dir und du solltest vielleicht den winkel "normalisieren", da er bei dir bis ins unendlich steigt, wennn man immer in die gleiche richtung kurven dreht. einfach gegebenenfalls 2*PI abziehen, bzw addieren:


public double NormalizeAngle(double angle)
    {
        while (angle > Math.PI) angle -= 2 * Math.PI;
        while (angle < -Math.PI) angle += 2 * Math.PI;
        return angle;
    }
5. das schiff ist manchmal verschwunden, das ist verwirrend. bei getarnten schiffen vielleicht mit transparenz zeichnen statt ganz weg.

6. ich bräuchte für einige berechnungen dringend konstaten über die geschwindigkeiten von projektilen und die spielfeldabmessungen und maximalgeschwindigkeiten von schiffen!!!!
7. bei unerwarteten fehlern bitte (zumindest im trainingsmode) etwas mehr informationen ausgeben:
ex.GetType().Name
ex.Message
ex.StackTrace
außerdem genügend zeit zum durchlesen lassen.

Thema: Humor: Java Programmierer ... und andere lustige Sachen
Am im Forum: Smalltalk

Wo ich schon beim Aufräumen der Plugins meines browsers war, da dachte ich mir, ich kann diese blöde toolbar auch deinstallieren, statt nur deaktivieren.

Eigendlich hatte ich vor, die Toolbar nur einmal zu Deinstallieren, wurde aber trotzdem gefragt, ob in zukunft nichtmehr gefragt werden soll, ob deinstalliert werden soll:

Thema: Humor: Java Programmierer ... und andere lustige Sachen
Am im Forum: Smalltalk

Mozilla hat mir grade empfohlen, doch firefox herunterzuladen, den ich zum aufrufen der seite benutzt habe...

Thema: Methode aus einer DLL überschreiben mit Reflection?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich verstehe nicht, was genau du erreichen willst. Je nachdem gibt es noch andere möglichkeiten.

Zitat
Mir geht es darum, dass eine Methode nur den Dateinamen entgegennimmt und dann einen FileStream daraus erzeugt. Mein Ziel ist es einen FileStream direkt zu übergeben, da keine Datei vorhanden ist, die übergeben werden kann.

Meinst du File.OpenRead oder was genau?

Daran verstehe ich nicht:
Zitat
Mein Ziel ist es einen FileStream direkt zu übergeben,
An die Methode? als Rückgabewert der Methode?
Zitat
da keine Datei vorhanden ist, die übergeben werden kann.
wie kann eine datei übergeben werden? als Dateiname? als filestream? Willst du den Zugriff auf eine andere Datei umleiten?

Thema: Bad TCP Checksum?!
Am im Forum: Netzwerktechnologien

Ich hatte eine ähnliche Diskussion schoneinmal.

Zitat
ich habe jetzt deinen Vorschlag, die Länge der Daten vorne weg zu schicken implementiert und es funktioniert.
Ich hatte mich innerlich schon auf eine lange , zähe diskussion eingestellt.

Thema: Writer Klasse ohne Endianness
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
C# ja aufgrund von Array.Reverse() unnötig

naja es ist aber zum einen hundertmal schneller als array. reverse und für jedes element jeweils ein array erstellen muss nicht sein, finde ich.

Buffer.BlockCopy wäre ein besserer kompromiss.

aber es kommt halt darauf an, was man will.

Thema: Bad TCP Checksum?!
Am im Forum: Netzwerktechnologien

Ich halte es für ziemlich unwahrscheinlich, das es wirklich am netzwerk liegt. Man beachte: tcp ist nicht paketorientiert und zwerhackstückelt dir alles willkürlich. Wenn du nutr einen befehl zum auslessen verwendest, dann berkommt zu nur das erste teil des Hackbratens.

Probiere es mal wie folgt:


Socket sock=tcpClient.Client;
Action<byte[]> send=(data)=>
{
    int sendPos=0;
    while(sendPos<data.Length)
        sendPos+=sock.Send(data,sendPos,data.Length-sendPos,SocketFlags.None);
};
byte[] response=...;
send(Bitconverter.GetBytes(response.Length));
send(response);
sock.Disconnect();


Socket sock=tcpClient.Client;
Func<int,byte[]> Receive=(num)=>
{
    int receivePos=0;
    byte[] data=new byte[num];
    while(receivePos<num)
        receivePos+=sock.Receive(data,receivePos,data.Length-receivePos,SocketFlags.None);
    return data;
};
int length=BitConverter.ToInt32(Receive(4),0);
byte[] response=Receive(length);

Thema: Writer Klasse ohne Endianness
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

mein
Binary-Writer/-Reader 2.0
kann die endianess umbrehen. (oder wahlweise uch nicht) Allerding schreibt der die länge des arrays vor die eigendlichen daten, du musst also in einer schleife speichern.

ansonsten geht es mit unsafe relativ einfach:


uint[] daten=...
fixed(uint* pUints=&daten)
{
    byte* pbyte=pUints;
    for(int i=0;i<daten.Length;i++)
    {
        byte h;
        h=pbyte[0];
        pbyte[0]=pbyte[3];
        pbyte[3]=h;

        h=pbyte[1];
        pbyte[1]=pbyte[2];
        pbyte[2]=h;
        pbyte+=4;
    }
}

Thema: DrawImage ist unscharf beim drucken
Am im Forum: Grafik und Sound

Ich hatte mal sehr ähnliche ergebnisse, allerdings nicht beim Drucken.

Ich hatte aus versehen sourcecopy anstatt alphablending eingestellt. Dadurch wurden die halbtransparenten pixel auf einmal komplett schwarz.

Ob es nun darabn ligt oder nicht: probier auf jeden fall mal alle werte für das antialiasing von Text durch, also wenn der hochqualitativste modus nix bringt auch mal komplett abstellen.

Thema: Prozess schützen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

es ist aber weder besonderrs sauber, noch funktioniert es unter x64 (das portieren ist auchnicht trivial) noch ist es c#

Thema: Prozess schützen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

vermute, dass es auch das abkann, aber ich probiere es gleich mal aus...

[EDIT]
2 meldungen: "zugriff verweigert" und "mindestens ein prozess aus der prozessstruktur konnte nicht beendet werden"

also hat der schutz es abgefangen...

Thema: Prozess schützen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich hatte mal lust dazu und hab mal de unsaubere variante mit hooks implementiert. Und weil es in c++ sauberer und schneller geht, habe ich es auch in c++ gemacht^^

Resultat ist im Angang. Ich hab mal als test das Abschießen des taskmanagers aus einem anderen prozess (inklusive tricks wie createremotethread und co) verhindert. Es ist ein check eingebaut, das sich das programm selber beenden darf. Außerdem wird das Senden von WM_Close und WM_quit nicht verhindert, aber das sollte kein problem darstellen, man kann seine eigene anwendung entsprechend anpassen.

wirklich wasserdicht ist das system nicht, es lässt sich mit ca. 7 zeilen c++ umgehen, aber nur wenn man weiß, wie es funktioniert.

Verwendung:
1. compilieren
2. ins systemverzeichnis kopieren
3. im Schlüssel "HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows" den wert AppInit_DLLs auf den dllnamen setzen

es ist aber wie gesagt die unsaubere variante und man muss ziemlich aufpassen. Deshalb ist es in 99% der fälle b ersser rechte zu verteilen.

Thema: Generisch Liste anhand einer Type-Variable erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

das geht soweit ich weiß auch mit .net 2.0
Einfach einen eigenen delegaten definieren:


delegate T Func<T>();

Thema: Generisch Liste anhand einer Type-Variable erstellen
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich würde es wie folgt machen, hat den vorteil, dass man aucgh gleich damit arbeiten kann (nichtnur als objekt).

object myMethod<T>()
{
    List<T> list=new List<T>();
    dosomthing(list);
    return list;
}

....
//code zum Aufrufen sieht so aus:
//methode finden
MethodInfo myMethodInfo=typeof(AktuelleKlasse).GetMethod("myMethod",BindingFlags.Instance|BindingFlags.NonPublic);
//generisch machen
myMethodInfo=myMethodInfo.MakeGenericMethod(new Type[1]{t});
//delegate erstellen (man könnte MethodInfo.Invoke benutzen, das ist aber saulahm und lässt sich schlecht debuggen)
Func<object> myMethodDelegate=Delegate.CreateDelegate(typeof(Func<object>),this,myMethodInfo);
//aufrufen
object liste=myMethodDelegate();

Thema: [erledigt] Entity Framework: Objekt aus Linq-Query ohne foreach "durchgehen"
Am im Forum: Datentechnologien

Ich kenne mich nicht wirklich mit Datenbanken und Entity-klassen aus, aber wenn du alle felder einer (genauer gesagt: irgendeiner .net-klasse) klasse durchgehen willst, dann geht es wie folgt:

foreach(FiledInfo field in row.GetType().GetFilds(NonPublic|Public|instance))
{
    object value=field.GetValue(row);
    string fieldName=field.Name;
    DoSomthing(name,value);
}

Ok, vielleich wären die propertys zu iterieren besser.

Dies ist die allgemeine methode. Ich habe wie gesagt keine ahnung ob es nicht eine bequemere methode im kontext vom entity-farework gibt.

Thema: Trackbars nivellieren
Am im Forum: GUI: Windows-Forms

Wenn es nur um eine anzeige geht, kann man versuchen, diese als grünen balken im hintergrund der trackbars anzuzeigen. ich bleibe dabei: die werte ansich zu manipulieren ist eine blöde idee. Möglich zwar schon, aber sehr unpraktisch in den meisten fällen:
1. für den benutzer, weil ihm seine einstellungen verwurschtelt werden
2. für den Programmierer: rundungsfehler, er muss auswählen, welche balken wie angepasst werden, ...

Thema: Trackbars nivellieren
Am im Forum: GUI: Windows-Forms

Ich empfehle die werte garnicht direkt in den trackbars zu verändern (das wird sehr umständlich und nervig für den benutzer) sondern den benutzer einstellen zu lassen, was er will. Hinterher kann man sich dann werte so zurechtrechnen, das die summe 100 ergibt und die verhältnisse der werte zueinander den benutzereingaben entsprechen.

Damit man auf eine summe von 100 kommt muss man dann lediglich alle trackbarwerte summieren und dann jeden einzelnen durch die summe teilen. Dann ist die summe immer 1. entsprechend jeden wert wieder mit 100 multiplizieren, um auf 100 zu kommen.

Code sieht dann so aus.


Trackbar[] bars=
{
    trackbar1,
    trackbar2,
    ........

};
double sum=0;
foreach(Trackbar t in bars)
    sum+=t.Value;
double[] results=bars
    .Select((t)=> t.Value*100/sum )
    .ToArray();

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Stimmt genau, und bei der zeit kann man nicht meckern. Poste bitte mal deinen code.

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Ok: nächste aufgabe:

Schreibe ein programm, das alle zahlen findet, die die ziffern von 1 bis 9 jeweils exakt einmal enthalten. Es sind also alle kombinationen aus {1,2,3,4,5,6,7,8,9} gesucht. Jede dieser zahlen soll exakt einmal gefunden werden (keine doppelten):

123456789
123456798
123456879
123456897
123456978
123456987
123457689

...

987654321

Von diesen zahlen soll die 111.111te ausgegeben werden. (Dazu müssen die zahlen nach größe sortiert sein.)

Am besten soll es unter einer sekunde dauern, ich aktzeptiere aber auch langsamere lösungen. Meine zeit ist bei 0,013sec

Damit mir auch keiner die zahl direkt hinter der gesuchten liefert: Zaunpfahlproblem

Thema: Das Programmier-Spiel: nette Übungsaufgaben für zwischendurch
Am im Forum: Smalltalk

Diese lösung dürfte auch für quadrate und dreiecke gehen.

public class PolygonzugAufgabe
    {
        public static bool IstOffen(IEnumerable<Punkt> punkte)
        {
            //graden gleichsetzen (ok, ich hab ein cas benutzt):
            //sax+a*dax = sbx+b*dbx => a=(-sax+sbx+b*dbx)/dax
            //say+a*day = sby+b*dby => b=-(-say*dax+day*sax-day*sbx+sby*dax)/(-dbx*day+dby*dax)
            List<Punkt> liste = punkte.ToList();
            for (int ia = 1; ia < liste.Count; ia++)
            {
                double sax = liste[ia - 1].X;
                double say = liste[ia - 1].Y;
                double dax = liste[ia].X - sax;
                double day = liste[ia].Y - say;
                for (int ib = 1; ib < liste.Count; ib++)
                    if (Math.Abs(ia-ib)>1)//aneinanerhängende und identische schneiden sich nicht
                    {
                        double sbx = liste[ib - 1].X;
                        double sby = liste[ib - 1].Y;
                        double dbx = liste[ib].X - sbx;
                        double dby = liste[ib].Y - sby;
                        double b = -(-say * dax + day * sax - day * sbx + sby * dax) / (-dbx * day + dby * dax);
                        if (b ≤ 1 && b ≥ 0)
                        {
                            double a = (-sax + sbx + b * dbx) / dax;
                            if (a ≤ 1 && a ≥ 0)
                                return false;
                        }
                    }
            }
            return true;
        }
    }

Thema: UserControl vom Benutzer anpassen lassen und dann Einstellungen speichern
Am im Forum: GUI: WPF und XAML

BinaryFormatter kann ganze klassen mitsamt abhängigkeiten in einen stream schreiben und wieder lesen.
das problem an der sache: man sollte es nicht auf gui-objekte anwenden.

Thema: [gelöst] streamwriter schreibt drei bytes vor den text
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Zitat
die BOM wird idR. auch von jedem Programm erkannt was mit UTF umgehen kann
aber nicht vom apache http server im post-body
Zitat
manuell ein UTF8Encoding Objekt erstellst, kannst du auch im Konstruktor angeben ob die BOM geschrieben werden soll.

Nach soetwas habe ich gesucht.

Thema: [gelöst] streamwriter schreibt drei bytes vor den text
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Folgende zwei zeilen:


            StreamWriter writer = new StreamWriter(body, Encoding.UTF8);
            writer.Flush();

Schreiben bei mir folgende werte in den stream "body":
EF BB BF oder 

Da ich die da nun überhaupt nicht gebrauchen kann, habe ich mir mit einem

body.Position=0;
beholfen. Allerdings finde ich es seltsam, das überhaupt etwas geschrieben wird, bevor ich die daten gebe. Gibt es einen einfachen weg, das abzustellen?

Thema: Detektion in einem Spiel (VAC Frage)
Am im Forum: Rund um die Programmierung

ich denke man darf lesend auf den prozess zugreifen. Und da es eine entprechende api gibt um die module aufzulisten ohne irgendetwas in den prozess einzuschleusen, wieso nicht?
Allerdings kann man auch code einschleusen, ohne dafür ein modul zu laden. Also schadet es zwar wharscheinlich nix, ist aber auch nicht sicher.

Das thema hatten wir erst kürtzlich: Suche Tipps und Ansätze, um ein Anti-Cheat-Tool zu coden

Thema: B-Spline Interpolation (beim Ändern der Bildgröße)
Am im Forum: Grafik und Sound

Danke, damit kann ich deutlich mehr anfangen, als mit dem wikipediaartikel.