软件逆向工程-dll消息钩取

  • JAVA实验 文件流操作
  • Assignment
  • Environment
  • Solutions
  • 结果
  • Code
  • 8-7
  • Code


JAVA实验 文件流操作

Assignment

8-2
实现一个程序,该程序的输人是一个目录字符串和一个文件扩展名字符串,程序递归地搜索该目录及其各级子目录,在这些目录中查找所有扩展名与指定扩展名相同的文件,将这些文件的相对路径名记录下来并向控制台输出。

8-7
实现两个程序,第一个程序读入一个文件plain.txt将读入的每个字节的数值加5,然后输出到另一个文件cipher.ixt中,第二个程序从cipher.txt中读取每个字节,将每个字节的数值减5.再输出到文件decrypt.txt中。比较plain.txt与decrypt.txt的内容。

Environment

idea2017 jdk1.8

Solutions

8-2

本题最关键的就是如何使用递归实现finFile方法(寻找路径下对应后缀名)

java 获取流大小 java流读取文件中的数据_ci


需要三个参数

File path,String name ,int len

Path:寻找的路径

Name:文件的后缀名

Len:寻找的路径的字符串长度(用于最后输出相对路径服务)

java 获取流大小 java流读取文件中的数据_java 获取流大小_02


这两句实现了遍历寻找文件

java 获取流大小 java流读取文件中的数据_java_03


路径下存在文件或者下一级目录,文件使用目录判断后缀名是否符合要求,若为目录则递归进入寻找。

结果

在E:\111中寻找txt文件

java 获取流大小 java流读取文件中的数据_java_04


java 获取流大小 java流读取文件中的数据_java 获取流大小_05


1123目录

java 获取流大小 java流读取文件中的数据_ci_06


可以看出路径下的所有txt都被找出,不管是根目录还是子目录中

Code

//java homework 8.2 寻找目录下的指定扩展名的文件
import java.io.*;
import java.util.Scanner;

public class homework82{
    public static void findFile(File path,String name ,int len){

        if(path.isDirectory())
        {
            File[] files = path.listFiles();//listFiles()  listFiles()方法是返回某个目录下所有文件和目录的绝对路径,返回的是File数组
            for(File file:files)//遍历路径下的文件
            {
                if(file.isFile()) {//只判断文件
                    String fileName = file.getName();
                    String extension = fileName.substring(fileName.lastIndexOf(".") + 1);//截取文件后缀 substring() 方法用于提取字符串中介于两个指定下标之间的字符 一个参数只选最后一个.之后
                    if (extension.equals(name)) {
                        System.out.println("find file: " + "相对路径 .\\" + file.getPath().substring(len + 1));
                        //System.out.println(fileName + "   :   .\\" + file.getPath().substring(len + 1));//获取相对路径
                    }
                }
                    else{
                        findFile(file,name,len);//递归
                    }
            }
        }
        else{
            System.out.println("it is not a Directory.");
        }

    }
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        System.out.print("搜索路径名:");
        String str = in.nextLine();
        File path = new File(str );
        System.out.println("文件路径:"+str);

        in = new Scanner(System.in);
        System.out.print("文件后缀:");
        str = in.nextLine();
        String extension =  new String(str);
        System.out.println("后缀名"+str);

        int len = path.getPath().length();
        findFile(path,extension,len);
    }

}

8-7

这一题需要实现两个程序,一个程序用于加密文件(移位加密)

一个程序用于解密与验证。

java 获取流大小 java流读取文件中的数据_java文件_07


加密部分代码,参考课本p171代码,依次从plain.txt读取c,给c位移5,然后写入到cipher.txt

java 获取流大小 java流读取文件中的数据_java 获取流大小_08


解密部分代码,参考课本p171代码,依次从cipher.txt读取c,给c位移-5,然后写入到decrypt.txt

java 获取流大小 java流读取文件中的数据_java_09


验证部分,同理依次读取plain.txt和decrypt.txt的字符进行比较,相同则过程正确。

结果

加密

java 获取流大小 java流读取文件中的数据_java文件_10


解密与验证

java 获取流大小 java流读取文件中的数据_ci_11


查看实际文件变化

java 获取流大小 java流读取文件中的数据_java_12

Code

//java homework 8.7 加密解密文件 并且判断加解密后是否相同

import java.io.*;
import java.util.Scanner;
//参考课本p171代码
public class homework87 {
    public static void main(String args[])throws IOException
    {
        FileInputStream in = new FileInputStream("E:\\111\\plain.txt");
        FileOutputStream out = new FileOutputStream("E:\\111\\cipher.txt");
        int c;
        while( (c = in.read()) != -1){
           out.write(c+5);
        }
        in.close();
        out.close();
        System.out.println("encry successfully");
    }
}
//java homework 8.7 加密解密文件 并且判断加解密后是否相同

import java.io.*;
import java.util.Scanner;
//参考课本p171代码
public class homework87_2{
    public static void main(String args[])throws IOException
    {
        FileInputStream in = new FileInputStream("E:\\111\\cipher.txt");
        FileOutputStream out = new FileOutputStream("E:\\111\\decrypt.txt");
        int c;
        while( (c = in.read()) != -1){
            out.write(c-5);
        }
        in.close();
        out.close();
        System.out.println("decry successfully");

        FileInputStream plain = new FileInputStream("E:\\111\\plain.txt");
        FileInputStream decrypt = new FileInputStream("E:\\111\\decrypt.txt");
        int m1,m2;
        int flag = 0;
        while( (m1 = plain.read()) != -1){
            if( (m2 = decrypt.read()) != -1){
                if(m1 == m2){
                    flag = 1;
                    continue;
                }
                else{
                    System.out.println("different");
                    flag = 0;
                    break;
                }
            }
            else {
                System.out.println("different");
                flag = 0;
                break;
            }
        }
        if(flag == 1){
            System.out.println("same");
        }

        plain.close();
        decrypt.close();
        //p判断是否相同
    }
}