2017-08-20 13 views
0

infosecプロジェクトでは、文字列をバイト配列の一種として使用しています。これは一般に脆弱性テストで行われます。バイト配列を構築する際に、印刷可能な文字と印刷できない文字を連結したい。バイナリをPythonの文字列にキャストする方法

これは変換の問題ではなく、実際にその型をキャストしたいと考えています。私は関数やメソッドをchr()の周りに書くことができますが、より良い方法が必要です。

>>> print "A"*10 + chr(0x20) + "B"*10 
AAAAAAAAAA BBBBBBBBBB 

たとえば、大きなバイナリ配列を挿入するとどうなりますか?私は、私も文字列が8ビットバイトを持っていることを保証していないよというかなり確信しているので

>>> print "A"*10 + 0xBEEF + "B"*10 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: cannot concatenate 'str' and 'int' objects 

>>> print "A"*10 + 0xBEEFBEEFBEEFBEEFBEEFBEEF + "B"*10 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: cannot concatenate 'str' and 'long' objects 

私はここで間違ったデータ型を使用しても良いです。


のために、私が望んでいるだろうものの例:それは、文字列にエスケープ進数を入力する雑用を少しだ場合は、binascii.unhexlifyを使用することができます

>>> print "A"*10 + 0xBEEFBEEFBEEFBEEFBEEFBEEF + "B"*10 
AAAAAAAAAA������������BBBBBBBBBB 
+0

出力はどのようになっていますか? –

+0

最後の2つの例では、人間が読めるものではありません。 – mgjk

+0

これは問題ではありません...あなたの最初の例、あるいはA + 0xBEEF + Bが何を想定しているのでしょうか?それはあなたが望むバイト列、または16進文字列か... –

答えて

1

、例えば:

from binascii import unhexlify 

b = 'A'*10 + unhexlify('BEEF' * 6) + 'B'*10 
# 'AAAAAAAAAA\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xefBBBBBBBBBB' 

しかし、Python 3では、バイト文字列で始まることを確認する必要があります(またはTypeError: Can't convert 'bytes' object to str implicitlyを受け取る):

b'A'*10 + unhexlify('BEEF' * 6) + b'B'*10 
# b'AAAAAAAAAA\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xefBBBBBBBBBB' 
0

もう1つの可能性は、structモジュールを使用することです。これにより、出力に をより詳細に制御できます。ここではPython 2.7の例である:

import struct 

s = struct.pack("6H", *[0xbeef]*6) 

s次の文字列です:

'\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe\xef\xbe' 

あなたは長整数、符号付きまたは符号なし、またはダブルフロートをパックすることができ、など は、例えばここに同じです二重にパックされた16進数値:

>>> struct.pack("6d", *[0xbeef]*6) 
'\x00\x00\x00\x00\xe0\xdd\[email protected]\x00\x00\x00\x00\xe0\xdd\[email protected]\x00\x00\x00\x00\xe0\xdd\[email protected]\x00\x00\x00\x00\xe0\xdd\[email protected]\x00\x00\x00\x00\xe0\xdd\[email protected]\x00\x00\x00\x00\xe0\xdd\[email protected]' 

エンドエンティティを指定する可能性もあります。もちろん、逆の操作(アンパック)を行うこともできます。

関連する問題