def is_api_exist_in_with_framework(table_name, api_name, framework, sdk): sql = "select * from " + table_name + " where api_name = ? and framework = ? and sdk = ?;" if (framework.endswith(".framework") == False): framework = "%s.framework" % (framework) params = (api_name, framework, sdk) return SqliteHandler().exec_select_one(sql, params)
def create_document_type_table(table_name): sql = "CREATE TABLE IF NOT EXISTS %s (\ api_name varchar,\ class_name varchar,\ type varchar,\ header_file varchar,\ sdk varchar,\ framework varchar)" % (table_name) SqliteHandler().exec_sql(sql)
def get_dsidx_apis(db_path): ''' has document apis info:获得带文档的api。(/Users/Test/Library/Developer/Shared/Documentation/DocSets/com.apple.adc.documentation.AppleiOS7.0.iOSLibrary.docset/Contents/Resources),在里面有个docSet.dsidx的文件,这就是Xcode针对api做的数据库,从这里可以获得带文档的api的各种信息了,从而有了带文档的api集合set_B。 ''' sql = "SELECT T.Z_PK, T.ZTOKENNAME, T.ZTOKENTYPE, T.ZCONTAINER, M.ZDECLAREDIN FROM ZTOKEN AS T, ZTOKENMETAINFORMATION AS M WHERE ZTOKENTYPE IN (3,9,12,13,16) AND T.Z_PK = M.ZTOKEN" apiset = SqliteHandler(db=db_path).exec_select(sql) return apiset
def get_private_api_list(): ''' 缓存数据,批量检查的时候,减少sql io ''' global private_apis if not private_apis: sql = "select * from private_apis group by api_name having private_apis.api_name not in (select api_name from whitelist group by api_name);" params = () private_apis = SqliteHandler().exec_select(sql, params) return private_apis
def get_white_api_list(): ''' 白名单中的api 缓存数据,批量检查的时候,减少sql io ''' global white_apis if not white_apis: sql = "select * from whitelist group by api_name;" params = () private_apis = SqliteHandler().exec_select(sql, params) return private_apis
def get_private_api_list(framework = None): framework_str = None if framework and len(framework) > 0: framework_str = '(' for f in framework: framework_str = framework_str + "'" + f + "', " framework_str = framework_str[0:-2] framework_str = framework_str + ')' #有frame过滤条件 if framework_str: sql = "select * from private_apis group by api_name having private_apis.framework in " + framework_str + " and private_apis.api_name not in (select api_name from whitelist group by api_name);" params = () else: sql = "select * from private_apis group by api_name having private_apis.api_name not in (select api_name from whitelist group by api_name);" params = () private_apis = SqliteHandler().exec_select(sql, params) return private_apis
def get_private_apis(private=None, public=None): where_content = "" if (private != None and len(private) > 0): for single_private in private: if (single_private.endswith(".framework") == False): single_private = "%s.framework" % (single_private) where_content += "'%s'," % (single_private) if (public != None and len(public) > 0): for single_public in public: if (single_public.endswith(".framework") == False): single_public = "%s.framework" % (single_public) where_content += "'%s'," % (single_public) if (len(where_content) > 0): where_content = "(%s)" % (where_content[0:-1]) sql = "select * from private_apis where framework in %s group by api_name;" % ( where_content) else: sql = "select * from private_apis group by api_name;" params = () return SqliteHandler().exec_select(sql, params)
def get_container_name(Z_PK, db_path): sql = "SELECT ZCONTAINERNAME FROM ZCONTAINER WHERE Z_PK = ?;" container = SqliteHandler(db=db_path).exec_select_one(sql, (Z_PK, )) if container: return container['ZCONTAINERNAME'] return None
def delete_apis_by_sdk(table_name, sdk): sql = "delete from " + table_name + " where sdk = ?;" return SqliteHandler().exec_update(sql, (sdk, ))
def create_some_table(): #从public framework 中dump出来的所有api,其中包含部分私有api(sql7) sql1 = ("create table framework_dump_apis(" "api_name varchar," "class_name varchar," "type varchar," "header_file varchar," "sdk varchar," "framework varchar)") #从public framework .h文件中解析代码解析出来的api sql2 = ("create table framework_header_apis(" "api_name varchar," "class_name varchar," "type varchar," "header_file varchar," "sdk varchar," "framework varchar)") # #有文档的pi # sql3 = ("create table document_apis(" # "api_name varchar," # "class_name varchar," # "type varchar," # "header_file varchar," # "sdk varchar," # "framework varchar)") # #sql2 - sql3 # sql4 = ("create table undocument_apis(" # "api_name varchar," # "class_name varchar," # "type varchar," # "header_file varchar," # "sdk varchar," # "framework varchar)") #包括sql6,sql7的所有内容 sql5 = ("create table private_apis(" "api_name varchar," "class_name varchar," "type varchar," "header_file varchar," "sdk varchar," "framework varchar)") #private framework dump出来的api,全部为私有api sql6 = ("create table private_framework_dump_apis(" "api_name varchar," "class_name varchar," "type varchar," "header_file varchar," "sdk varchar," "framework varchar)") sql7 = ("create table framework_private_apis(" "api_name varchar," "class_name varchar," "type varchar," "header_file varchar," "sdk varchar," "framework varchar)") SqliteHandler().exec_sql(sql1, ()) SqliteHandler().exec_sql(sql2, ()) # SqliteHandler().exec_sql(sql3, ()) # SqliteHandler().exec_sql(sql4, ()) SqliteHandler().exec_sql(sql5, ()) SqliteHandler().exec_sql(sql6, ()) SqliteHandler().exec_sql(sql7, ())
from db.sqlite_utils import SqliteHandler fp = open("/Users/gavin/Documents/03-my_develop/01-code/pythonWorkspace/iOS-private-api-checker/result/private_2.txt") content = fp.readlines() fp.close() for line in content: line = str(line.replace("\n","")) sql = "select * from ZTOKEN WHERE ZTOKENNAME like '%s' and ZLANGUAGE in (1,2)" % (line) rt = SqliteHandler(db="9.3-docSet.dsidx").exec_select(sql) if rt: print sql
def is_api_exist_in_private_apis(api_name): sql = "select * from private_apis where api_name = '%s'" % (api_name) return SqliteHandler().exec_select_one(sql)
def get_document_apis(sdk=config.sdks_config[0]["sdk"]): sql = "select * from document_apis where sdk = ?" params = (sdk, ) return SqliteHandler().exec_select(sql, params)
def is_api_exist_in(table_name, api): sql = "select * from " + table_name + " where api_name = ? and class_name = ? and sdk = ?;" params = (api['api_name'], api['class_name'], api['sdk']) return SqliteHandler().exec_select_one(sql, params)
def get_framework_dump_apis(sdk): sql = "select * from framework_dump_apis where sdk = ?" params = (sdk, ) return SqliteHandler().exec_select(sql, params)
def delete_apis_from_private_apis(api_name, framework, class_name, sdk): sql = "delete from private_apis where api_name = '%s' and class_name = '%s' and framework = '%s' and sdk = '%s'" % ( api_name, class_name, framework, sdk) return SqliteHandler().exec_update(sql)
def get_document_apis_type(type_name, sdk=config.sdks_config[0]["sdk"]): sql = "select * from document_apis_type_%s where sdk = ?" % (type_name) params = (sdk, ) return SqliteHandler().exec_select(sql, params)
def get_framework_private_apis(): sql = "select * from framework_private_apis group by api_name;" params = () return SqliteHandler().exec_select(sql, params)
def get_framework_and_header(Z_PK, db_path): sql = "SELECT ZFRAMEWORKNAME, ZHEADERPATH FROM ZHEADER WHERE Z_PK = ?;" rst = SqliteHandler(db=db_path).exec_select_one(sql, (Z_PK, )) return rst
def insert_apis(table_name, datas): sql = "insert into " + table_name + "(api_name, class_name, type, header_file, sdk, framework) values(:api_name, :class_name, :type, :header_file, :sdk, :framework)" return SqliteHandler().exec_insert_many(sql, datas)
def clean_table(table_name): sql = "delete from %s" % (table_name) return SqliteHandler().exec_sql(sql)