[C#]Salt over input

  • Beste icter,s
    Voor mijn games en games van mijn vrienden ben ik een soort steam achtig programma aan het schrijfen.
    Uiteraard in C# omdat ik dit al een beetje kan door het maken van games in unity.
    Ik ben nu bezig me het login systeem die is gekoppeld met mijn site alleen moet ik het wachtwoord encrypten endat lukt me niet.
    Wat ik wel al heb kunnen doen is er sha1 overgooien maar hoe krijg ik er dan nog een salt over?
    De textinput is textbox2.text


    alvast bedankt


    MVG
    Menno

    TEST ughost nu zelf "Klik hier voor trial"
    Let op:
    -Je pakket eindigd naar 2 weken dan worden ook alle bestanden verwijderd.
    -Je moet een eigen domein regelen (hebben,kopen)

  • Guest, wil je besparen op je domeinnamen? (ad)
  • Ik zie het al 1 ik gebruik geen sha1 maar sha512 en 2 in php word me salt niet gebruikt:

    PHP
    $password = hash('SHA512', $salt.$_POST['password']);


    Nu is alleen mij vraag hoe ik in c# andere form open want hide dat weet ik wel dat is:

    PHP
    this.hide();


    @let maar al gelukt

    TEST ughost nu zelf "Klik hier voor trial"
    Let op:
    -Je pakket eindigd naar 2 weken dan worden ook alle bestanden verwijderd.
    -Je moet een eigen domein regelen (hebben,kopen)

    Bewerkt één keer, laatst door ditismenno ().

  • Onthoud dat C# naar CIL wordt gecompiled en dit kan makkelijk worden gedecompiled worden. Dus stop NOOIT maar dan ook NOOIT wachtwoorden of secrets in je C# broncode.


    Kun je CIL dan compilen naar iets anders?
    Om dat te begrijpen zal ik je wat vertellen over twee verschillen.
    1. yourapp.exe --> compiled --> CIL / MSIL --> Werkt op elke PC.
    2. notepad.exe --> Native Code --> Code dat geoptimaliseerd is alleen voor DIE specifieke PC waar jij het voor het eerst op hebt gedraait -> Zal niet werken op een andere PC wanneer je het zou kopieren


    Wat gebeurt er als je notepad.exe uitvoert?
    De native code zal meteen worden uitgevoerd.


    Wat gebeurt er als je yourapp.exe uitvoert?
    Hij wordt niet meteen uitgevoerd maar wordt nog een keer gecompiled. Het zogehete JIT (Just In Time). Deze JIT zorgt ervoor dat de CIL code gecompiled wordt naar Native code, daarmee bedoel ik code die de computer kan begrijpen.


    Kun je dan je .exe compilen naar native code?
    Ja dat kan, maar dan draait het alleen op het specifieke systeem waar jij het opdraait. Oftewel wanneer jij deze native code applicatie kopieert naar een andere PC dan denkt die PC van "Dafuq!?". De JIT zorgt ervoor dat de applicatie wordt geoptimaliseerd voor jouw PC.


    Is het nuttig om mijn CIL naar Native te compilen?
    Nee, alleen bij applicaties die enorm zijn (neem Office van Microsoft).


    Waarmee zou ik kunnen decompilen?
    ILSpy is één van de velen op het internet.


    Ik ben toch geïnteresseerd om te compilen naar Native code, waarmee doe ik dat?
    ngen.exe (standaard op de PC, zo aan te roepen vanuit command prompt), voor meer informatie hierover zou ik even gebruik maken van google ;)


    Conclusie?
    Nooit secrets of wachtwoorden in je C# te gebruiken.

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

    Bewerkt 2 keer, laatst door jopitan ().


  • Dankjewel want mijn wachtwoord van database staat erin natuurlijk

    TEST ughost nu zelf "Klik hier voor trial"
    Let op:
    -Je pakket eindigd naar 2 weken dan worden ook alle bestanden verwijderd.
    -Je moet een eigen domein regelen (hebben,kopen)


  • Dankjewel want mijn wachtwoord van database staat erin natuurlijk


    Geen dank, ik heb er nog wat meer bij gezet.


    Mocht je met de vraag zitten van: "Hoe doe ik dat dan?"
    Dan zal ik dat hier even proberen uit te leggen doormiddel van pijltjes.


    Applicatie --> Vereist login als eerst --> Username + Wachtwoord worden ingevuld --> User klikt op "Login" button --> Details worden naar server gestuurt (E.g. nginx server of apache server --> url: https://schapen.nl/users/doLogin/) --> doLogin() methode kijkt wat voor request het is --> Ajax / POST --> Applicatie verstuurd gegevens naar url als POST --> vereis meer parameters, zoals OS en eventuele MD5 codes van bestanden ik noem maar wat --> Ga login traject af --> Weergeef response --> Applicatie handelt response af en geeft een message met de error of een uniek ID terug die je valideert als ingelogde gebruiker.


    Een uniek ID wanneer de inlog succesvol was?
    Ja, dit ID moet je zien als een PHP session ID alleen dan voor je applicatie. Je houdt bij wanneer die afloopt of dat hij nog vanaf het zelfde IP, OS, MD5, enzovoort enzovoort wordt gebruikt.
    Elke keer wanneer de ingelogde gebruiker een actie doet in je C# applicatie dan stuurt hij een request naar de server met dat specifieke Unieke ID met natuurlijk de overige gegevens om te valideren.
    Wanneer deze op één punt niet overeenkomen --> Opnieuw inloggen --> Eventuele ID verwijderen enzovoort

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • ik snap nu alleen nog niet helemaal hoe ik hem daar tegen beveilig


    Wat bedoel je met "hem"? Tegen wat beveiligen?

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • met hem bedoel ik de wachtwoorden in mijn script ETc eigelijk mijn hele script


    Dat soort dingen doe je dus buiten je C# programmering. Dat laat je alleen via je server gaan.


    Om het even heel simpel en kort te beschrijven:
    Je hebt een script op je webserver staan zoiets als ("doLogin.php" nader genoemd Server). In de server gebeurt alleen maar de connectie met de database en hetgeen dat moet gebeuren.


    Stel dat je het zo hebt:


    C# Login Formulier

    PHP
    Username: [username_field]
    Password: [password_field]
    [login_button]


    Wanneer op "login_button" wordt gedrukt wordt de username en de password doorgestuurd naar de server als een POST.


    Dan zal de server code er zo bijvoorbeeld uit zien:



    Dit is natuurlijk een afgekapte manier van het verwerken van gegevens.


    Wanneer je dan een response krijgt van de server in je c# applicatie en dit bevat een message dan is het inloggen mislukt.
    Wanneer je een ID ontvangt dan is de gebruiker ingelogd. Dit ID onthoudt je voor de huidige sessie van de applicatie.


    Nou wil je natuurlijk dat een gebruiker bepaalde functies alleen kan doen wanneer die ingelogd is. Als ik nu over de server spreek dan heb ik het bijvoorbeeld over "getGames.php"


    Je stuurt een request met het ID en eventuele extra parameters die je wilt naar de server.
    Dan zou de code er zo in het kort uitzien voor de server:



    Ik hoop dat ik zo een beetje het idee heb gegeven van hoe je applicatie dan veilig is. Natuurlijk is dit nog maar 10% van alles en kun je alles veel verder uitbreiden.

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080


  • Dankjewel ik snap het idee en ga het uitwerken ;) maar nu is mijn vraag is het ook mogelijk dat ik kan zorgen dat ze mijn script niet kunnen stelen?

    TEST ughost nu zelf "Klik hier voor trial"
    Let op:
    -Je pakket eindigd naar 2 weken dan worden ook alle bestanden verwijderd.
    -Je moet een eigen domein regelen (hebben,kopen)


  • Dankjewel ik snap het idee en ga het uitwerken ;) maar nu is mijn vraag is het ook mogelijk dat ik kan zorgen dat ze mijn script niet kunnen stelen?



    Als je met script de C# broncode bedoelt. Dan nee.
    Er zijn overigens wel manieren om het lastiger te maken.


    Zie: http://stackoverflow.com/quest…s-from-being-disassembled

    Kast: HAF922 | CPU: I7-930 @ 4.0GHz | CPU Cooler: Noctua NH-D14 | HDD0: Crucial M4 128GB, HDD1: Kingston SSD 64GB, HDD2/3: WD Black & Green 1TB, HDD4: Seagate 1.5TB | Mem: Kingston HyperX 12GB @ 1600MHz | Graphics: Crossfire HD6970 | Res: 5760x1080

  • Wat ik nu heb gemaakt is dus onvelig:

    TEST ughost nu zelf "Klik hier voor trial"
    Let op:
    -Je pakket eindigd naar 2 weken dan worden ook alle bestanden verwijderd.
    -Je moet een eigen domein regelen (hebben,kopen)

  • Ja, je wachtwoord staat gewoon letterlijk in de code, wat iedereen eruit kan vissen als het gecompiled is.


    Wat je moet doen, is verbinden met je server (via een HTTP request of je eigen protocol) en dan aan de server "vragen" of de gebruikersnaam en wachtwoord overeenkomt.

Participate now!

Heb je nog geen account? Registreer je nu en word deel van onze community!