festen string in binaries einbauen

Jan 'Red Bully' Seiffert redbully at cc.fh-luh.de
Thu Jul 22 17:32:44 CEST 2004


Jan-Benedict Glaw schrieb:
> On Thu, 2004-07-22 16:59:27 +0200, Jan 'Red Bully' Seiffert <redbully at cc.fh-luh.de>
> wrote in message <40FFD64F.3090207 at cc.fh-luh.de>:
> 
>>Hans-Joachim Hoetger schrieb:
>>
>>>Moin,
>>>ich habe vor vielen Jahren mal die Konfiguration eines Programms in
>>>einer statischen String Konstante gespeichert. In die Konstante habe ich
>>>vorn ein Muster reingeschrieben, damit ich sie nachher im Binary auch
>>>finde. Das programm konnte sich also (im Konfigurationsmodus) selbst
>>>verändern.
>>
>>Hmmm, wie hast du verhindert das der (beim Kompilieren) konstante
>>String in einen Nur-Lese-Bereich gemappt wird?
> 
> Das ist nicht das Problem -- Du greifst nicht über die Variable auf den
> String zu, sondern suchst im Binary danach. Aber _da_ ist ein Problem:
> man kann IMHO ein laufendes Binary nicht O_WRONLY öffnen:)
Genau... wir sind ja unter einem *richtigen* Betriebsystem...
Forken, anderes Binary aufrufen, sich selbst schliessen, dann sich
selbst veraendern lassen und dann mit execve wieder zurueck...
POSIX, Erkenne die moeglichkeiten!

> 
>>>Ich bin wieder davon abgekommen, als das ein oder andere
>>>Prüfsummenprogramm meinte darin einen Virus erkannt zu haben.
>>
>>Sich selbst veraendernde Programme sind ja auch Boese [TM] ;)
>  
> Nee, der Bug is'n Feature!
Ja, das ist so ungefaehr wie dieser Ugly Hack:
Wir wollen "objekte" anhand ihres Pointers unterscheiden,
zwei stueck haben aber keinen...
Gut dem ersten koennen wir ja noch den NULL-Pointer geben:
eevents->data.ptr = (void *)0;

Was geben wir dem zweiten? Na auch einen ungueltigen Pointer...
Nur woher nehmen? Bitte mal wegschauen:
eevents->data.ptr = (void *)1;

Der rest hat dann ja Pointer vom Heap.

Ja, sehr Dirty. Zur Kreuzigung? Bitte Hinteranstellen, jeder nur einen
Pointer...

> 
> MfG, JBG
> 
Gruss
	Jan


-- 
Echte Programmierer sind überrascht, wenn ihr
Kilometerzähler im Auto nicht von 000009
nach 00000A umspringt.



More information about the Linux mailing list