GithubHelp home page GithubHelp logo

evanlabs / ios_private_api_checker Goto Github PK

View Code? Open in Web Editor NEW

This project forked from deftmkj/ios_private_api_checker

1.0 1.0 0.0 4.49 MB

iOS 12.1 Xcode10以上检查私有API

Python 56.93% Roff 0.13% CSS 7.89% JavaScript 30.05% HTML 5.00%

ios_private_api_checker's Introduction

博客

博客记录

前言

网上有个2.7 Python的资料,顺便熟练下Python,用Python3.7 + Django重写了一下,把Bug都修复了一下,慢慢完善
网易游戏

iOS_Private_API_Checker

Version

1.iOS 12.1 Xcode10 以上

2.Python3.7

3.Django 2.2.3

Complete

1.从ipa中提取一些基本信息,例如app名字,sdk版本,包名等,可以辅助QA日常工作。

2.ipa架构检查,可以看出是否支持64位架构,可以辅助AppStore提审

3.ipa使用私有api情况,可以辅助AppStore提审

4.mkj_private_apis.db已经是编译好的各种api集合,云盘地址(链接: https://pan.baidu.com/s/1bsMEp-Xs4LVr7TB3cfcfew 提取码: zkcu 复制这段内容后打开百度网盘手机App,操作更方便哦),下载下来放进根目录,不然你自己要跑半个多小时才能全部入库

脚本里面的抓取的docset可以从官方这里下载,也可以参考上面博客文章

# 各版本 iOS docSet 的元信息
https://developer.apple.com/library/downloads/docset-index.dvtdownloadableindex
# iOS 8.1 docSet
https://devimages-cdn.apple.com/docsets/20141020/031-07735-A.dmg
# iOS 9.3.5 docSet
https://devimages-cdn.apple.com/docsets/20160321/031-52212-A.dmg

依赖

altgraph==0.16.1
Django==2.2.3
macholib==1.11
pytz==2019.1
sqlparse==0.3.0
virtualenv==16.6.0
XlsxWriter==1.1.8

虚拟环境配置

virtualenv方式

1.进入项目文件夹,用virtualenv创建虚拟环境,没有该工具用pip install virtualenv / pip3 install virtualenv 安装

2.virtualenv venv

3.virtualenv -p /usr/local/bin/python3 venv # 创建3的环境

4.pip install -r requirements.txt # 虚拟环境导入依赖

5.. venv/bin/activate # 启动虚拟环境

Pycharm方式

1.下载项目下来,用Pycharm打开,然后点击Pycharm --- Preference --- Project --- Project Interpreter配置虚拟环境

2.点击右边的齿轮,选择add,Virtualenv Environment --- New Environment 默认确定即可

3.打开Pycharm下面的Terminal,进入虚拟环境,安装依赖包

4.安装 pip install -r requirements.txt

5.然后build_apis_db.py文件可以单独跑,就会在项目主目录下生成一个tmp文件夹生成对应frameworkdump之后的头文件

6.最后自动会正则这些头文件,然后写入mkj_private_apis.db对应的表中进行后续匹配

运行

方式1

如果你会自己编译入库,就在config.py文件中找到sdks_configs,配置对应的路径地址,稍后博客有介绍如何配置,如果你想用线程的,就直接去云盘下载我编译好的iOS 12的api,但是docset是9.2.5的,直接把下载好的db文件拖进项目根目录即可,然后到根目录check_private_apis.py文件,修改main里面的check_multi(path),这里的path填写你的ipa所在文件夹,注意是文件夹,脚本会批量扫描目录下所有ipa并输出Excel,可以在项目tmp目录中找到生成的Excel文件

方式2

刚才上面配置好的Django的虚拟环境,安装好了依赖,依然在项目根目录下,执行. venv/bin/activate启动Python3虚拟环境,执行 python private_apis_app/manage.py runserver 启动本地服务,输入http://127.0.0.1:8000/check/,拖入你的ipa即可

小工具

脚本检查ipa各种参数信息 Python3实现的,里面也有个Python2的

步骤原理分析

1、通过class-dump导出Frameworks以及PrivateFrameworks中可执行文件的头文件,通过脚本提取方法分别为SET_A集合和SET_E集合

2、通过Framework中的Header文件夹下暴露的头文件进行提取,通过脚本提取方法设置为SET_B集合

3、找到Xcode内置的com.apple.adc.documentation.iOS.docset数据库(iOS 9.3之后修改了内置数据结构,后面介绍再介绍),多表查询出对应的API,设置SET_C集合

4、那么SET_F =(SET_A - SET_B - SET_C)就是公有Framework下对应的私有API,设置为集合SET_F

5、原本B集合中的API就是私有库里面的,因此都不能被使用,则最终的私有API集合为SET_D = SET_F + SET_E

6、使用class-dump反编译ipa包中的app文件,然后和SET_D做交集即可获取到。

以下是构建所用到的表名

集合A --- framework_dump_apis framework可执行文件dump后的api集合

集合B --- framework_header_apis framework暴露的头文件api集合

集合C --- document_apis 内置文档docset数据集合

集合D --- all_private_apis 最终私有apis集合

集合E --- private_framework_dump_apis 私有framework可执行文件dump后的集合

集合F --- framework_private_apis 集合A - 集合B - 集合 C剩下的apis

集合G --- white_list_apis 白名单

TODO

1、class-dump有些文件会报错,需要查看下

2、mach-o文件中的依赖除了系统,是不是还需要dump第三方其他的库进行扫描@xpath

3、私有api在公开的Framework及私有的PrivateFramework都有。

4、9.2.5的iOS系统对应的Xcode 8是有docset的,后面的Xcode都有新的文件格式了,博客有介绍,需要自己分析,但是有点乱

ios_private_api_checker's People

Contributors

deftmkj avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.