Read and write binary file in Python
<p>The following code does not seem to read/write binary form correctly. It should read a binary file, bit-wise XOR the data and write it back to file. There are not any syntax errors but the data does not verify and I have tested the source data via another tool to confirm the xor key.</p>

<p><strong>Update</strong>: per feedback in the comments, this is most likely due to the endianness of the system I was testing on.</p>

<p><a href="http://code.google.com/p/malwarecookbook/source/browse/trunk/12/1/xortools.py" rel="nofollow">xortools.py</a>:</p>

<pre><code>def four_byte_xor(buf, key):
    out = ''
    for i in range(0,len(buf)/4):
        c = struct.unpack("=I", buf[(i*4):(i*4)+4])[0]
        c ^= key
        out += struct.pack("=I", c)
    return out
</code></pre>

<p>Call to xortools.py:</p>

<pre><code>from xortools import four_byte_xor
in_buf = open('infile.bin','rb').read()
out_buf = open('outfile.bin','wb')
out_buf.write(four_byte_xor(in_buf, 0x01010101))
out_buf.close()
</code></pre>

<p>It appears that I need to read bytes per <a href="http://stackoverflow.com/a/1035360/666891">answer</a>. How would the function above incorporate into the following as the function above manipulate multiple bytes? Or Does it not matter? Do I need to use <a href="http://docs.python.org/library/struct.html" rel="nofollow">struct</a>?</p>

<pre><code>with open("myfile", "rb") as f:
    byte = f.read(1)
    while byte:
        # Do stuff with byte.
        byte = f.read(1)
</code></pre>

<p>For an example the following file has 4 repeating bytes, 01020304:</p>

<p><img src="http://i.stack.imgur.com/ra4Xq.png" alt="before XOR"></p>

<p>The data is XOR'd with a key of 01020304 which zeros the original bytes:</p>

<p><img src="http://i.stack.imgur.com/CBtPB.png" alt="after XOR"></p>

<p>Here is an attempt with the original function, in this case 05010501 is the result which is incorrect:</p>

<p><img src="http://i.stack.imgur.com/sUvz2.png" alt="incorrect XOR attempt"></p>
