Soot实践(一):利用Soot来获取Android的组件列表
来源:互联网 发布:杭州小周seo 编辑:程序博客网 时间:2024/05/22 13:04
Soot实践(一):利用Soot来获取Android的组件列表
在了解了Soot的一些基本概念后,现在可以着手进行一些Soot实践。本篇旨在基于Soot框架,来自定义一些Android应用的安全检测规则。
新建工程,添加Soot依赖
首先,新建一个Java工程,并添加所需要的依赖包,之后就可以在工程中引用Soot提供的框架了。
每日构建的包可以从http://soot-build.cs.uni-paderborn.de/nightly/soot/获取。Soot-trunk.jar文件包含了所有需要的库文件。Maven仓库可以使用:http://soot-build.cs.uni-paderborn.de/nexus/。
功能与代码实现
这里只做一个简单的例子,查找到目标App应用的所有Receiver,并将其打印出来。相应的代码如下:
首先是Soot参数的初始化。
private static void sootInitial()
{
G.reset();
//1、首先,需要设置要一些执行参数
//设置Apk作为分析的输入源
Options.v().set_src_prec(Options.src_prec_apk);
//设置输出为Apk或dex
Options.v().set_output_format(Options.output_format_jimple);
//设置允许使用魔幻类
Options.v().set_allow_phantom_refs(true);
//设置需要依赖到的android框架包
Options.v().set_android_jars(PLATFORM_PATH);
Options.v().set_keep_line_number(true);
Options.v().set_whole_program(true);
Options.v().set_process_dir(Arrays.asList("G:\\demo.apk"));
//设置分析中可能需要依赖到的一些包(或类)
Options.v().set_include(Arrays.asList(
"java.lang.*",
"java.util.*",
"java.io.*",
"java.math.*",
"java.sql.*",
"java.text.*",
"java.net.*",
"javax.servlet.*",
"android.*",
"sun.misc.*",
"javax.crypto.*",
"org.apache.http.*",
"soot.*"
));
//加载必要的包
Scene.v().loadNecessaryClasses();
PackManager.v().runBodyPacks();
}
其次是执行的分析:
package com.akira.soot.demo;
import soot.Scene;
import soot.SootClass;
import soot.SootMethod;
import java.util.Collection;
import java.util.List;
import java.util.Set;
/**
* Created by akira on 2017/6/21.
*/
public class SootAnalyzer
{
private static final StringTARGET_CLASS = "android.content.BroadcastReceiver";
public void runAnalysis()
{
SootClass targetClass = Scene.v().getSootClass(TARGET_CLASS);
Collection<SootClass> classSet = Scene.v().getFastHierarchy().getSubclassesOf(targetClass);
for (SootClass aClass : classSet)
{
System.out.println(aClass.getType().getClassName());
}
}
}
最后是调用入口main方法:
public class SootTest
{
private static final String PLATFORM_PATH = "D:\\android-sdk-windows\\platforms";
public static void main(String[] args)
{
sootInitial();
SootAnalyzer analyzer = new SootAnalyzer();
analyzer.runAnalysis();
}
……
}
后续可以利用Soot工具来完成Android应用的安全检测,如检测SSL证书实现是否为空,检测某个方法是否始终返回常量值等等。
- Soot实践(一):利用Soot来获取Android的组件列表
- soot学习(一)
- soot
- soot实现Android Apps插桩(一)
- 利用Soot插装Android App
- 利用soot插装Android App
- soot代码分析框架的基础知识(一)
- 基于Soot的Java程序分析生存手册(一)
- 使用SOOT进行代码分析(一)
- soot 学习笔记 一
- soot学习笔记(一)
- soot基础 -- soot中基本的对象
- 基于Soot的Android Apps检测
- Soot对象基础(Fundamental Soot Object)
- 基本的Soot对象
- Soot的eclipse插件
- Instrumenting Android Apps with Soot
- soot学习笔记-2.使用soot解析Android apk.
- 打印html并去掉页眉页脚
- java 中序列化的作用和好处
- MySQL 权限管理简单篇
- 大话设计模式——简单工厂模式
- AWS 连接超时分析(AWS-route53 + nginx + tomcat)
- Soot实践(一):利用Soot来获取Android的组件列表
- 99行Swift编写人工智能图片识别服务器
- 蚁人
- 二部图匹配
- maven入门:mac IntelliJ IDEA 配置maven(三)
- 为什么Dialog不能用Application的Context
- 数据仓库模型的层级结构以及范式建模和维度建模
- 用Glide框架加载图片
- 责任链(职责链)模式简例[Chain of Responsibility]