Guest User

Untitled

a guest
Jan 19th, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.89 KB | None | 0 0
  1. import re, sys
  2.  
  3. re_ident = '[a-zA-Z_][a-zA-Z_0-9]*'
  4. re_string = '("(\\.|[^"])*")|(\'(\\.|[^\'])*\')'
  5. re_comment = '(//.*)' # should add support for /**/
  6. re_imports = 'import .*'
  7. re_names = '(package|class|interface|extends|implements) '+re_ident+')?'
  8. re_ignore = re_string + "|" + re_comment + "|" + re_imports + "|" + re_names
  9.  
  10. reserved = ['function', 'var', 'public', 'static', 'private',
  11.             'protected', 'extends', 'implements', 'new', 'super', 'this',
  12.             'override', 'void', 'int', 'uint', 'Number', 'Boolean', 'Array']
  13.  
  14. def identifiers(src):
  15.     # get all ignored and identifier ranges.
  16.     ignored = [m.span() for m in re.finditer(re_ignore, src)]
  17.     idents = [m.span() for m in re.finditer(re_ident, src)]
  18.     # cull reserved identifiers, and identifiers found in ignored
  19.     idents = [(i,j) for (i,j) in idents if src[i:j] not in reserved]
  20.     idents = [(i,j) for (i,j) in idents if all([j<m or i>n for (m,n) in ignored])]
  21.     return [(src[i:j],(i,j)) for (i,j) in idents]
  22.  
  23. def main():
  24.     files = []
  25.     dictionary = {}
  26.     count = 0
  27.  
  28.     filenames = sys.argv[1:]
  29.     for filename in filenames:
  30.         fhandle = open(filename, 'r')
  31.         content = fhandle.read()
  32.         fhandle.close()
  33.  
  34.         idents = identifiers(content)
  35.         files.append((filename, content, idents))
  36.  
  37.         for (matched, mrange) in idents:
  38.             item = (filename, mrange)
  39.             if matched not in dictionary:
  40.                 dictionary[matched] = "n%i" % count
  41.                 count = count+1
  42.  
  43.     for (name, content, idents) in files:
  44.         fhandle = open(name+".obf", 'w')
  45.         pointer = 0
  46.         for (matched, (i, j)) in idents:
  47.             fhandle.write(content[pointer:i])
  48.             fhandle.write(dictionary[matched])
  49.             pointer = j
  50.         fhandle.write(content[pointer:])
  51.         fhandle.close()
  52.  
  53. if __name__ == "__main__":
  54.     main()
Add Comment
Please, Sign In to add comment