Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java扫描文件并根据其内容对其进行过滤(反扫描)_Java_Java.util.scanner_Slice - Fatal编程技术网

使用Java扫描文件并根据其内容对其进行过滤(反扫描)

使用Java扫描文件并根据其内容对其进行过滤(反扫描),java,java.util.scanner,slice,Java,Java.util.scanner,Slice,我想编写一个程序,它将获得.Smali文件的完整路径(已经在.apk文件上使用APKtool) 之后,您应该输入一个函数或单词。然后代码应该扫描所有的.smali文件(比如文本文件)并扫描给定的函数或单词。所有包含这些内容的.Smali都应保存在新文件中,并打印到控制台 一般的想法是对给定的函数或单词进行反切片,然后找到使用这些函数或单词的.Smali文件。(将用于提高安全性或查找应用程序中的安全问题) 我已经尝试(借助一些找到的代码)扫描给定.smali文件的路径。我现在尝试扫描文件中给定的单

我想编写一个程序,它将获得.Smali文件的完整路径(已经在.apk文件上使用APKtool)

之后,您应该输入一个函数或单词。然后代码应该扫描所有的.smali文件(比如文本文件)并扫描给定的函数或单词。所有包含这些内容的.Smali都应保存在新文件中,并打印到控制台

一般的想法是对给定的函数或单词进行反切片,然后找到使用这些函数或单词的.Smali文件。(将用于提高安全性或查找应用程序中的安全问题)

我已经尝试(借助一些找到的代码)扫描给定.smali文件的路径。我现在尝试扫描文件中给定的单词(使用扫描仪)。我只希望函数打印并保存包含此单词的.smali文件


导入java.io.File;
导入java.io.FileFilter;
导入java.io.FileWriter;
导入java.io.IOException;
导入java.util.ArrayList;
导入java.util.Scanner;
导入java.util.List;
公开课决赛
{
公共void getFiles(字符串目录)引发IOException{
文件目录=新文件(目录);
//验证该文件名是否有效
如果(!directory.exists()){
System.out.println(String.format(“目录%s不存在”,dir));
返回;
}
//验证它是否是目录而不是文件路径
如果(!directory.isDirectory()){
System.out.println(String.format(“提供的值%s不是目录”,dir));
返回;
}
//创建FileFilter并重写其accept方法
FileFilter logFilefilter=新建FileFilter(){
//重写接受方法
公共布尔接受(文件){
//如果文件扩展名为.smali,则返回true,否则返回false
if(file.getName().endsWith(“.smali”)){
返回true;
}
返回false;
}
};
File[]files=directory.listFiles(logFilefilter);
//创建一个附加的扫描仪来存储用户输入(要查找的单词)。
扫描仪用户输入=新扫描仪(System.in);
System.out.println(“请输入要在.smali文件中查找的单词:”;
String seekWord=userInput.nextLine();//此行将存储您要查找的行
userInput.close();
//创建arrayList以存储包含该单词的所有文件。
List filesWithWord=new ArrayList();
//让我们列出过滤后的文件
用于(文件f:文件){
扫描仪sc=新扫描仪(f);
while(sc.hasNext()){
//查看每一行,如果该行包含单词store,则保存该文件。
字符串字=sc.nextLine();
if(word.contentEquals(seekWord)){
System.out.println(f.getName());
添加(f);
continue;//不需要遍历其余的行。
}
}
sc.close();
}
//创建另一个文件来存储结果
File fileWithFoundFiles=新文件(“C:\\examplePath\\results.txt”);
//确保文件的父级存在。
fileWithFoundFiles.getParentFile().mkdirs();
如果(!fileWithFoundFiles.exists()){
fileWithFoundFiles.createNewFile();
}
try(FileWriter writer=newfilewriter(fileWithFoundFiles)){//try with resources以便自动关闭资源
for(文件f:filesWithWord){
//将文件名写入该文件
writer.write(f.getName()+“\n”);
}
}捕获(例外e){
System.out.println(e.getMessage());
}
}
公共静态void main(字符串[]args)引发IOException
{
最终结果=新的最终结果();
Final.getFiles(“C:\\examplePath”);
}
}
到目前为止,代码只显示给定路径中的所有Smali文件。我很不擅长编码,不知道如何实现扫描所有.smali文件的过滤器。(getFiles.class中的注释代码本身工作正常。但是使用扫描仪,我无法存储当前扫描的文件名)


可能有人知道如何解决这个问题。

嗨,要打印包含您正在查找的单词的所有文件并将其写入文件,您需要对
getFiles
方法进行一些更改:

 public void getFiles(String dir) throws IOException {
        File directory = new File(dir);
        //Verify if it is a valid file name

        System.out.println("Looking for files in directory: " + dir);
        if (!directory.exists()) {
            System.out.println(String.format("Directory %s does not exist", dir));
            return;
        }
        //Verify if it is a directory and not a file path
        if (!directory.isDirectory()) {
            System.out.println(String.format("Provided value %s is not a directory", dir));
            return;
        }
        System.out.printf("files found in dir: %s%n", Arrays.asList(directory.listFiles()));
        //create a FileFilter and override its accept-method
        FileFilter logFilefilter = new FileFilter() {
            //Override accept method
            public boolean accept(File file) {
                //if the file extension is .smali return true, else false
                if (file.getName().endsWith(".smali")) {
                    return true;
                }
                return false;
            }
        };

        File[] files = directory.listFiles(logFilefilter);

        // create an additional scanner to store the userInput (the word you want to find).
        Scanner userInput = new Scanner(System.in);
        System.out.println("Please enter the word that you want to find in the .smali files: ");
        String seekWord = userInput.nextLine(); //this line will store the line you are looking for
        userInput.close();

        // create an arrayList to store all the files that contain the word.
        List<File> filesWithWord = new ArrayList<>();



        //Let's list out the filtered files
        for (File f : files) {
            Scanner sc = new Scanner(f);
            while (sc.hasNext()) {
                // look in each line and if the line contains the word store the file.
                String line = sc.nextLine();
                if (line.contains(seekWord)) {
                    System.out.println("found word " + seekWord + " in file: " + f.getName());
                    filesWithWord.add(f);
                    break; // no need to go through the rest of the lines.
                }

            }
            sc.close();
        }

        System.out.println("Smali files with the word: " + filesWithWord);
        // create another file to store the results
        File fileWithFoundFiles = new File("path/to/file/files.txt");
        //make sure the parents of the file exist.
        fileWithFoundFiles.getParentFile().mkdirs();
        if (!fileWithFoundFiles.exists()) {
            fileWithFoundFiles.createNewFile();
        }
        try (FileWriter writer = new FileWriter(fileWithFoundFiles)) { //try-with resources so your resource gets closed automatically
            for (File f : filesWithWord) {
                //write the fileNames to the file
                System.out.println("writing file name " + f.getName() + " to " + f);
                writer.write(f.getName() + "\n");
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }


    }
public void getFiles(String dir)引发IOException{
文件目录=新文件(目录);
//验证该文件名是否有效
System.out.println(“在目录:“+dir”中查找文件);
如果(!directory.exists()){
System.out.println(String.format(“目录%s不存在”,dir));
返回;
}
//验证它是否是目录而不是文件路径
如果(!directory.isDirectory()){
System.out.println(String.format(“提供的值%s不是目录”,dir));
返回;
}
System.out.printf(“在目录中找到的文件:%s%n”,Arrays.asList(directory.listFiles());
//创建FileFilter并重写其accept方法
FileFilter logFilefilter=新建FileFilter(){
//重写接受方法
公共布尔接受(文件){
//如果文件扩展名为.smali,则返回true,否则返回false
if(file.getName().endsWith(“.smali”)){
返回true;
}
返回false;
}
};
文件[]