2017-03-27 10 views
0

現在、私はウイルス対策製品の基本的なシグネチャ検出をバイパスする方法を検討しています。今は0x00で埋め尽くしてファイルを分割しようとしています(おそらくNOPは良いでしょうか?)しかし、これを行う方法を理解できません。私は、基本的な検出を回避するためにバイナリの難読化を自動化するための非常に単純なPythonスクリプトを書いています(私の論文の一点を証明するために)。これが最後のスニペットです。Python - 読み込まれた各16進バイトの0x00でバイト配列を書き換えます。

これまでのところ、実行可能ファイルをbytearrayに読み込んだだけで、各16進値を読み込み、新しい配列に書き込んだり、0x00を書き込んだり、次の16進値を最初の配列と続けます。

Example 
a = 54 68 69 73 20 70 72 6F 67 72 61 6D 20 63 61 6E 6E 6F 74 20 62 65 20 72 75 6E 20 69 6E 20 44 4F 53 20 6D 6F 64 65 (DOS stub) 

私はパッドに探しています/

b = 54 00 68 00 69 00 73 00 20 00 70 etc. 

このついて行くの簡単な方法があり、以下の持っている各進値の間に00を挿入?

+2

'[x in tのz(a、[0] * len(a))のxのt] 'これは? – timgeb

+0

有効なPythonを投稿して、使用しているタイプについてヒントを得ることができますか? aとbは、python2の文字列か、python3のバイトか、整数のリストであるはずですか? bytestringの処理が2つの方法で異なるため、Python 2または3を使用しているかどうかを示すこともできます。 –

答えて

2

b''.join(bytes(x) for x in zip(a, itertools.repeat(0)))

+0

これにはいくつか問題があります。それも00ではないでしょうか? – JustSev

+1

これはpython 3としか互換ではありません。python 2の場合、zip(x、itertools.repeat(0)))の '' '.join(str(bytearray(a))) ' –

0

' 00 'と進値のあなたのリストに参加しましょう。

# when type of a is of <type 'bytearray'> 
>>> b = ' 00 '.join(str(a).split()) 
>>> print b 
54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6F 00 64 00 65 
>>> b = bytearray(b) 
>>> print b 
bytearray(b'54 00 68 00 69 00 73 00 20 00 70 00 72 00 6F 00 67 00 72 00 61 00 6D 00 20 00 63 00 61 00 6E 00 6E 00 6F 00 74 00 20 00 62 00 65 00 20 00 72 00 75 00 6E 00 20 00 69 00 6E 00 20 00 44 00 4F 00 53 00 20 00 6D 00 6F 00 64 00 65') 

希望します。

+0

意味をなさないしかし、私はあなたの例では 'a'を参照してください。あなたの例で定義されている「a」とは何ですか? – JustSev

+0

TypeError: 'bytearray'オブジェクトは呼び出し可能ではありません bytearrayには、そのようなファイルからの16進バイトが入っていることに注意してください。 私はここで何らかのデータ変換をしなければならないと思いますか? 編集:これはファイルを読み込んでおらず、個々の16進バイトとして保存していないことに気付きました。 – JustSev

+0

あなたの入力のタイプは何ですか(あなたは質問に「a」として与えています)? –

関連する問題