Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- """
- reimplementation of calculate_checksum() from
- libacos_shared.so
- binary MD5: 660c1e24aa32c4e096541e6147c8b56e libacos_shared.so
- """
- class LibAcosChecksum(object):
- def __init__(self,data,data_len,checksum_offset):
- self.dword_623A0=0
- self.dword_623A4=0
- fake_checksum="\x00\x00\x00\x00"
- self.data=data[0:data_len]
- self.data=(self.data[0:checksum_offset]+
- fake_checksum+
- self.data[checksum_offset+len(fake_checksum):])
- self._update(self.data[0:data_len])
- self._finalize()
- def _update(self,data):
- size=len(data)
- t0=self.dword_623A0
- a0=self.dword_623A4
- a2=size
- a3=0
- while a3 != a2:
- v1=ord(data[a3])
- a3+=1
- a0=(a0+v1) & 0xFFFFFFFF
- t0=(t0+a0) & 0xffffffff
- self.dword_623A0=t0
- self.dword_623A4=a0
- return 1
- def _finalize(self):
- v0=self.dword_623A0
- v1=self.dword_623A4
- a0=(v0 & 0xFFFF)
- v0=(v0>>16 )
- v0=(v0+a0) & 0xffffffff
- a2=(v1 & 0xFFFF)
- v1=(v1>>16)
- v1=(v1+a2) & 0xffffffff
- a1=v0>>16
- a1=(a1+v0) & 0xffffffff
- a0=v1>>16
- a1=(a1 & 0xFFFF)
- a0=(a0+v1) & 0xffffffff
- a0=(a0 & 0xFFFF)
- v0=(a1<<16) & 0xffffffff
- a2=(v0 | a0)
- v0=a2
- self.dword_623A4=a0
- self.dword_623A0=a1
- self.checksum = v0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement