Seite 1 von 1

Ein zufälliges Bit eines Strings kippen

Verfasst: Donnerstag 2. August 2012, 13:07
von fuzzing
Hallo,

zwecks Fuzzing möchte ich ein zufälliges Bit eines 147 char-langes Strings (1176 Bits) kippen.

Habe mit python noch nicht viel Erfahrung und bisher folgenden Ansatz ausprobiert, der leider nicht funktioniert:

Der String ist in "buffer"

randomBit = 0b1
binBuffer = 0b0
binBuffer = bin(buffer)
binBuffer = binBuffer^(randomBit<<randint(0,1175))
buffer = str(binBuffer)

Hoffe jemand kann mir dabei helfen, meine Lösung ist wohl etwas zu einfach gedacht :mrgreen:

Re: Ein zufälliges Bit eines Strings kippen

Verfasst: Donnerstag 2. August 2012, 13:20
von EyDu
Hallo und willkommen im Forum!

Am einfachsten ist es, wenn du den String einfach in einen Integer umwandelst:

Code: Alles auswählen

>>> text = "spam ham and eggs"
>>> n = sum(ord(c)<<8*i for (i, c) in enumerate(text[::-1]))
>>> n += 1
>>> "".join(chr((n>>8*i)&0xFF) for i in range(len(text)))[::-1]
'spam ham and eggt' 
Das +1 ist natürlich nur ein Beispiel, hier musst du dann deine kokrete Operation einsetzen. Ob du die Reihenfolge der Zeichen in den Strings umdrehen musst hängt natürlich von deiner Anwendung ab.

Sebastian

Re: Ein zufälliges Bit eines Strings kippen

Verfasst: Donnerstag 2. August 2012, 13:45
von fuzzing
habe jetzt folgende Zeilen hinzugefügt:

randomBit = bin(1)
n = sum(ord(c)<<8*i for (i, c) in enumerate(buffer[::-1]))
n = n^(randomBit<<randint(0,1175))
"".join(chr((n>>8*i)&0xFF) for i in range(len(buffer)))[::-1]

=>
invalid syntax in
"".join(chr((n>>8*i)&0xFF) for i in range(len(buffer)))[::-1]
am ;

Re: Ein zufälliges Bit eines Strings kippen

Verfasst: Donnerstag 2. August 2012, 14:00
von snafu
Tja, das passiert, wenn man blindes Copy&Paste macht (unterstelle ich jetzt einfach mal). Aufgrund eines Bugs im Forumcode wird aus dem kaufmännischen Und (&) immer ein ``&``. Das musst du halt manuell ersetzen.

Re: Ein zufälliges Bit eines Strings kippen

Verfasst: Donnerstag 2. August 2012, 14:10
von fuzzing
snafu hat geschrieben:Tja, das passiert, wenn man blindes Copy&Paste macht (unterstelle ich jetzt einfach mal). Aufgrund eines Bugs im Forumcode wird aus dem kaufmännischen Und (&) immer ein ``&``. Das musst du halt manuell ersetzen.
ok dieser Fehler ist schonmal weg.

jetzt hab ich noch einen in
randomBit = bin(1)

Und die Zeile
n = n^(randomBit<<randint(0,1175))

ist so ok für mein Vorhaben?

Re: Ein zufälliges Bit eines Strings kippen

Verfasst: Donnerstag 2. August 2012, 14:17
von fuzzing
habe jetzt einfach
randomBit = 1
und nun läufts durch.

Re: Ein zufälliges Bit eines Strings kippen

Verfasst: Donnerstag 2. August 2012, 19:40
von jerch
@fuzzing:
Ja das funktioniert so. Allerdings würde ich es wohl über 8Bit-integer mit String-Slicing machen und nicht den ganzen String in eine Zahl wandeln, ungetestet:

Code: Alles auswählen

byte, bit = divmod(randint(0, 1175), 8)
s = s[:byte] + chr(ord(s[byte]) ^ (1<<bit)) + s[byte+1:]