Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import re, sys
- re_ident = '[a-zA-Z_][a-zA-Z_0-9]*'
- re_string = '("(\\.|[^"])*")|(\'(\\.|[^\'])*\')'
- re_comment = '(//.*)' # should add support for /**/
- re_imports = 'import .*'
- re_names = '(package|class|interface|extends|implements) '+re_ident+')?'
- re_ignore = re_string + "|" + re_comment + "|" + re_imports + "|" + re_names
- reserved = ['function', 'var', 'public', 'static', 'private',
- 'protected', 'extends', 'implements', 'new', 'super', 'this',
- 'override', 'void', 'int', 'uint', 'Number', 'Boolean', 'Array']
- def identifiers(src):
- # get all ignored and identifier ranges.
- ignored = [m.span() for m in re.finditer(re_ignore, src)]
- idents = [m.span() for m in re.finditer(re_ident, src)]
- # cull reserved identifiers, and identifiers found in ignored
- idents = [(i,j) for (i,j) in idents if src[i:j] not in reserved]
- idents = [(i,j) for (i,j) in idents if all([j<m or i>n for (m,n) in ignored])]
- return [(src[i:j],(i,j)) for (i,j) in idents]
- def main():
- files = []
- dictionary = {}
- count = 0
- filenames = sys.argv[1:]
- for filename in filenames:
- fhandle = open(filename, 'r')
- content = fhandle.read()
- fhandle.close()
- idents = identifiers(content)
- files.append((filename, content, idents))
- for (matched, mrange) in idents:
- item = (filename, mrange)
- if matched not in dictionary:
- dictionary[matched] = "n%i" % count
- count = count+1
- for (name, content, idents) in files:
- fhandle = open(name+".obf", 'w')
- pointer = 0
- for (matched, (i, j)) in idents:
- fhandle.write(content[pointer:i])
- fhandle.write(dictionary[matched])
- pointer = j
- fhandle.write(content[pointer:])
- fhandle.close()
- if __name__ == "__main__":
- main()
Add Comment
Please, Sign In to add comment