def get_app_methods(app, pid): """ info:获得app中的方法 """ dump_result = class_dump_utils.dump_app(app) methods = api_helpers.extract(dump_result) # for m in methods: # ret_methods = ret_methods.union(set(m["methods"])) # 保留class_name信息 return methods
def get_app_variables(app, pid): "get all variables, properties, and interface name" dump_result = class_dump_utils.dump_app(app) var_file_name = 'dump_var_' + os.path.basename(app) or 'dump_var' cur_dir = os.getcwd() var_file_name = os.path.join(cur_dir, "tmp/" + pid + '/' + var_file_name) var_file = open(var_file_name + ".txt", "w") print >> var_file, dump_result #将strings内容输出到文件中 interface = re.compile("^@interface (\w*).*") protocol = re.compile("@protocoli (\w*)") private = re.compile("^\s*[\w <>]* [*]?(\w*)[\[\]\d]*;") prop = re.compile( "@property\([\w, ]*\) (?:\w+ )*[*]?(\w+); // @synthesize \w*(?:=([\w]*))?;" ) res = set() lines = dump_result.split("\n") wait_end = False for line in lines: l = line.strip() if l.startswith("}"): wait_end = False continue if wait_end: r = private.search(l) if r: res.add(r.groups()[0]) continue r = interface.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = protocol.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = prop.search(l) if r: m = r.groups() res.add(m[0]) res.add("set" + m[0].title() + ":") #print "set" + m[0].title() + ":" if m[1] != None: # res.add("V"+m[1]) res.add(m[1]) return res
def get_app_variables(app, pid): "get all variables, properties, and interface name" dump_result = class_dump_utils.dump_app(app) var_file_name = 'dump_var_' + os.path.basename(app) or 'dump_var' cur_dir = os.getcwd() var_file_name = os.path.join(cur_dir, "tmp/" + pid + '/' + var_file_name) var_file = open(var_file_name + ".txt", "w") print >>var_file, dump_result #将strings内容输出到文件中 interface = re.compile("^@interface (\w*).*") protocol = re.compile("@protocoli (\w*)") private = re.compile("^\s*[\w <>]* [*]?(\w*)[\[\]\d]*;") prop = re.compile("@property\([\w, ]*\) (?:\w+ )*[*]?(\w+); // @synthesize \w*(?:=([\w]*))?;") res = set() lines = dump_result.split("\n") wait_end = False for line in lines: l = line.strip() if l.startswith("}"): wait_end = False continue if wait_end: r = private.search(l) if r: res.add(r.groups()[0]) continue r = interface.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = protocol.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = prop.search(l) if r: m = r.groups() res.add(m[0]) res.add("set" + m[0].title() + ":") #print "set" + m[0].title() + ":" if m[1] != None: # res.add("V"+m[1]) res.add(m[1]) return res
def get_app_methods(app, pid): ''' info:获得app中的方法 ''' dump_result = class_dump_utils.dump_app(app) methods_file_name = 'method_' + os.path.basename(app) or 'app_methods' cur_dir = os.getcwd() methods_file_name = os.path.join(cur_dir, "tmp/" + pid + '/' + methods_file_name) strings = open(methods_file_name + ".txt", "w") #print methods_file_name print >>strings, dump_result #ret_methods = set() methods = api_helpers.extract(dump_result) #for m in methods: # ret_methods = ret_methods.union(set(m["methods"])) #保留class_name信息 return methods
def get_app_variables(app): "get all variables, properties, and interface name" dump_result = class_dump_utils.dump_app(app) interface = re.compile("^@interface (\w*).*") protocol = re.compile("@protocoli (\w*)") private = re.compile("^\s*[\w <>]* [*]?(\w*)[\[\]\d]*;") prop = re.compile( "@property\([\w, ]*\) (?:\w+ )*[*]?(\w+); // @synthesize \w*(?:=([\w]*))?;" ) res = set() lines = dump_result.split("\n") wait_end = False for line in lines: l = line.strip() if l.startswith("}"): wait_end = False continue if wait_end: r = private.search(l) if r: res.add(r.groups()[0]) continue r = interface.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = protocol.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = prop.search(l) if r: m = r.groups() res.add(m[0]) res.add("set" + m[0].title() + ":") # print "set" + m[0].title() + ":" if m[1] != None: # res.add("V"+m[1]) res.add(m[1]) return res
def get_app_variables(app): "get all variables, properties, and interface name" dump_result = class_dump_utils.dump_app(app) interface = re.compile("^@interface (\w*).*") protocol = re.compile("@protocoli (\w*)") private = re.compile("^\s*[\w <>]* [*]?(\w*)[\[\]\d]*;") prop = re.compile("@property\([\w, ]*\) (?:\w+ )*[*]?(\w+); // @synthesize \w*(?:=([\w]*))?;") res = set() lines = dump_result.split("\n") wait_end = False for line in lines: l = line.strip() if l.startswith("}"): wait_end = False continue if wait_end: r = private.search(l) if r: res.add(r.groups()[0]) continue r = interface.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = protocol.search(l) if r: res.add(r.groups()[0]) wait_end = True continue r = prop.search(l) if r: m = r.groups() res.add(m[0]) res.add("set" + m[0].title() + ":") # print "set" + m[0].title() + ":" if m[1] != None: # res.add("V"+m[1]) res.add(m[1]) return res
def get_dump_result(app): """ get app class-dump result, and cache it """ dump_result = class_dump_utils.dump_app(app) return dump_result
def get_dump_macho_result(app_path): """ dump app 可执行文件 """ result = class_dump_utils.dump_app(app_path) return result