[PHP] "Signature" toevoegen in rar/zip/exe bestand.

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Beste mede-tweakers,

Ik wil voor een private beta area die ik aan het maken ben graag dat elk bestand word "gecostimized" zodra deze gedownload word.

Elk bestand word opgeslagen in de Database en word uitgespuugd doormiddel van PHP.
En je moet ingelogd zijn om bestanden te downloaden. Nu wil ik dus graag dat in de broncode van het bestand of in ieder geval op een manier de gebruikersnaam van de persoon en het IP komt te staan.

Zodat mochten beta-testers iets verspreiden naar het publiek ik kan achterhalen welk lid dit heeft gedaan.

Ik weet dat bijvoorbeeld cheathappens.com een soort zelfde systeem gebruikt voor hun trainers.
Enige hulp zou welkom zijn aangezien ik geen idee heb hoe ik dit moet doen.

Mvg,
Vincent van Daal

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Waarom niet bijhouden wie wat upload, ipv je downloads vervuilen cq. corrupten met meuk waar niemand wat aan heeft behalve jij. En jij kan het gewoon in je database stoppen.

Zo blijft informatie als IP-adres gewoon niet voor iedereen zichtbaar.

Waarom moeilijk doen als het makkelijk kan?

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
RaZ schreef op zondag 24 augustus 2008 @ 01:26:
Waarom niet bijhouden wie wat upload, ipv je downloads vervuilen cq. corrupten met meuk waar niemand wat aan heeft behalve jij. En jij kan het gewoon in je database stoppen.

Zo blijft informatie als IP-adres gewoon niet voor iedereen zichtbaar.

Waarom moeilijk doen als het makkelijk kan?
Ten eerste gaat het om downloads customizen, niet uploads. Alhoewel je dat op het zelfde kan laten neerkomen.

Waarom? Simpel, ik heb meerdere beta testers en ik kan wel netjes loggen wie van hun wat download maar als het daarna uitlekt op het internet (het is een private beta) heb ik netjes van meerdere mensen hun gegevens/zie ik dat ze het hebben gedownload maar kan ik niet zien wie van hun het heeft verspreid.

Zie je mijn dilemma? :)
Daarom dacht ik an een signature achtig iets, kan ook eventueel een unieke code proppen in het bestand ergens. Maar het gaat me puur erom hoe ik iets in een bestand kan "bijzetten" qua code zonder het bestand corrupt te maken. Het gaat voornamelijk om .exe bestanden.

Mocht jij, of iemand anders een idee hebben hoe. Ik hoor het graag.

[ Voor 0% gewijzigd door Verwijderd op 24-08-2008 01:41 . Reden: WOUW! Een HELE reactie voor 1 type-fout. Ik voel me vereerd. ]


Acties:
  • 0 Henk 'm!

Verwijderd

Costimizen is geen woord. Customizen wel.

Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Waar je rekening mee moet houden is dat je het niet alleen met de ZIP doet, maar ook met alle bestanden erin. Als iemand doorheeft dat een bestand een signature bevat, maar de files erin niet, pakt hij het doodleuk uit en pakt hij het opnieuw in.

Hoe je dit precies doet weet ik jammergenoeg niet, je kunt niet zomaar wat brol onderaan een exe erbijdumpen omdat dat je exe sloopt.

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:19
Dat zal per bestand anders moeten. Ik weet dat RAR commentaar kan herbergen en een .exe ook (je kunt bijvoorbeeld met de rechtermuisknop op een .exe klikken en dan meer informatie krijgen over de auteur enzo).

Maar wat denk je ermee op te schieten? Als jouw bèta tester niets van die signatuur weet is er niets aan de hand, maar als dat uitlekt is het een kwestie van die signatuur verwijderen en verspreiden en degene die dat gedaan heeft is dan niet meer te traceren.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Jaap-Jan schreef op zondag 24 augustus 2008 @ 01:40:
Dat zal per bestand anders moeten. Ik weet dat RAR commentaar kan herbergen en een .exe ook (je kunt bijvoorbeeld met de rechtermuisknop op een .exe klikken en dan meer informatie krijgen over de auteur enzo).

Maar wat denk je ermee op te schieten? Als jouw bèta tester niets van die signatuur weet is er niets aan de hand, maar als dat uitlekt is het een kwestie van die signatuur verwijderen en verspreiden en degene die dat gedaan heeft is dan niet meer te traceren.
Ik denk dat er manieren moeten zijn die het op zo'n manier "versleutelen" in het bestand dat dit zeer lastig word. Verder gaat het niet om een geheim programma maar om beta's van ROM's (voor telefoons, ik ben webmaster van duttythroy.net).

Ik wil op een simpele maar toch effectieve manier het mensen moeilijk maken bestanden te verspreiden, en doen ze het wel. Dan valt het te achterhalen.

Acties:
  • 0 Henk 'm!

  • RaZ
  • Registratie: November 2000
  • Niet online

RaZ

Funky Cold Medina

Die comments in rar's en zip's zijn leuk, maar uitpakken en opnieuw inpakken en verspreiden ben je die signature ook kwijt.

Die info die je bij executables ziet, zijn er zo ingecompiled zo ver ik weet. Dan zou je bij elke download eerst de handel moeten recompilen, en dat zal wel een flinke belasting zijn op de server heb ik zo het idee. Dat houd in dat je dus geen exe's opslaat in de database, maar de komplete source... Compilen kan best wel wat tijd in beslag nemen. Dat iemand 3 minuten moet wachten tot de download start haken ze al af.

Aan de andere kant.. Als je je gebruikers niet vertrouwd... Zoals de waard is,.....

Ey!! Macarena \o/


Acties:
  • 0 Henk 'm!

  • Snake
  • Registratie: Juli 2005
  • Laatst online: 07-03-2024

Snake

Los Angeles, CA, USA

Anders een simpele kleine DLL erbijvoegen, en die on the fly compilen? Heel klein maar, net genoeg om het id te achterhalen, en laat de app niet opstarten zonder de dll?

Going for adventure, lots of sun and a convertible! | GMT-8


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik dacht dat de hoofd regel bij security altijd was.

"Never trust your users" :P
Kan het verkeerd hebben.

In ieder geval, ik zit nu wat te spelen met fopen en dergelijke.
Ik ga gewoon wat experimenteren en dan zie ik het van zelf wel.

Mocht ik wat tegenkomen dan plaats ik het hier.
Mochten er verder mensen zijn met suggesties of een oplossing dan hoor ik het graag.
Anders een simpele kleine DLL erbijvoegen, en die on the fly compilen? Heel klein maar, net genoeg om het id te achterhalen, en laat de app niet opstarten zonder de dll?
Dit zou een idee kunnen zijn...*pling*

[ Voor 23% gewijzigd door Verwijderd op 24-08-2008 01:59 ]


Acties:
  • 0 Henk 'm!

  • Alex)
  • Registratie: Juni 2003
  • Laatst online: 21-08 11:20
Wat je ook nog kunt doen, is je eigen CA opzetten en de files die je distribueert digitaal ondertekenen. Per user maak je dan een code signing certificaat aan en daarmee onderteken je je files.

Alleen kunnen users zo'n certificaat er ook weer afhalen... :/

We are shaping the future


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:19
Voor exe's zou je de tekst van de code die wordt uitgevoerd in 16-bits DOS kunnen vervangen voor je signature. Het gaat om de welbekende tekst "This program cannot be run in DOS mode."

Zorg wel dat je string even lang is als die string, anders is je programma corrupt.

Maar om terug te komen op je vraag met betrekking tot versleuteling: verander één bit van die versleuteling en je tekst is niet meer terug te halen, vervang die hele signature en dan is de afkomst helemáál niet meer te herleiden. Versleuteling zal je ook niet helpen. Als users met de data kunnen knoeien en je beveiliging afhangt van die data, dan is er effectief geen beveiliging. :)

[ Voor 12% gewijzigd door Jaap-Jan op 24-08-2008 02:05 ]

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Johnny
  • Registratie: December 2001
  • Laatst online: 14:39

Johnny

ondergewaardeerde internetguru

Niet de gebruikersnaam en IP-adres er plain text in opslaan, maar een hash daarvan zodat alleen jij later kan verifieren waar het bestand vandaan kwam en iemand anders alleen een code ziet die niet meer werkt zodra hij wordt aangepast, ook moet je wanneer je een IP-adres ergens opslaat de datum er bij doen aangezien die van tijd tot tijd kunnen worden toegewezen aan verschillende personen.

Het is ook wel mogelijk om de code in de .exe aan te passen, zeker als je hem zelf gemaakt hebt. Uiteindelijk is het gewoon een collectie van bytes. Volgens mij moet het wel mogelijk zijn om in je programma een globale variable te declareren met een bepaalde waarde en na het compileren de bytes op die specifieke locatie in je .EXE bestand te vervangen met je signature. Voor iemand zoals jij die firmware voor embedded apparaten maakt moet dat een koud kunstje zijn.

Aan de inhoud van de bovenstaande tekst kunnen geen rechten worden ontleend, tenzij dit expliciet in dit bericht is verwoord.


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Verdikkeme, het is toch lastiger dan ik zo dacht.
Vraag me serieus af hoe de jongens van cheathappens dit gedaan hebben.
Voor iemand zoals jij die firmware voor embedded apparaten maakt moet dat een koud kunstje zijn.
Behalve dat ik niet Duttythroy ben ;) Ik ben de webmaster en regel alle web-services voor Throy.
Ik maak graag gebruik van zijn ROM's. Maar ik heb geen enkele "kook" ervaring met ROM's.

By the way, voor de duidelijkheid. Ik wil dat dit on-the-fly gebeurt.

[ Voor 62% gewijzigd door Verwijderd op 24-08-2008 02:16 ]


Acties:
  • 0 Henk 'm!

  • Jaap-Jan
  • Registratie: Februari 2001
  • Laatst online: 17:19
Verwijderd schreef op zondag 24 augustus 2008 @ 02:10:

Verdikkeme, het is toch lastiger dan ik zo dacht.

Vraag me serieus af hoe de jongens van cheathappens dit gedaan hebben.


[...]


Behalve dat ik niet Duttythroy ben ;) Ik ben de webmaster en regel alle web-services voor Throy.

Ik maak graag gebruik van zijn ROM's. Maar ik heb geen enkele "kook" ervaring met ROM's.


By the way, voor de duidelijkheid. Ik wil dat dit on-the-fly gebeurt.
Dat is wel duidelijk. Maar wat Johnny bedoeld is dat het programma (dat is namelijk het enige waar het mee kan werken, het werkt niet voor rars of zips) wordt uitgebreid met code die kijkt of de signature klopt.


Die signature wordt opgeslagen in de programmacode, bijvoorbeeld:


C:
1
static const char sig[] = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '1', '2', '3', '4', '5', '6', '\0' };
In PHP vervang je dan de string "1234567890123456" voor je signature en vervolgens stuur je de gebruiker het programma. Vervolgens bij het opstarten van het programma controleer je op de één of andere manier de validiteit van die signature.

Voorwaarde is alleen wel dat je zelf een programma kunt compileren, dus je kunt geen SFX'jes bakken en die voorzien van een signature.

| Last.fm | "Mr Bent liked counting. You could trust numbers, except perhaps for pi, but he was working on that in his spare time and it was bound to give in sooner or later." -Terry Pratchett


Acties:
  • 0 Henk 'm!

  • Thralas
  • Registratie: December 2002
  • Nu online
De makkelijkste manier om een executable te voorzien van een 'signature' lijkt me om de DOS header aan te passen. Er zijn een tweetal members (e_res en e_res2) in de struct die reserved zijn, en dus normaal gesproken zeroed zijn, maar als het goed is kom je er wel mee weg als je er wat bytes inzet.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
typedef struct _IMAGE_DOS_HEADER
{
     WORD e_magic;
     WORD e_cblp;
     WORD e_cp;
     WORD e_crlc;
     WORD e_cparhdr;
     WORD e_minalloc;
     WORD e_maxalloc;
     WORD e_ss;
     WORD e_sp;
     WORD e_csum;
     WORD e_ip;
     WORD e_cs;
     WORD e_lfarlc;
     WORD e_ovno;
     WORD e_res[4];
     WORD e_oemid;
     WORD e_oeminfo;
     WORD e_res2[10];
     LONG e_lfanew;
} IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;


De grootte van een WORD is 2 bytes, e_res (4 * sizeof(WORD) = 8 bytes ruimte) zit dus op 28 bytes vanaf het begin van de executable, e_res2 (10 * sizeof(WORD) = 20 bytes ruimte) op 40 bytes.

Natuurlijk is het triviaal om te zien waar de 'signature' zich bevindt als men de executables van 2 users vergelijkt. Wil je het verder locken, dan zul je met executable packers aan de gang moeten gaan, maar niets is natuurlijk onkraakbaar.

Als je meer ruimte nodig hebt kun je (denk ik) ook de PE header wat verschuiven (e_lfanew is een offset van de PE header, deze moet je dan ophogen met x en op e_lfanew_origineel vervolgens x bytes 'invoegen', je hebt dan x bytes (e_lfanew_origineel tot e_lfanew de ruimte) om iets neer te zetten.

[ Voor 5% gewijzigd door Thralas op 24-08-2008 03:18 ]


Acties:
  • 0 Henk 'm!

  • SchizoDuckie
  • Registratie: April 2001
  • Laatst online: 18-02 23:12

SchizoDuckie

Kwaak

Tsja, volgens mij kom je hier echt niet zomaar aan mee weg in veel gevallen

Je bent echt bezig om dan de headers van je executable aan te passen, en je wil ook nog steeds dat een file blijft werken?
Je zou kunnen kijken in het geval van een win32 exe of je met reshacker iets kunt automatiseren. Elke exe heeftin principe een resource ge-embed in zich waarin dingen als publisher, version, original name, etc in staan. (doe voor de gein eens rechtermuisknop -> eigenschappen op notepad.exe en check het version tabblad) Met een beetje mazzel kun je deze toevoegen/aanpassen, maar garanderen dat je exe daarna nog werkt in alle gevallen kan volgens mij niemand je :)

[ Voor 8% gewijzigd door SchizoDuckie op 24-08-2008 03:48 ]

Stop uploading passwords to Github!


Acties:
  • 0 Henk 'm!

  • _js_
  • Registratie: Oktober 2002
  • Laatst online: 18-08 21:31
Je kunt een command line zip/rar applicatie gebruiken om de geuploade bestanden meteen na het uploaden in te pakken, en in de nieuwe zip meteen een commentaar meegeven. Die string zoek je op en vervang je bij een download (eventueel offset al opzoeken nadat de zip gemaakt is, zodat dat maar 1 keer hoeft).

Als je exe files aanbied kun je in principe zonder problemen gegevens aan het einde van het bestand toevoegen. Gebruik in ieder geval niet Schizoduckkie's manier, want veel exes hebben geen resource segment.

Acties:
  • 0 Henk 'm!

  • Gomez12
  • Registratie: Maart 2001
  • Laatst online: 17-10-2023
Spreek met de maker van de ROMS een vaste tekst af die in de executabele moet zitten ( bijv een vaste auteur / versienr resource ) dan lees je het bestand binair in, vervangt de vaste tekst door je eigen tekst en schrijf het bestand weer binair weg. Zip het bestand nu en biedt het pas dan ter download aan.

Imho veels te zwaar om on the fly te gaan doen, en bovendien hardstikke foutgevoelig ( maker van de ROMS verandert de tekst iets / nieuwe compiler vernaggelt de tekst iets ). Maar theoretisch zou het moeten werken.

Makkelijkste manier lijkt mij om gewoon een .txt bestandje in de zip erbij te zetten met daarin je gegevens, zo weg te halen maar met een beetje verberg trucs hoeft niet iedereen te zien dat het zo weg te halen is.
Pagina: 1