Soot实践(一):利用Soot来获取Android的组件列表

来源:互联网 发布:杭州小周seo 编辑:程序博客网 时间:2024/05/22 13:04

Soot实践(一):利用Soot来获取Android的组件列表

 

在了解了Soot的一些基本概念后,现在可以着手进行一些Soot实践。本篇旨在基于Soot框架,来自定义一些Android应用的安全检测规则。

  1. 新建工程,添加Soot依赖

首先,新建一个Java工程,并添加所需要的依赖包,之后就可以在工程中引用Soot提供的框架了。

每日构建的包可以从http://soot-build.cs.uni-paderborn.de/nightly/soot/获取。Soot-trunk.jar文件包含了所有需要的库文件。Maven仓库可以使用:http://soot-build.cs.uni-paderborn.de/nexus/。

  1. 功能与代码实现

这里只做一个简单的例子,查找到目标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证书实现是否为空,检测某个方法是否始终返回常量值等等。

原创粉丝点击