Skip to content

Instantly share code, notes, and snippets.

@deplinenoise
Created June 5, 2011 08:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save deplinenoise/1008772 to your computer and use it in GitHub Desktop.
Save deplinenoise/1008772 to your computer and use it in GitHub Desktop.
Python bootblock checksummer
#! /usr/bin/env python
import sys
import struct
def splice_checksum(block, chksum):
return block[0:4] + struct.pack('>I', chksum) + block[8:]
def makeit(fn, ofn):
f = open(fn, 'rb')
data = f.read()
f.close()
if len(data) < 1024:
data = data + '\0' * (1024 - len(data))
chksum = 0
for w in xrange(0, 1024, 4):
chksum += struct.unpack('>I', data[w:w+4])[0]
if chksum > 0xffffffff:
chksum = (chksum + 1) & 0xffffffff
chksum = (~chksum) & 0xffffffff
data2 = splice_checksum(data, chksum)
f = open(ofn, 'wb')
f.write(data2)
f.close()
if len(sys.argv) == 3:
makeit(sys.argv[1], sys.argv[2])
else:
sys.stderr.write('need two args\n')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment