2010-12-15 12 views
6

Ich kann nicht über den gesamten Bereich der Unicode-Zeichen durchlaufen.Ruby: Fuzzing durch alle Unicode-Zeichen (UTF8/Codierung/String-Manipulation)

ich überall gesucht ...

ich ein fuzzer bin Gebäude und wollen in eine URL, alle Unicode-Zeichen (einer nach dem anderen) einzubetten.

Zum Beispiel: http://www.example.com?a=\uff1c

Ich weiß, dass es einige eingebaute Werkzeuge sind, aber ich mehr Flexibilität benötigen. Wenn ich etwas wie das folgende tun könnte: "\u" + "ff1c" wäre es großartig.

Dies ist der nächstgelegene ich bekam:

char = "\u0000" 
... 

#within iteration 

char.succ! 

... 

aber nach dem Charakter "\u0039", die die Zahl 9 ist, werde ich „10“ statt bekommen „:“

+0

Vereitelt es nicht den ganzen Punkt des Fuzzings, um zu versuchen, nur gültige Unicode Codepunkte zu erzeugen? –

Antwort

2

Sie Pack nutzen könnten, um konvertiere Zahlen in UTF8-Zeichen, aber ich bin mir nicht sicher, ob das dein Problem löst.

Sie können entweder ein Array mit numerischen Werten aller Zeichen erstellen und Paket verwenden, um eine UTF8-Zeichenfolge zu erhalten, oder Sie können einfach von 0 zu dem, was Sie benötigen, loop und Pack in der Schleife verwenden.

Ich habe ein kleines Beispiel geschrieben, um mich zu erklären. Der folgende Code gibt den Hexadezimalwert jedes Zeichens aus, gefolgt von dem Zeichen selbst.

0.upto(100) do |i| 
    puts "%04x" % i + ": " + [i].pack("U*") 
end 
1

Hier ist etwas einfacher Code, wenn auch etwas verschleiert, dass sich die Tatsache zunutze nimmt, dass Ruby wird eine ganze Zahl auf der rechten Seite des < < Betreiber zu einem Codepoint konvertieren. Dies funktioniert nur mit Ruby 1.8 für ganzzahlige Werte < = 255. Es wird für Werte größer als 255 in 1.9 funktionieren.

0.upto(100) do |i| 
    puts "" << i 
end 
Verwandte Themen