内容简介

捉虫猎手开放API是方便企业用户对APP进行自动化安全审计开放的接口,使用开放API的用户可以通过API接口批量上传APK文件,实时获取检测结果。

使用说明

本文档主要介绍token上传APK应用的具体方法。与页面上传不同,token上传并不需要用户邮箱,拥有token的使用者可以利用简单的脚本来实现批量的上传。在查询结果方面,利用token可以查询检测进度,并可以返回json格式化数据,方便使用者的进一步分析和处理。如果您还未注册申请过API接口,请登陆后申请。

功能概要

状态码

接口返回的格式如下,其中status为返回的状态码:

{“status”:200, “message”:”success”, …… }

状态码 定义 说明
200 成功 请求成功处理,返回正常结果
201 检测未完成 请求成功处理,但是由于未完成检测,暂时无法返回检测结果
400 服务器内部错误 服务器发生故障,请稍后重试
401 文件类型错误 上传的APK文件类型有误,如果是批量上传,必须打包为ZIP格式
402 POST参数错误 POST请求参数错误,请查看接口的参数定义
403 token无效 token无效,无法使用该token上传文件
404 MD5不存在 没有MD5相应的上传记录,请确认MD5值是否正确
405 异常APK无检测结果 该APK应用存在异常,暂时无检测结果

接口详情

上传接口

http://appscan.360.cn/api/upload/

查询接口

http://appscan.360.cn/api/result/

检测结果

检测结果是json格式输出的,其中主要分为四部分,包括基本信息、关键配置、安全漏洞以及安全编码提醒。

基本信息

名称 含义
apk_md5 MD5值
apk_sha1 SHA1值
apk_name APK包名
apk_version APK版本
scan_time 检测时间

关键配置configuration

名称 含义
debuggable 0为安全,1为存在风险,应用程序可被任意调试
allowBackup 0为安全,1为存在风险,应用程序数据可以备份和恢复
activity 0为安全,1为存在风险,Activity组件暴露
service 0为安全,1为存在风险,Service组件暴露
receiver 0为安全,1为存在风险,ContentProvider组件暴露
provider 0为安全,1为存在风险,BroadcastReceiver组件暴露

攻击入口attacksurface

名称 含义
detect_attacksurface 导出组件存在攻击风险

安全漏洞vulnerability

名称 含义
detect_addJavascriptInterface Webview组件远程代码执行漏洞
detect_openFileOutput 全局文件可读写漏洞
detect_AllowAllHostnameVerifier HTTPS关闭主机名验证
detect_Intent_parserUri Intent Scheme URL攻击漏洞
detect_onReceivedSslError WebView忽略SSL证书错误
detect_intent_action APP存在隐式意图调用
detect_custom_x509_trust_manager 自定义SSL x509 TrustManager,信任任意证书漏洞
detect_dexclassloader Dex文件动态加载风险
detect_getSharedPreferences 配置文件可读写漏洞
detect_securerandom 随机数不安全使用风险
detect_unsecure_encrypt 加密方法不安全使用风险
detect_webview_searchboxjavabridge Webview组件系统隐藏接口漏洞
readable App存在全局可读文件
writable App存在全局可写文件
sql_inject 本地sql注入漏洞
Logcat_Dos_Service 拒绝服务漏洞

安全编码提醒warning

名称 含义
detect_log_cat logcat可能泄露程序隐私信息和敏感信息

示例程序

上传

>>> import requests
>>> f = {'file': ('test.apk' ,open('test.apk', 'rb'))}
>>> r = requests.post('http://appscan.360.cn/api/upload/', files=f, data={'token':'test123456'})
>>> r.text
u'{"status": 200, "message": "success", "md5": "3ca921bf475e372ebcc9d1a20029f621"}'
>>> 
>>> f = {'file': ('test_zip.zip' ,open('test_zip.zip', 'rb'))}
>>> r = requests.post('http://appscan.360.cn/api/upload/', files=f, data={'token':'test123456', 'type':'zip'})
>>> r.text
u'{"status": 200, "message": "success", "md5": ["1d6ded1a9461f2145afe698a7fb2b633", "d7b0d81df98600080b02fcee36d762eb"]}'

查询

>>> import requests, json
>>> r = requests.post('http://appscan.360.cn/api/result/', data={'token':'1111', 'md5':'7f13c2e15f6682a5c4fdff198b3ab8b7'})
>>> json.loads(r.text)
u'{
    "status": 200,
    "message": "success",
    "result": {
        "apk_md5": "43c668c3ac299f94b0ae71f03cff4600",
        "apk_name": "com.testapk.testapk",
        "apk_sha1": "61bcfd16637585c4055b4a9523a28285ec20c0cf",
        "vulnerability": {
            "detect_intent_action": [{
                "method_java": "CiAgICBwcml2YXRlIHZvaWQgc2VuZEJvcmFk......",
                "class": "Lcom/testapk/testapk/MainActivity;",
                "method": "sendBoraderCast"
            }]
        },
        "apk_version": "1.0",
        "scan_time": "2014-12-16 20:42:15",
        "warning": {
            "detect_log_cat": [{
                "method_java": "CiAgICBwcml2YXRlIHZvaW......",
                "class": "Lcom/testpak/testapk/MainActivity;",
                "method": "readfromSD"
            }]
        },
        "configuration": {
            "debuggable": "0",
            "allowBackup": "0",
            "activity": {
                "com.testapk.testapk.MainActivity": 1
            }
        }
    }
}'

====