def check_private_api(app, pid):
    #print app
    strings = app_utils.get_app_strings(app, pid) #一般是app中的一些可打印文本
    #app中的私有库和公有库 .framework
    private, _ = otool_utils.otool_app(app)
    
    app_varibles = app_utils.get_app_variables(app, pid)

    left = strings - app_varibles #去除一些关键字,剩余app中的一些关键词
    
    api_set = api_dbs.get_private_api_list() #数据库中的私有api
    print 'private length:', len(api_set)
    inter_api = api_utils.intersection_list_and_api(left, api_set) # app中的api和数据库中的私有api取交集,获得app中的私有api关键字数据
    
    app_methods = app_utils.get_app_methods(app, pid) #app中的方法名
    app_apis = []
    for m in app_methods:
        class_name = m["class"] if m["class"] != "ctype" else 'cur_app'
        method_list = m["methods"]
        m_type = m["type"]
        for m in method_list:
            tmp_api = {}
            tmp_api['api_name'] = m
            tmp_api['class_name'] = class_name
            tmp_api['type'] = m_type
            #tmp_api['header_file'] = ''
            #tmp_api['sdk'] = ''
            #tmp_api['framework'] = ''
            app_apis.append(tmp_api)
    
    
    methods_in_app = api_utils.intersection_api(app_apis, inter_api) #app中的私有方法
    methods_not_in_app = inter_api # inter_method - methods_in_app # 不在app中的私有方法
    
    return methods_in_app, methods_not_in_app, private
Пример #2
0
def check_private_api(app, pid):
    strings = app_utils.get_app_strings(app, pid)  #一般是app中的一些可打印文本
    #app中的私有库和公有库 .framework
    private, public = otool_utils.otool_app(app)
    print '=' * 15
    print 'private:', len(private)
    print 'public', len(public)
    print '=' * 15

    dump_result = app_utils.get_dump_result(app)
    app_varibles = app_utils.get_app_variables(dump_result,
                                               pid)  #app自定义的一些方法,不需要检查
    left = strings - app_varibles  #去除一些app中开发人员自定义的方法,剩余app中的一些字符串

    app_methods = app_utils.get_app_methods(dump_result,
                                            pid)  #dump-class分析出app中的类和方法名

    app_apis = []
    for m in app_methods:
        class_name = m["class"] if m["class"] != "ctype" else 'cur_app'
        #if m["class"] != "ctype" else 'cur_app'
        method_list = m["methods"]
        m_type = m["type"]
        for m in method_list:
            tmp_api = {}
            tmp_api['api_name'] = m
            tmp_api['class_name'] = class_name
            tmp_api['type'] = m_type
            #tmp_api['header_file'] = ''
            #tmp_api['sdk'] = ''
            #tmp_api['framework'] = ''
            app_apis.append(tmp_api)

    api_set = api_dbs.get_private_api_list(public)  #数据库中的私有api,去除了whitelist白名单
    print '=' * 15
    print 'left app_varibles:', len(left)
    print 'app_methods:', len(app_apis)
    print 'private length:', len(api_set)
    print '=' * 15
    inter_api = api_utils.intersection_list_and_api(
        left, api_set)  # app中的api和数据库中的私有api取交集,获得app中的私有api关键字数据

    methods_in_app, method_not_in = api_utils.intersection_api(
        app_apis, inter_api)  #app中的私有方法

    print '=' * 15
    print 'methods_in_app', len(methods_in_app)
    print 'methods_not_in_app', len(method_not_in)
    # for i in xrange(20):
    # print methods_not_in_app[i]
    print '=' * 15

    return methods_in_app, method_not_in, private
def check_private_api(app, pid):
    strings = app_utils.get_app_strings(app, pid) #一般是app中的一些可打印文本
    #app中的私有库和公有库 .framework
    private, public = otool_utils.otool_app(app)
    print '=' * 15
    print 'private:', len(private)
    print 'public', len(public)
    print '=' * 15

    dump_result = app_utils.get_dump_result(app)
    app_varibles = app_utils.get_app_variables(dump_result, pid) #app自定义的一些方法,不需要检查
    left = strings - app_varibles #去除一些app中开发人员自定义的方法,剩余app中的一些字符串
    
    app_methods = app_utils.get_app_methods(dump_result, pid) #dump-class分析出app中的类和方法名
    
    app_apis = []
    for m in app_methods:
        class_name = m["class"] if m["class"] != "ctype" else 'cur_app'
        #if m["class"] != "ctype" else 'cur_app'
        method_list = m["methods"]
        m_type = m["type"]
        for m in method_list:
            tmp_api = {}
            tmp_api['api_name'] = m
            tmp_api['class_name'] = class_name
            tmp_api['type'] = m_type
            #tmp_api['header_file'] = ''
            #tmp_api['sdk'] = ''
            #tmp_api['framework'] = ''
            app_apis.append(tmp_api)
    
    api_set = api_dbs.get_private_api_list(public) #数据库中的私有api,去除了whitelist白名单
    print '=' * 15
    print 'left app_varibles:', len(left)
    print 'app_methods:', len(app_apis)
    print 'private length:', len(api_set)
    print '=' * 15
    inter_api = api_utils.intersection_list_and_api(left, api_set) # app中的api和数据库中的私有api取交集,获得app中的私有api关键字数据

    methods_in_app, method_not_in = api_utils.intersection_api(app_apis, inter_api) #app中的私有方法

    print '=' * 15
    print 'methods_in_app', len(methods_in_app)
    print 'methods_not_in_app', len(method_not_in)
    # for i in xrange(20):
        # print methods_not_in_app[i]
    print '=' * 15
    
    
    return methods_in_app, method_not_in, private
def check_private_api(app, pid):
    #print app
    strings = app_utils.get_app_strings(app, pid)  #一般是app中的一些可打印文本
    #app中的私有库和公有库 .framework
    private, _ = otool_utils.otool_app(app)

    app_varibles = app_utils.get_app_variables(app, pid)

    left = strings - app_varibles  #去除一些关键字,剩余app中的一些关键词

    api_set = api_dbs.get_private_api_list()  #数据库中的私有api,去除了whitelist白名单
    print 'private length:', len(api_set)
    inter_api = api_utils.intersection_list_and_api(
        left, api_set)  # app中的api和数据库中的私有api取交集,获得app中的私有api关键字数据

    app_methods = app_utils.get_app_methods(app, pid)  #app中的方法名
    app_apis = []
    for m in app_methods:
        class_name = m["class"] if m["class"] != "ctype" else 'cur_app'
        method_list = m["methods"]
        m_type = m["type"]
        for m in method_list:
            tmp_api = {}
            tmp_api['api_name'] = m
            tmp_api['class_name'] = class_name
            tmp_api['type'] = m_type
            #tmp_api['header_file'] = ''
            #tmp_api['sdk'] = ''
            #tmp_api['framework'] = ''
            app_apis.append(tmp_api)

    methods_in_app = api_utils.intersection_api(app_apis,
                                                inter_api)  #app中的私有方法
    methods_not_in_app = inter_api  # inter_method - methods_in_app # 不在app中的私有方法

    return methods_in_app, methods_not_in_app, private