Advertisement
Nicknine

Hitman INI Decryptor

Oct 30th, 2022 (edited)
923
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.92 KB | None | 0 0
  1. import os
  2. import struct
  3. import sys
  4.  
  5. def rol1(n, d):
  6.     return ((n << d)|(n >> (8 - d))) & 0xFF
  7.  
  8. def ror1(n, d):
  9.     return ((n >> d)|(n << (8 - d))) & 0xFF
  10.  
  11. def rol4(n, d):
  12.     return ((n << d)|(n >> (32 - d))) & 0xFFFFFFFF
  13.  
  14. def ror4(n, d):
  15.     return ((n >> d)|(n << (32 - d))) & 0xFFFFFFFF
  16.  
  17. hdr=b"[Scrambled]\r\n"
  18. hdrsize=len(hdr)
  19.  
  20. def encryptIni(fname):
  21.     name,ext=os.path.splitext(fname)
  22.     f=open(fname,"rb")
  23.     decdata=f.read()
  24.     f.close()
  25.  
  26.     checksum=0x0E10F732F
  27.     for i in range(len(decdata)):
  28.         checksum=decdata[i]^rol4(checksum,13)
  29.  
  30.     encdata=bytearray()
  31.     encdata+=hdr
  32.     key=0x0DE60ED55
  33.  
  34.     for i in range(len(decdata)):
  35.         ch=decdata[i]
  36.         encch=rol1(ch,3)^(key&0xFF)
  37.         key=rol4(key,5)^encch
  38.         encdata.append(encch)
  39.  
  40.     encdata+=struct.pack("<I",checksum)
  41.     f=open(name+".scrambled"+ext,"wb")
  42.     f.write(encdata)
  43.     f.close()
  44.  
  45. def decryptIni(fname):
  46.     name,ext=os.path.splitext(fname)
  47.     f=open(fname,"rb")
  48.     encdata=f.read()
  49.     f.close()
  50.  
  51.     if not encdata.startswith(hdr):
  52.         raise Exception("Bad scrambled ini header")
  53.  
  54.     decdata=bytearray()
  55.     textsize=len(encdata)-hdrsize-4
  56.     key=0x0DE60ED55
  57.  
  58.     for i in range(textsize):
  59.         encch=encdata[hdrsize+i]
  60.         ch=ror1(encch^(key&0xFF),3)
  61.         key=rol4(key,5)^encch
  62.         decdata.append(ch)
  63.  
  64.     checksum=0x0E10F732F
  65.     for i in range(textsize):
  66.         checksum=decdata[i]^rol4(checksum,13)
  67.  
  68.     srcChecksum=struct.unpack("<I",encdata[hdrsize+textsize:])[0]
  69.     if checksum!=srcChecksum:
  70.         raise Exception("Checksum mismatch, scrambled ini is corrupted")
  71.  
  72.     f=open(name+".unscrambled"+ext,"wb")
  73.     f.write(decdata)
  74.     f.close()
  75.  
  76. if __name__=="__main__":
  77.     fname=sys.argv[1]
  78.     f=open(fname,"rb")
  79.     data=f.read(hdrsize)
  80.     f.close()
  81.  
  82.     if data.startswith(hdr):
  83.         decryptIni(fname)
  84.     else:
  85.         encryptIni(fname)
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement