android静态审计脚本

本文介绍了一种自动反编译apk文件的方法,通过正则表达式匹配安全配置、WebView设置、SSL通信安全、外部存储访问、暴露URL、全局可读写文件和Intent scheme等关键特征,以进行安全审计。在源代码第44行可以进一步优化测试用例,将生成的jar和apktool.jar放在同一文件夹中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自动反编译apk文件后,通过以下正则匹配以下特征,并生成result.txt文件

安全配置类:(((debuggable|allowBackup|exported)=\"true\")

WEBVIEW类:|(addJavascriptInterface|searchBoxJavaBridge)

SSL通信安全类:|(ALLOW_ALL_HOSTNAME_VERIFIER|AllowAllHostnameVerifier|X509Certificate)

外部存储类:|(getExternalStorageDirectory()

暴露的URL地址:|http[s]?://|

全局可读写的内部文件:SharedPreferences|

Intent scheme类:parseUri

在源代码44行,可根据android测试用例进一步完善。

P.s 附件生成jarapktool.jar放同一文件夹即可。


import java.io.BufferedReader;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class droidappauditter {
    public static void main(String[] args) throws Exception {
        if(args.length==0){
            System.out.print("Usage:java -jar package.jar xxxxx.apk");
            System.exit(0);
        }
        else{
            Decompile(args[0]);
        }
    }

    private static void Decompile(String apkname) throws Exception {
        Process p=Runtime.getRuntime().exec("java -jar apktool.jar d "+apkname);
        BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
        String s;
        while((s=br.readLine())!=null){
            System.out.println(s);
        }
        p.waitFor();
        System.out.println("~~~~~~~~~~~~ STEP-2 Auditing~~~~~~~~~~~~");
        String fn=apkname.replaceAll(".apk", "");
        File file=new File(fn);
        File file1=new File("result.txt");
        if(file.exists() && file.isDirectory() && !file1.exists()){
            Audit(fn);
            file1.createNewFile();
        }
    }

    private static void Audit(String fn) throws Exception {
        File file=new File(fn);
        if(file.isFile()){
            BufferedReader br=new BufferedReader(new FileReader(file));
            BufferedWriter bw=new BufferedWriter(new FileWriter("result.txt",true));
            Pattern p=Pattern.compile("(((debuggable|allowBackup|exported)=\"true\")|(addJavascriptInterface|searchBoxJavaBridge)|(ALLOW_ALL_HOSTNAME_VERIFIER|AllowAllHostnameVerifier|X509Certificate)|(getExternalStorageDirectory()|http[s]?://|SharedPreferences|parseUri))");
            String s;
            while((s=br.readLine())!=null){
                Matcher m=p.matcher(s);
                if(m.find()){
                    bw.write(file.getAbsolutePath()+"\r\n"+s+"\r\n");
                    bw.flush();
                }
            }
            br.close();bw.close();
        }
        else if(file.isDirectory()){
            File[] file1=file.listFiles();
            for(int i=0;i<file1.length;i++){
                Audit(file1[i].toString());
            }
        }        
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值