刚好想搞个代码混淆脚本,下面才实现到、查找到所有工程文件的 所有方法名
后续继续跟进!
import os
import re
# 获取所有的.h .m文件
def get_obejct_file(path):
filelist = os.listdir(path)
for file in filelist:
path1 = path + '/' + file
if os.path.isdir(path1):
if "Pods" in path1 or "Tests" in path1:
# 不解析以下文件夹
print('----' + path1)
else:
get_obejct_file(path1)
elif os.path.isfile(path1):
if path1.endswith(".h") or path1.endswith(".m"):
phrase_object_hm_file(path1)
# 开始解析.h .m 下所有的文件
def phrase_object_hm_file(path):
print(path)
try:
f = open(path, 'r')
# print(f.read())
context = f.read()
get_all_fuction_name(path, context)
except Exception as e:
print(e)
def get_all_fuction_name(path, context):
pattern1 = re.compile(r'//.*') # 这个是为了查找到项目文件里面的注释代码,好比//abc
# .*? 尽可能少的匹配
pattern2 = re.compile(r'/\**.*?\*/', re.S) # 这个是为了找到项目里面的注释代码:/* *ABC* */ 这里 .*? 是为了懒匹配
if path.endswith(".h"):
pattern3 = re.compile(r'(-|\+)\s*\(\w+\s*\**\)(.*?);', re.S) # 这是为了找到.h文件夹的方法名
else:
pattern3 = re.compile(r'(-|\+)\s*\(\w+\s*\**\)(.*?){', re.S)# 这是为了找到.m文件夹的方法名
out = re.sub(pattern1, '', context)
out = re.sub(pattern2, '', out)
result2 = re.findall(pattern2, out)
result = re.findall(pattern3, out)
# for res in result:
# print(res[1].split('\n')[0])
if __name__ == '__main__':
path = '/Users/xxx/Downloads/项目名'
get_obejct_file(path)
这里讲解一下上面的三个正则表达式
上面的代码注释都解释了
自己去看,不懂的可以看一下正则表达式表
网友评论