Advertisement
phjoe

SEdit

Dec 26th, 2014
349
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # ServerKey Editor
  2. # joe, 26/12/2014
  3. import e32,zntxhanpyd
  4.  
  5. class KeyEditor:
  6.  def __init__(self,fp):
  7.   self.fp=fp
  8.   self.status=0
  9.   self.size=0
  10.   self.key=''
  11.   self.version=''
  12.   self.third=0
  13.   if self.fp.endswith('exe'):
  14.    self.third=1
  15.  
  16.  def _rep(self,n,st):
  17.   data=n-len(st)
  18.   bit=''
  19.   for i in range(data):
  20.    bit+='\x00'
  21.   return st+bit
  22.  
  23.  def run(self,new):
  24.   mx=(250000,400000)[self.third]
  25.   klen=216
  26.   try:
  27.    f=open(self.fp)
  28.    f.seek(28)
  29.    head=f.read(2)
  30.    f.close()
  31.    if head=='\xfcz':
  32.     try:
  33.      print 'Un-compressing...'
  34.      zntxhanpyd.uncompress(self.fp,self.fp)
  35.      print 'Un-compress OK'
  36.     except:
  37.      pass
  38.  
  39.    e32.ao_sleep(1E-02)
  40.    f=open(self.fp,'a+')
  41.    f.seek(0,2)
  42.    self.size=f.tell()
  43.    f.seek(0,0)
  44.    f.seek(self.size-mx)
  45.  
  46.    print 'File:', self.fp, '(%d bytes)' %self.size
  47.    print 'Reading data...'
  48.    print
  49.  
  50.    data=f.read()
  51.    tpos=data.find('Data traffic')
  52.    f.seek(tpos+(self.size-mx))
  53.    data=(f.read(25000),f.read())[self.third]
  54.    mark=[
  55.     ('ew==','Original'),
  56.     ('Lw==','Voltano'),
  57.     ('9Q==','Vodaphone'),
  58.     ('Gw==','Mini5 Chinese')
  59.     ]
  60.    for st,ver in mark:
  61.     if data.find(st)!=-1:
  62.      end=data.find(st)
  63.      start=end-(klen-len(st))
  64.      old=data[start:end+len(st)]
  65.      kpos=(start+tpos)+(self.size-mx)
  66.      if new!='' and new!=old:
  67.       f.seek(kpos)
  68.       if len(new)>klen:
  69.        new=new[:klen]
  70.       else:
  71.        new=self._rep(klen,new)
  72.       f.write(new)
  73.       self.key,self.version,self.status=new,ver,1
  74.      else:
  75.       self.key,self.version,self.status=old,ver,0
  76.   finally:
  77.    f.close()
  78.  
  79.  def getsize(self):
  80.   return self.size
  81.  
  82.  def getkey(self):
  83.   return self.key
  84.  
  85.  def getversion(self):
  86.   return self.version
  87.  
  88.  def __repr__(self):
  89.   stat=('Read Only (Not Changed)','Changed')[self.status]
  90.   return 'File: %s\nServer Key: %s\nServer Version: %s\nFilesize: %d bytes\nStatus: %s' %(self.fp,self.key,self.version,self.size,stat)
  91.  
  92.  
  93. if __name__=='__main__':
  94.  # test
  95.  op='E:/system/apps/OperaMini/OperaMini.app' # v2
  96.  op='e:/sys/bin/OperaMini.exe' # v3
  97.  
  98.  key='wd16t34slndG/ hBoECbJIPhkgRMhvLi+a7+loD/aThbJyNs68oD3cDNm53jpPFXnFZqIUtKxOB5SGjN/IrFAbN30GjEUrstPS/554MWqK6iCT8mJy4vcv47FzvUXa/1AWfIpuRv6AlEmspX5xAnnX29kFe4JT9f139OVofQxZoxaCOiN6JHcTdONTpqpucANxgSgQo46paKMz6da8JkUew=='
  99.  key=''
  100.  
  101.  ed=KeyEditor(op)
  102.  ed.run(key)
  103.  print ed
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement