Advertisement
zcutlip

calculate_checksum()

Jan 3rd, 2014
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.60 KB | None | 0 0
  1. """
  2. reimplementation of calculate_checksum() from
  3. libacos_shared.so
  4. binary MD5: 660c1e24aa32c4e096541e6147c8b56e  libacos_shared.so
  5. """
  6. class LibAcosChecksum(object):
  7.    
  8.     def __init__(self,data,data_len,checksum_offset):
  9.         self.dword_623A0=0
  10.         self.dword_623A4=0
  11.         fake_checksum="\x00\x00\x00\x00"
  12.        
  13.         self.data=data[0:data_len]
  14.         self.data=(self.data[0:checksum_offset]+
  15.                         fake_checksum+
  16.                         self.data[checksum_offset+len(fake_checksum):])
  17.        
  18.         self._update(self.data[0:data_len])
  19.         self._finalize()
  20.        
  21.    
  22.     def _update(self,data):
  23.         size=len(data)
  24.         t0=self.dword_623A0
  25.         a0=self.dword_623A4
  26.         a2=size
  27.         a3=0
  28.         while a3 != a2:
  29.             v1=ord(data[a3])
  30.             a3+=1
  31.             a0=(a0+v1) & 0xFFFFFFFF
  32.             t0=(t0+a0) & 0xffffffff
  33.        
  34.         self.dword_623A0=t0
  35.         self.dword_623A4=a0
  36.        
  37.         return 1
  38.    
  39.     def _finalize(self):
  40.         v0=self.dword_623A0
  41.         v1=self.dword_623A4
  42.        
  43.         a0=(v0 & 0xFFFF)
  44.         v0=(v0>>16 )
  45.         v0=(v0+a0) & 0xffffffff
  46.        
  47.         a2=(v1 & 0xFFFF)
  48.         v1=(v1>>16)
  49.         v1=(v1+a2) & 0xffffffff
  50.        
  51.         a1=v0>>16
  52.         a1=(a1+v0) & 0xffffffff
  53.        
  54.         a0=v1>>16
  55.         a1=(a1 & 0xFFFF)
  56.         a0=(a0+v1) & 0xffffffff
  57.         a0=(a0 & 0xFFFF)
  58.         v0=(a1<<16) & 0xffffffff
  59.         a2=(v0 | a0)
  60.  
  61.         v0=a2
  62.         self.dword_623A4=a0
  63.         self.dword_623A0=a1
  64.        
  65.         self.checksum = v0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement