AppShark:一款针对Android应用程序的静态分析与漏洞扫描框架

news2024/12/24 2:49:52

关于AppShark

AppShark是一款针对Android应用程序的安全测试框架,该工具本质上是一个静态污点分析平台,可以用于扫描Android应用程序中的漏洞。

AppShark除了实现行业普遍应用的数据流分析,还将指针分析与数据流分析融合,因而漏洞建模上更精准,规则更灵活,在误报率和漏报率方面有了比较大的改进。Appshark可以作为公司内部的Android
App的自动化检测工具,辅助企业发现App的安全漏洞及隐私合规风险,也可以作为白帽子日常App漏洞挖掘的助手,提高漏洞挖掘的效率及产出。

工具要求

AppShark需要使用指定版本的JDK,即[ JDK
11](https://www.oracle.com/java/technologies/javase/jdk11-archive-
downloads.html)。经过测试后,我们发现该工具不支持其他的LTS版本,比如说JDK 8和JDK 16。

工具下载

广大研究人员可以使用下列命令将该项目源码克隆至本地:

git clone https://github.com/bytedance/appshark.git

项目构建与编译

打开命令行终端,然后切换到项目目录下,并使用gradle工具完成项目代码的构建和编译:

$ ./gradlew build  -x test

执行上述命令之后,我们将会在项目目录的build/libs中查看到生成的jar文件:AppShark-0.1.1-all.jar。

AppShark运行

在命令行终端中切换到项目根目录下,然后运行下列命令并使用配置文件来执行AppShark:

$ java -jar build/libs/AppShark-0.1.1-all.jar  config/config.json5

config.json5文件的配置内容如下所示:

{

  "apkPath": "/Users/apks/app1.apk",

  "out": "out",

  "rules": "unZipSlip.json",

  "maxPointerAnalyzeTime": 600

}

其中的每一个JSON字段解释如下:

apkPath:需要分析的apk文件路径;

out:输出目录路径;

rules:规则文件的路径地址,可以指定多条;

maxPointerAnalyzeTime:从每一个入口点执行分析的超时时间间隔;

debugRule:指定调试过程中启用日志记录的规则名称;

结果解析

下面给出的是一个results.json文件示例:

{

  "AppInfo": {

    "AppName": "test",

    "PackageName": "net.bytedance.security.app",

    "min_sdk": 17,

    "target_sdk": 28,

    "versionCode": 1000,

    "versionName": "1.0.0"

  },

  "SecurityInfo": {

    "FileRisk": {

      "unZipSlip": {

        "category": "FileRisk",

        "detail": "",

        "model": "2",

        "name": "unZipSlip",

        "possibility": "4",

        "vulners": [

          {

            "details": {

              "position": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>",

              "Sink": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r31",

              "entryMethod": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void f()>",

              "Source": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r3",

              "url": "/Volumes/dev/zijie/appshark-opensource/out/vuln/1-unZipSlip.html",

              "target": [

                "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r3",

                "pf{obj{<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>:35=>java.lang.StringBuilder}(unknown)->@data}",

                "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r11",

                "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolderFix1(java.lang.String,java.lang.String)>->$r31"

              ]

            },

            "hash": "ec57a2a3190677ffe78a0c8aaf58ba5aee4d2247",

            "possibility": "4"

          },

          {

            "details": {

              "position": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>",

              "Sink": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r34",

              "entryMethod": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void f()>",

              "Source": "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r3",

              "url": "/Volumes/dev/zijie/appshark-opensource/out/vuln/2-unZipSlip.html",

              "target": [

                "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r3",

                "pf{obj{<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>:33=>java.lang.StringBuilder}(unknown)->@data}",

                "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r14",

                "<net.bytedance.security.app.pathfinder.testdata.ZipSlip: void UnZipFolder(java.lang.String,java.lang.String)>->$r34"

              ]

            },

            "hash": "26c6d6ee704c59949cfef78350a1d9aef04c29ad",

            "possibility": "4"

          }

        ],

        "wiki": "",

        "deobfApk": "/Volumes/dev/zijie/appshark-opensource/app.apk"

      }

    }

  },

  "DeepLinkInfo": {

  },

  "HTTP_API": [

  ],

  "JsBridgeInfo": [

  ],

  "BasicInfo": {

    "ComponentsInfo": {

    },

    "JSNativeInterface": [

    ]

  },

  "UsePermissions": [

  ],

  "DefinePermissions": {

  },

  "Profile": "/Volumes/dev/zijie/appshark-opensource/out/vuln/3-profiler.json"

}

最后

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,有需要的小伙伴,可以【扫下方二维码】免费领取:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/183628.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【项目精选】基于SpringBoot+Vue实现的仿掘金论坛系统(包含完整源码以及部署教程)

项目简介 本论坛基于SpringBootVue框架实现前后端分离&#xff0c;自适应手机端和电脑端&#xff0c;界面简洁美观&#xff0c;功能完善&#xff0c;性能高效。分为用户系统和管理系统两部分。 大厂微服务架构设计&#xff1b;代码简洁、高效无冗余&#xff1b;注释详细易阅读…

LabVIEW 在NI Linux实时设备上访问Shell

LabVIEW 在NI Linux实时设备上访问Shell有一台运行NI Linux实时操作系统的设备&#xff0c;想访问设备上的shell或终端。要使用以下任一方法与设备通信&#xff0c;必须在计算机上安装终端客户端。使用SSH连接&#xff1a;1. 打开电源并将设备连接到网络或直接连接到计算机。2.…

已解决:Linux安装Docker完整过程

① 目的 接口自动化接口需要持续集成&#xff0c;最终选择Jenkins来实现。通过docker来实现安装部署Jenkins ② 环境 Linux ③Docker的自动化安装 Docker官方和国内daocloud都提供了一键安装的脚本&#xff0c;使得Docker的安装更加便捷。 官方的一键安装方式&#xff1a; curl…

C#,索尼偏光相机(Polarization Camera)传感器IMX250和专用SDK简介

以下文字用百度翻译&#xff0c;效果一般&#xff0c;凑合看吧。2018年12月开始上市的索尼偏光相机和偏光相机专用SDK实现了高功能、高画质、高速处理。其要点在于&#xff0c;开发为不在需要专业知识的偏振信号处理的安装中花费工时&#xff0c;能够以最小限度的成本利用的SDK…

逆战成钢!大势智慧2023新春年会暨表彰大典圆满举行

2023年1月14日&#xff0c;大势智慧2023新春年会暨表彰大典如期举行。暂别了疫情的阻隔&#xff0c;大势智慧武汉总部与各分公司成员时隔两年再次迎来“面对面拥抱”。三百多名大势成员群贺新春&#xff0c;共同度过了一次难忘的年会盛典。 逆战成钢 用奋战实现业绩、规模高增…

Flutter 2023 Roadmap 解析

随着 Flutter Forward 大会召开&#xff0c; Flutter 官方在 3.7 版本 之余为我们展示了如 3D 渲染支持、add-to-web 等未来可能出现的 Feature&#xff0c;但是这些都还只是处于开发中&#xff0c;未来可能还会有其他变动&#xff0c;而在大会结束后&#xff0c;官方也公布了更…

【GD32F427开发板试用】基于蓝牙模块的远程点灯演示

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;寒冰1988 一. 前言 感谢极术社区联合兆易创新组织的本次活动&#xff0c;很荣幸能够中签本次的试用机会&#xff0c;结合手里的外围模块&…

代码随想录算法训练营第31天 回溯算法 93.复原IP地址 78.子集 90.子集II

文章目录LeetCode 93.复原IP地址题目讲解思路LeetCode 78.子集题目讲解思路LeetCode 90.子集II题目讲解难点总结LeetCode 93.复原IP地址 题目讲解 思路 递归参数 startIndex一定是需要的&#xff0c;因为不能重复分割&#xff0c;记录下一层递归分割的起始位置。 本题我们还…

ubuntu1804搭建svo2.0环境并跑euroc数据集

0说明 整个SVO2.0环境搭建过程按照官网的说明进行(链接&#xff1a;https://github.com/uzh-rpg/rpg_svo_pro_open) 开发环境是ubuntu18.04ROS-Melodic 1工具安装 Install catkin tools and vcstools if you haven’t done so before. Depending on your operating system …

使用这个插件,fiddler抓包直接生成httprunner脚本

har2case可以将.har文件转化成yaml格式或者json格式的httprunner的脚本文件&#xff0c;生成.har格式文件可以借助 fiddler 或 Charles 抓包工具 友情提示&#xff1a; 录制脚本&#xff0c;只是一个过渡&#xff0c;从0到1的一个过渡&#xff0c;如果让你直接写脚本&#xff…

微信app hook修改剪刀石头布以及骰子思路

0x01 前言 该方法很简单&#xff0c;本次记录是为了加深对安卓hook技术的学习&#xff0c;以及进一步熟悉frida和objection的使用&#xff0c;如果只是想需要这个功能&#xff0c;推荐手机root后装微x模块 技术仅供分享&#xff0c;请勿用于非法用途 0x02 环境准备 首先需要准…

linux下更新tomcat版本

进入tomcat目录下查看当前版本号./version.sh2.切忌升级之前一定要备份老版本mkdir tomcat-backup3.拷贝老版本到你创建的文件夹中cp -rf apache-tomcat-9.0.45-stunew/ tomcat-backup/4.下载tomcat安装包&#xff0c;随便你下载什么版本&#xff0c;我这里以68为例官网&#x…

ssm二手废旧塑料回收交易系统的设计与实现

内容是设计并且实现一个废旧塑料交易系统的设计与实现。它是在Windows下&#xff0c;以MYSQL为数据库开发平台&#xff0c;Tomcat网络信息服务作为应用服务器。废旧塑料交易系统的设计与实现的功能已基本实现&#xff0c;主要包括用户、回收站、加工厂、预约信息、收购信息、交…

ARP协议与ARP地址欺骗防护

ARP协议 什么是MAC地址 MAC地址是固化在网卡上的网络标识&#xff0c;由Ieee802标准规定。 什么是广播 向同一个网段内的设备&#xff0c;发送数据包&#xff0c;广播IP地址是同网段最后一个IP地址。 认识ARP协议 ARP的全称是地址解析协议&#xff0c;我们通过ARP协议获取…

Webpack 运行时代码分析 - 动态加载

文章内容&#xff1a;用 webpack 打包含有动态加载的模块&#xff0c;分析打包后的代码&#xff0c;也就是 webpack 运行时代码。 先思考如下一些问题&#xff1a; 1.什么叫做动态加载 2.如果不使用 webpack 打包&#xff0c;能做到动态加载吗 3.webpack 是如何实现动态加载的…

安装mysql的保姆级教程

安装mysql的保姆级教程&#xff1a; 1.准备的条件 已下载mysql应用软件 my.ini文件&#xff08;见2&#xff09; 2.设置my.ini文件 &#xff08;1&#xff09;my.ini文件内容&#xff1a; [mysqld] # 设置3306端口 port3306 # 设置mysql的安装目录 ----------是你的文件路径…

TCP/IP网络编程——基于 UDP 的服务端/客户端

完整版文章请参考&#xff1a; TCP/IP网络编程完整版文章 文章目录第 6 章 基于 UDP 的服务端/客户端6.1 理解 UDP6.1.1 UDP 套接字的特点6.1.2 UDP 的工作原理6.1.3 UDP 的高效使用6.2 实现基于 UDP 的服务端/客户端6.2.1 UDP 中的服务端和客户端没有连接6.2.2 UDP 服务器和客…

业务流程软件的优点和对企业的好处

我们都知道&#xff0c;CRM客户管理软件可以为企业识别意向客户&#xff0c;带来更多业绩。那么在处理业务的过程中&#xff0c;一套自带业务流程管理的CRM软件是否重要&#xff1f;下面我们来说说企业使用业务流程管理软件的好处&#xff0c;您就清楚问题的答案了。 1、减少错…

【项目精选】基于 Spring Boot + Mybatis Plus + MySQL 的社区居民联系方式管理系统

项目简介 此系统使用 Spring Boot Mybatis Plus Spring Security React Ant Design Pro 架构编写。数据库采用 MySQL&#xff0c;提供强大的、安全的和完整的管理社区居民的信息的功能。 安全性 此系统在系统层面提供了众多的安全特性&#xff0c;产品安全无忧。这些特性…

【高并发】- 生产级系统搭建 - 2

前言 本章讲解高并发系统中常见概念及相关设计的方案&#xff0c;目的是让小伙伴都了解高并发系统中&#xff0c;每个环节所涉及到的相关概念。帮助大家更好地理解和掌握高并发系统中的场景及设计思想。 1. 常见高并发系统架构图&#xff08;这里以秒杀系统为例&#xff09; 上…