From 9fd2987235feb1a85ff700f736ec60d05a70f8c9 Mon Sep 17 00:00:00 2001 From: Xiphoseer Date: Wed, 22 Jan 2025 00:48:26 +0100 Subject: [PATCH] chore: decrypt --- Cargo.lock | 119 ++++++++++++++++++----------- Cargo.toml | 2 +- crates/signum/src/chsets/editor.rs | 72 ++++++++++------- examples/decrypt.rs | 37 ++++++++- 4 files changed, 154 insertions(+), 76 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f2c15709..d1583617 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -231,9 +231,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "cc" -version = "1.2.7" +version = "1.2.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a012a0df96dd6d06ba9a1b29d6402d1a5d77c6befd2566afdc26e10603dc93d7" +checksum = "13208fcbb66eaeffe09b99fffbe1af420f00a7b35aa99ad683dfc1aa76145229" dependencies = [ "shlex", ] @@ -242,7 +242,7 @@ dependencies = [ name = "ccitt-t4-t6" version = "0.1.0" dependencies = [ - "color-eyre", + "color-eyre 0.5.11", "structopt", "thiserror", ] @@ -301,7 +301,20 @@ dependencies = [ "eyre", "indenter", "once_cell", - "owo-colors", + "owo-colors 1.3.0", +] + +[[package]] +name = "color-eyre" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55146f5e46f237f7423d74111267d4597b59b0dad0ffaf7303bce9945d843ad5" +dependencies = [ + "backtrace", + "eyre", + "indenter", + "once_cell", + "owo-colors 3.5.0", ] [[package]] @@ -415,7 +428,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.96", ] [[package]] @@ -501,7 +514,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" dependencies = [ "crc32fast", - "miniz_oxide 0.8.2", + "miniz_oxide 0.8.3", ] [[package]] @@ -518,9 +531,9 @@ checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" [[package]] name = "futures-lite" -version = "2.5.0" +version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +checksum = "f5edaec856126859abb19ed65f39e90fea3a9574b9707f13539acf4abf7eb532" dependencies = [ "fastrand", "futures-core", @@ -675,9 +688,9 @@ checksum = "229d53d58899083193af11e15917b5640cd40b29ff475a1fe4ef725deb02d0f2" [[package]] name = "js-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" +checksum = "1cfaf33c695fc6e08064efbc1f72ec937429614f25eef83af942d0e227c3a28f" dependencies = [ "once_cell", "wasm-bindgen", @@ -697,9 +710,9 @@ checksum = "b5aba8db14291edd000dfcc4d620c7ebfb122c613afb886ca8803fa4e128a20a" [[package]] name = "log" -version = "0.4.22" +version = "0.4.25" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +checksum = "04cbf5b083de1c7e0222a7a51dbfdba1cbe1c6ab0b15e29fff3f6c077fd9cd9f" [[package]] name = "md5" @@ -730,9 +743,9 @@ dependencies = [ [[package]] name = "miniz_oxide" -version = "0.8.2" +version = "0.8.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ffbe83022cedc1d264172192511ae958937694cd57ce297164951b8b3568394" +checksum = "b8402cab7aefae129c6977bb0ff1b8fd9a04eb5b51efc50a70bea51cda0c7924" dependencies = [ "adler2", "simd-adler32", @@ -803,6 +816,12 @@ version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2386b4ebe91c2f7f51082d4cefa145d030e33a1842a96b12e4885cc3c01f7a55" +[[package]] +name = "owo-colors" +version = "3.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1b04fb49957986fdce4d6ee7a65027d55d4b6d2265e5848bbb507b58ccfdb6f" + [[package]] name = "parking" version = "2.2.1" @@ -814,7 +833,7 @@ name = "pcf" version = "0.1.0" dependencies = [ "bitflags", - "color-eyre", + "color-eyre 0.5.11", "nom", "nom-supreme", "structopt", @@ -855,7 +874,7 @@ version = "0.3.0" dependencies = [ "ccitt-t4-t6", "chrono", - "color-eyre", + "color-eyre 0.5.11", "md5", "pdf", ] @@ -873,9 +892,9 @@ dependencies = [ [[package]] name = "pin-project-lite" -version = "0.2.15" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" +checksum = "3b3cff922bd51709b605d9ead9aa71031d81447142d828eb4a6eba76fe619f9b" [[package]] name = "png" @@ -887,7 +906,7 @@ dependencies = [ "crc32fast", "fdeflate", "flate2", - "miniz_oxide 0.8.2", + "miniz_oxide 0.8.3", ] [[package]] @@ -940,9 +959,9 @@ dependencies = [ [[package]] name = "proc-macro2" -version = "1.0.92" +version = "1.0.93" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +checksum = "60946a68e5f9d28b0dc1c21bb8a97ee7d018a8b322fa57838ba31cc878e22d99" dependencies = [ "unicode-ident", ] @@ -1037,6 +1056,12 @@ version = "0.1.24" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" +[[package]] +name = "rustversion" +version = "1.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c45b9784283f1b2e7fb61b42047c2fd678ef0960d4f6f1eba131594cc369d4" + [[package]] name = "ryu" version = "1.0.18" @@ -1048,7 +1073,7 @@ name = "sdo-pdf" version = "0.2.0" dependencies = [ "ccitt-t4-t6", - "color-eyre", + "color-eyre 0.5.11", "log", "pdf-create", "sdo-ps", @@ -1070,7 +1095,7 @@ version = "0.3.2" dependencies = [ "bitflags", "ccitt-t4-t6", - "color-eyre", + "color-eyre 0.6.3", "futures-lite", "image", "log", @@ -1142,7 +1167,7 @@ checksum = "5a9bf7cf98d04a2b28aead066b7496853d4779c9cc183c440dbac457641e19a0" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.96", ] [[package]] @@ -1171,7 +1196,7 @@ dependencies = [ "bitflags", "bstr", "chrono", - "color-eyre", + "color-eyre 0.5.11", "displaydoc", "image", "log", @@ -1263,9 +1288,9 @@ dependencies = [ [[package]] name = "syn" -version = "2.0.94" +version = "2.0.96" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "987bc0be1cdea8b10216bd06e2ca407d40b9543468fafd3ddfb02f36e77f71f3" +checksum = "d5d0adab1ae378d7f53bdebc67a39f1f151407ef230f0ce2883572f5d8985c80" dependencies = [ "proc-macro2", "quote", @@ -1297,7 +1322,7 @@ name = "texfonts" version = "0.1.0" dependencies = [ "bitflags", - "color-eyre", + "color-eyre 0.5.11", "nom", "nom-supreme", "structopt", @@ -1330,7 +1355,7 @@ checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.96", ] [[package]] @@ -1413,34 +1438,35 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" [[package]] name = "wasm-bindgen" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" +checksum = "1edc8929d7499fc4e8f0be2262a241556cfc54a0bea223790e71446f2aab1ef5" dependencies = [ "cfg-if", "once_cell", + "rustversion", "wasm-bindgen-macro", ] [[package]] name = "wasm-bindgen-backend" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" +checksum = "2f0a0651a5c2bc21487bde11ee802ccaf4c51935d0d3d42a6101f98161700bc6" dependencies = [ "bumpalo", "log", "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.96", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-futures" -version = "0.4.49" +version = "0.4.50" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38176d9b44ea84e9184eff0bc34cc167ed044f816accfe5922e54d84cf48eca2" +checksum = "555d470ec0bc3bb57890405e5d4322cc9ea83cebb085523ced7be4144dac1e61" dependencies = [ "cfg-if", "js-sys", @@ -1451,9 +1477,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" +checksum = "7fe63fc6d09ed3792bd0897b314f53de8e16568c2b3f7982f468c0bf9bd0b407" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -1461,28 +1487,31 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" +checksum = "8ae87ea40c9f689fc23f209965b6fb8a99ad69aeeb0231408be24920604395de" dependencies = [ "proc-macro2", "quote", - "syn 2.0.94", + "syn 2.0.96", "wasm-bindgen-backend", "wasm-bindgen-shared", ] [[package]] name = "wasm-bindgen-shared" -version = "0.2.99" +version = "0.2.100" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" +checksum = "1a05d73b933a847d6cccdda8f838a22ff101ad9bf93e33684f39c1f5f0eece3d" +dependencies = [ + "unicode-ident", +] [[package]] name = "web-sys" -version = "0.3.76" +version = "0.3.77" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" +checksum = "33b6dd2ef9186f1f2072e409e99cd22a975331a6b3591b12c764e0e55c60d5d2" dependencies = [ "js-sys", "wasm-bindgen", diff --git a/Cargo.toml b/Cargo.toml index 700ec8cc..593d5d28 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,7 +6,7 @@ edition = "2018" [dependencies] structopt = "0.3" -color-eyre = { version = "0.5", default-features = false } +color-eyre = { version = "0.6", default-features = false } prettytable-rs = "0.8" log = "0.4" pretty_env_logger = "0.4" diff --git a/crates/signum/src/chsets/editor.rs b/crates/signum/src/chsets/editor.rs index ae35b95c..3e06f029 100644 --- a/crates/signum/src/chsets/editor.rs +++ b/crates/signum/src/chsets/editor.rs @@ -2,6 +2,7 @@ use super::LoadError; use crate::util::{data::BIT_STRING, Buf}; +use log::{debug, warn}; use nom::{ bytes::complete::{tag, take}, number::complete::{be_u32, u8}, @@ -83,6 +84,36 @@ pub struct EChar<'a> { pub buf: &'a [u8], } +impl EChar<'_> { + /// Print the character to the console + pub fn print(&self) { + let wu = self.width as usize; + let hu = self.height as usize; + println!("{}, {}x{}", self.top, wu, hu); + let border = BORDER[wu]; + println!("{}", border); + for _ in 1..self.top { + println!("| |"); + } + if self.top > 0 { + println!("- -"); + } + for i in 0..hu { + let left = self.buf[2 * i] as usize; + let right = self.buf[2 * i + 1] as usize; + println!("|{}{}|", &BIT_STRING[left], &BIT_STRING[right]); + } + let rest = 24 - self.top - self.height; + if rest > 0 { + println!("- -"); + } + for _ in 1..rest { + println!("| |"); + } + println!("{}", border); + } +} + /// The special NULL char pub const ECHAR_NULL: EChar<'static> = EChar { width: 0, @@ -101,32 +132,9 @@ impl ESet<'_> { let mut skips = Vec::with_capacity(capacity); for (index, ch) in self.chars.iter().enumerate() { println!("\nchar[{}]", index); - let wu = ch.width as usize; - let hu = ch.height as usize; widths.push(ch.width); skips.push(ch.top); - println!("{}, {}x{}", ch.top, wu, hu); - let border = BORDER[wu]; - println!("{}", border); - for _ in 1..ch.top { - println!("| |"); - } - if ch.top > 0 { - println!("- -"); - } - for i in 0..hu { - let left = ch.buf[2 * i] as usize; - let right = ch.buf[2 * i + 1] as usize; - println!("|{}{}|", &BIT_STRING[left], &BIT_STRING[right]); - } - let rest = 24 - ch.top - ch.height; - if rest > 0 { - println!("- -"); - } - for _ in 1..rest { - println!("| |"); - } - println!("{}", border); + ch.print(); } println!(); println!("pub const WIDTH: [u8; 128] = ["); @@ -194,10 +202,20 @@ pub fn parse_eset(input: &[u8]) -> IResult<&[u8], ESet> { let mut chars = Vec::with_capacity(skip as usize); chars.push(ECHAR_NULL); - for _ in 1..skip { + for _i in 1..skip { let (rest, offset) = be_u32(offset_buf)?; - let (_, echar) = parse_echar(&char_buf[offset as usize..])?; - chars.push(echar); + debug!("{_i} @ {offset}"); + if (offset as usize) + 4 > char_buf.len() { + warn!( + "eset: Offset {offset} out of bounds (len {}, at {_i})", + char_buf.len() + ); + chars.push(ECHAR_NULL); + } else { + let at_offset = &char_buf[offset as usize..]; + let (_, echar) = parse_echar(at_offset)?; + chars.push(echar); + } offset_buf = rest; } diff --git a/examples/decrypt.rs b/examples/decrypt.rs index 92fcef31..f3be0390 100644 --- a/examples/decrypt.rs +++ b/examples/decrypt.rs @@ -1,6 +1,7 @@ use std::{fs::File, io::BufWriter, io::Write, path::PathBuf}; use color_eyre::eyre::{self, eyre}; +use signum::chsets::editor::parse_echar; use structopt::StructOpt; #[derive(StructOpt)] @@ -17,15 +18,45 @@ fn main() -> eyre::Result<()> { if buffer.starts_with(b"crypted2") { let buffer = &buffer[8..]; let (magic, b) = buffer.split_at(8); - let (count, d) = b.split_at(2); - let (base, dat) = d.split_at(128 + 6); + let (count, d) = b.split_at(4); + let (base, e) = d.split_at(128); + let (num, dat) = e.split_at(4); + println!("{count:?}, {base:?}, {num:?}"); let f = File::create(&opt.to)?; let mut w = BufWriter::new(f); w.write_all(magic)?; w.write_all(count)?; w.write_all(base)?; + w.write_all(num)?; + + /* + let num = u32::from_be_bytes([num[0], num[1], num[2], num[3]]) as usize; + let (_ofs, _rest) = dat.split_at(num); + for chnk in _ofs.chunks(4).take(128) { + let v = [chnk[0], chnk[1], chnk[2], chnk[3]]; + let v = (u32::from_be_bytes(v) ^ 0x11111111) as usize; + eprintln!("{chnk:?} => {v:x}"); + } + */ + + + let (_, rest) = dat.split_at(128 * 4); + let mut buf = Vec::with_capacity(rest.len()); + for b in rest { + buf.push(b ^ 0x11); + } + let mut rest = &buf[..]; + for i in 1..127 { + let (r, e) = parse_echar(rest).unwrap(); + eprintln!("{i}: {e:?}"); + e.print(); + rest = r; + } + for byte in dat { + w.write_all(&[byte ^ 0x11])?; + /* // FIXME: This was a wild guess and is not actually the algorithm that was used let low_p = *byte & 0xf; let high_p = *byte >> 4; @@ -41,7 +72,7 @@ fn main() -> eyre::Result<()> { ); let dec = low | (high << 4); - w.write_all(&[dec])?; + w.write_all(&[dec])?; */ } w.flush()?; Ok(())