视频介绍
部分源码如下
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);
}
}
}
}