美文网首页
Python iOS混淆方法名

Python iOS混淆方法名

作者: 獨荹儛臨 | 来源:发表于2019-12-10 15:23 被阅读0次

    刚好想搞个代码混淆脚本,下面才实现到、查找到所有工程文件的 所有方法名
    后续继续跟进!

    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)
    

    这里讲解一下上面的三个正则表达式
    上面的代码注释都解释了
    自己去看,不懂的可以看一下正则表达式表

    相关文章

      网友评论

          本文标题:Python iOS混淆方法名

          本文链接:https://www.haomeiwen.com/subject/hddggctx.html