summaryrefslogtreecommitdiff
path: root/decryptor/src
diff options
context:
space:
mode:
Diffstat (limited to 'decryptor/src')
-rw-r--r--decryptor/src/main.rs65
1 files changed, 65 insertions, 0 deletions
diff --git a/decryptor/src/main.rs b/decryptor/src/main.rs
new file mode 100644
index 0000000..d48e7bb
--- /dev/null
+++ b/decryptor/src/main.rs
@@ -0,0 +1,65 @@
+use std::{env, process};
+use openssl::symm::{decrypt, Cipher};
+use hex;
+
+fn decrypt_authinfo(authinfo_raw: String) -> Result<(String, String), String> {
+ let authinfo = hex::decode(authinfo_raw).map_err(|_| "Invalid hex encoding for authinfo")?;
+
+ let cipher = Cipher::des_ede3();
+ let iv = [0u8; 8];
+
+ // Decrypting loop, iterating from 000000 to 999999
+ for i in 0..1_000_000 {
+ let key = format!("{:06}", i);
+ let key_bytes = format!("{}000000000000000000", key).into_bytes();
+
+ match decrypt(cipher, &key_bytes, Some(&iv), &authinfo) {
+ Ok(bytes) => {
+ let result = String::from_utf8_lossy(&bytes);
+
+ if result.contains("OTT") {
+ return Ok((key, result.to_string()));
+ }
+ }
+ Err(_) => {
+ // Decryption failed with this key, continue trying
+ }
+ }
+ }
+
+ return Err("Could not find a possible key".to_string());
+}
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+
+ if args.len() != 2 {
+ eprintln!("Usage: {} <authinfo>", args[0]);
+ process::exit(1);
+ }
+
+ let authinfo_raw = args[1].clone();
+
+ match decrypt_authinfo(authinfo_raw) {
+ Ok((key, result)) => {
+ let components: Vec<&str> = result.split('$').collect();
+
+ println!("========================================");
+ println!("Found key: {}", key);
+ println!("========================================");
+ println!("{}", result);
+ println!("========================================");
+ println!(" random: {}", components[0]);
+ println!(" encry token: {}", components[1]);
+ println!(" user id: {}", components[2]);
+ println!(" device id: {}", components[3]);
+ println!(" ip address: {}", components[4]);
+ println!(" mac address: {}", components[5]);
+ println!(" reserved: {}", components[6]);
+ println!(" ott: {}", components[7]);
+ }
+ Err(err) => {
+ eprintln!("Error: {}", err);
+ }
+ }
+}