mirror of
https://github.com/lifegpc/msg-tool.git
synced 2026-06-19 01:14:45 +08:00
Add support to extract keys from protected exe
This commit is contained in:
13
Cargo.lock
generated
13
Cargo.lock
generated
@@ -1510,6 +1510,18 @@ dependencies = [
|
||||
"rle-decode-fast",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libsteamless"
|
||||
version = "0.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "73e463ef0797adef557f8747a89ea24fcc402b787f4c75465c8b3392ccc73fc3"
|
||||
dependencies = [
|
||||
"aes",
|
||||
"anyhow",
|
||||
"cbc",
|
||||
"pelite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "libtlg-rs"
|
||||
version = "0.2.4"
|
||||
@@ -1681,6 +1693,7 @@ dependencies = [
|
||||
"json",
|
||||
"lazy_static",
|
||||
"libflac-sys",
|
||||
"libsteamless",
|
||||
"libtlg-rs",
|
||||
"lz4",
|
||||
"markup5ever",
|
||||
|
||||
@@ -39,6 +39,7 @@ json = { version = "0.12", optional = true }
|
||||
jpegxl-sys = { package = "msg-tool-jpegxl-sys", version = "0.11", optional = true, features = ["vendored"] }
|
||||
lazy_static = "1.5.0"
|
||||
libflac-sys = { version = "0.3", optional = true }
|
||||
libsteamless = { version = "0.1", optional = true }
|
||||
libtlg-rs = { version = "0.2", optional = true, features = ["encode"] }
|
||||
lz4 = { version = "1.28", optional = true }
|
||||
markup5ever = { version = "0.38", optional = true }
|
||||
@@ -109,7 +110,7 @@ hexen-haus = ["dep:memchr", "utils-str"]
|
||||
hexen-haus-arc = ["hexen-haus"]
|
||||
hexen-haus-img = ["hexen-haus", "image"]
|
||||
kirikiri = ["emote-psb", "fancy-regex", "flate2", "json", "dep:lz4", "utils-escape"]
|
||||
kirikiri-arc = ["kirikiri", "dep:adler", "dep:aes", "dep:argon2", "dep:base64", "dep:blake2", "dep:bytes", "dep:cbc", "dep:chacha20", "chacha20/legacy", "chacha20/xchacha", "dep:fastcdc", "flate2", "dep:hex", "dep:int-enum", "dep:md5", "dep:memchr", "msg_tool_macro/kirikiri-arc", "dep:msg_tool_xp3data", "dep:parse-size", "dep:pelite", "serde/rc", "dep:sha2", "dep:sha3", "dep:shake", "dep:siphasher", "dep:tjs2dec", "utils-case-insensitive-string", "utils-lzss", "utils-serde-base64bytes", "utils-simple-pack", "zopfli", "zstd"]
|
||||
kirikiri-arc = ["kirikiri", "dep:adler", "dep:aes", "dep:argon2", "dep:base64", "dep:blake2", "dep:bytes", "dep:cbc", "dep:chacha20", "chacha20/legacy", "chacha20/xchacha", "dep:fastcdc", "flate2", "dep:hex", "dep:int-enum", "dep:libsteamless", "dep:md5", "dep:memchr", "msg_tool_macro/kirikiri-arc", "dep:msg_tool_xp3data", "dep:parse-size", "dep:pelite", "serde/rc", "dep:sha2", "dep:sha3", "dep:shake", "dep:siphasher", "dep:tjs2dec", "utils-case-insensitive-string", "utils-lzss", "utils-serde-base64bytes", "utils-simple-pack", "zopfli", "zstd"]
|
||||
kirikiri-img = ["kirikiri", "image", "dep:libtlg-rs"]
|
||||
musica = []
|
||||
musica-arc = ["musica", "dep:crc32fast", "flate2", "dep:include-flate", "utils-blowfish", "utils-rc4", "utils-serde-base64bytes", "utils-xored-stream"]
|
||||
|
||||
@@ -3655,7 +3655,36 @@ fn load_key_packages_from_exe<S: AsRef<std::path::Path> + ?Sized>(path: &S) -> V
|
||||
|
||||
fn load_key_package_from_path<S: AsRef<std::path::Path> + ?Sized>(path: &S) -> Result<KeyPackage> {
|
||||
let view = pelite::FileMap::open(path)?;
|
||||
load_key_package(&view, path)
|
||||
let mut last_error = match load_key_package(&view, path) {
|
||||
Ok(key) => return Ok(key),
|
||||
Err(e) => e,
|
||||
};
|
||||
if libsteamless::is_steamstub(&view) {
|
||||
let options = libsteamless::SteamlessOptions::default();
|
||||
match libsteamless::process_data(view.as_ref().to_vec(), &options, &|_level, _message| {}) {
|
||||
Ok(unpacked) => match load_key_package(&unpacked, path) {
|
||||
Ok(key) => return Ok(key),
|
||||
Err(e) => {
|
||||
last_error = e;
|
||||
}
|
||||
},
|
||||
Err(err) => {
|
||||
last_error = err;
|
||||
}
|
||||
}
|
||||
}
|
||||
let v = view.as_ref();
|
||||
// DMM DRM may put game exe at the end of protected exe
|
||||
if let Some(pos) = memchr::memmem::find(&v[4..], &v[..4]) {
|
||||
let nv = &v[4 + pos..];
|
||||
match load_key_package(&nv, path) {
|
||||
Ok(key) => return Ok(key),
|
||||
Err(e) => {
|
||||
last_error = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
Err(last_error)
|
||||
}
|
||||
|
||||
fn find_resource<
|
||||
|
||||
Reference in New Issue
Block a user