# App-Sec **Repository Path**: ralken/app-sec ## Basic Information - **Project Name**: App-Sec - **Description**: App-Sec 是一款安卓应用安全性检测工具,他利用静态分析的方式,对安卓应用程序进行漏洞&隐私泄露检测。 - **Primary Language**: Java - **License**: Apache-2.0 - **Default Branch**: develop - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2022-04-02 - **Last Updated**: 2022-04-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # App-Sec **App-Sec** 是一款安卓应用安全性检测工具,他利用静态分析和动态分析的方式,对 apk 进行安全检测,它旨在实现如下功能: - URL字符串提取:ValueSetAnalysis - 应用权限:Permission - 反射代码:Refactor - 加密接口: - 组件信息 - 组件暴露检测 - 行为逻辑关系图 - 静态行为类目 - 动态行为类目 - ANDROID 漏洞:Vulnerability 项目架构上分为四层,自底向上分别为:基础能力、公共模块、应用模块、交互入口。 - 基础能力:主要为该项目所依赖的开源工具集合,如 Soot,Frida,JsonObject,ApkTools... - 公共模块:该层主要是应用基础能力层生成的服务于上层的共有信息,如 函数调用图,控制流程图,ApkHandler 对象 - 应用模块:各个模块依赖公有模块提供的数据,实现各个业务模块的功能。实现过程中,该层各个业务模块互不依赖,方便拆卸功能。 - 启动程序:程序执行的入口层,其他模块会以接口的形式注册到启动模块中。 框架接口 定义接口 ISecModule,定义了初始化,启动,停止,输出作为应用模块完整的生命周期。 如果要在工程中新增模块,可以继承 AbstractSecModule 类,重写生命周期方法,实现完整的模块功能。 ```java public interface ISecModule { void onCreate(); //初始化模块变量 void onStart(); //主要运算代码 void onStop(); //构造最终输出,建议最终都转化为json格式 void resultOutput(); //输出到文件,已在AbstractSecModule中实现 } //在 AbstractSecModule 中定义了 moduleOutput 参数, //resultOutput 会将字段输出到目标路径中 public class AbstractSecModule implements ISecModule { protected StringBuilder moduleOutput = new StringBuilder(); } ``` 模块实现后,在 App-Sec 模块下注册,工具启动时会执行已经注册的模块。 ```java //执行程序 public static void main(String[] args) { if(args.length==0){ registerAll(); } else { registerCustomly(Arrays.asList(args[0].split(","))); } FileUtility.initDirs(); Logger.moduleTest = false; SootDriver.configDefault(); //初始化 Soot for (ISecModule iSecModule : Modules.moduleMap.values()) { iSecModule.onCreate(); iSecModule.onStart(); //这里暂时先写成依次调用的形式 iSecModule.onStop(); iSecModule.resultOutput(); } } //在Modules类中注册 private static class Modules{ static final Map moduleMap = new HashMap<>(){{ put("ValueSetAnalysis",new ValueSetAnalysisModule()); put("Permission",new PermissionModule()); put("ComponentLeak",new ComponentLeakModule()); put("Vuln",new VulnModule()); }}; } ``` 配置信息 ```java public class Config { //目标 Apk 的路径 public static String APK_PATH = "./example/ValueSetAnalysisExample.apk"; //日志输出路径 public static String LOGDIR = "./logs/"; //模块输出路径 public static String APPSEC_OUTPUT_DIR = "./AppSecResult/"; } ``` 模块的输出路径:**./AppSecResult/ModuleName/Package** 类 **FileUtility** 控制了模块的标准输出,它的 fw 方法会按格式将模块内容输出到 AppSecResult 文件夹中。