视频介绍

部分源码如下

package top.yunp.nie.shell;

import java.io.*;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;

public class ShellMain {

    public static void main(String[] args) {
        var currentExeFile = new File(ShellMain.class.getProtectionDomain().getCodeSource().getLocation().getPath());
        var currentExeFileName = currentExeFile.getName();
        if (currentExeFile.isFile() && currentExeFile.getName().endsWith(".exe")) {
            try (var fis = new FileInputStream(currentExeFile)) {
                try (var dis = new DataInputStream(fis)) {
                    dis.skipBytes(10 * 1024 * 1024);
                    var buffer = new ArrayList<Integer>();

                    // Search separator
                    boolean foundSeparator = false;
                    int ch;
                    while ((ch = dis.read()) != -1) {
                        buffer.add(ch);
                        if (buffer.size() > 8) {
                            buffer.removeFirst();
                        }
                        if (buffer.getFirst() == 0x12 &&
                                buffer.get(1) == 0x34 &&
                                buffer.get(2) == 0x56 &&
                                buffer.get(3) == 0x78 &&
                                buffer.get(4) == 0x12 &&
                                buffer.get(5) == 0x34 &&
                                buffer.get(6) == 0x56 &&
                                buffer.get(7) == 0x78
                        ) {
                            foundSeparator = true;
                            break;
                        }
                    }

                    // Read 7z content
                    if (foundSeparator) {
                        var workDir = new File(System.getProperty("user.home")).toPath()
                                .resolve(".nie")
                                .resolve(currentExeFileName.substring(0, currentExeFileName.lastIndexOf('.')))
                                .toFile();
                        if (!workDir.exists()) {
                            workDir.mkdirs();
                        }

                        // Release 7z.exe
                        var seven7exeFile = new File(workDir, "7z.exe");
                        try (var s7os = new FileOutputStream(seven7exeFile)) {
                            s7os.write(dis.readNBytes(dis.readInt()));
                        }

                        // Release package
                        var packageFile = new File(workDir, "package.7z");
                        try (var pkgOs = new FileOutputStream(packageFile)) {
                            pkgOs.write(dis.readNBytes(dis.readInt()));
                        }

                        // Extract package files
                        var code = Runtime.getRuntime().exec(new String[]{
                                seven7exeFile.getAbsolutePath(), "x", "-y", "package.7z"
                        }, null, workDir).waitFor();
                        if (code != 0) {
                            System.err.println("Failed to extract 7z package");
                        }

                        // Read config.json
                        var configFile = new File(workDir, "config.txt");
                        var configString = Files.readString(configFile.toPath());
                        var kvs = new HashMap<String, String>();
                        var lines = configString.split("\n");
                        for (String line : lines) {
                            var kv = line.split("=");
                            if (kv.length == 2) {
                                kvs.put(kv[0].trim(), kv[1].trim());
                            }
                        }

                        var startFileName = kvs.get("start");
                        if (startFileName != null) {
                            var startFile = new File(workDir, startFileName);
                            if (startFile.exists()) {
                                code = Runtime.getRuntime().exec(new String[]{
                                        startFile.getAbsolutePath()
                                }, null, workDir).waitFor();
                                if (code != 0) {
                                    System.err.println("Failed to execute main program");
                                }
                            }
                        }
                    }
                }
            } catch (IOException | InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}