mirror of
https://git.ethanthesleepy.one/ethanaobrien/ew.git
synced 2025-05-13 11:37:33 -05:00
I hate encryption
This commit is contained in:
parent
4405b1ae22
commit
163f5956a1
7 changed files with 2048 additions and 13 deletions
14
.gitignore
vendored
14
.gitignore
vendored
|
@ -1,14 +1,2 @@
|
||||||
# Generated by Cargo
|
a/
|
||||||
# will have compiled files and executables
|
|
||||||
debug/
|
|
||||||
target/
|
target/
|
||||||
|
|
||||||
# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
|
|
||||||
# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
|
|
||||||
Cargo.lock
|
|
||||||
|
|
||||||
# These are backup files generated by rustfmt
|
|
||||||
**/*.rs.bk
|
|
||||||
|
|
||||||
# MSVC Windows builds of rustc generate these, which store debugging information
|
|
||||||
*.pdb
|
|
||||||
|
|
1831
Cargo.lock
generated
Normal file
1831
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
10
Cargo.toml
Normal file
10
Cargo.toml
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
[package]
|
||||||
|
name = "ew"
|
||||||
|
version = "0.0.1"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
actix-web = { version = "4.5.1", features = [ "openssl" ] }
|
||||||
|
openssl = { version = "0.10" }
|
||||||
|
base64 = "0.21.5"
|
||||||
|
reqwest = { version = "0.11", features = ["blocking"] }
|
29
cert.pem
Normal file
29
cert.pem
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
-----BEGIN CERTIFICATE-----
|
||||||
|
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
|
||||||
|
-----END CERTIFICATE-----
|
52
key.pem
Normal file
52
key.pem
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
-----BEGIN PRIVATE KEY-----
|
||||||
|
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
|
||||||
|
Ulo31znSDnAUYFEHQo/FadDUm5xCpiY=
|
||||||
|
-----END PRIVATE KEY-----
|
24
src/encryption.rs
Normal file
24
src/encryption.rs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
use openssl::symm::{Cipher, Crypter, Mode};
|
||||||
|
use openssl::error::ErrorStack;
|
||||||
|
use base64::{Engine as _, engine::general_purpose};
|
||||||
|
|
||||||
|
const IV_LENGTH: usize = 16;
|
||||||
|
const KEY: &str = "3559b435f24b297a79c68b9709ef2125";
|
||||||
|
|
||||||
|
pub fn decrypt_packet(base64_input: &str) -> Result<String, ErrorStack> {
|
||||||
|
let base64_buffer = general_purpose::STANDARD.decode(base64_input).unwrap();
|
||||||
|
|
||||||
|
let decryption_iv = &base64_buffer[..IV_LENGTH];
|
||||||
|
let ciphertext = &base64_buffer[IV_LENGTH..];
|
||||||
|
|
||||||
|
let cipher = Cipher::aes_256_cbc();
|
||||||
|
let mut decrypter = Crypter::new(cipher, Mode::Decrypt, KEY.as_bytes(), Some(decryption_iv))?;
|
||||||
|
|
||||||
|
let mut decrypted_data = vec![0u8; ciphertext.len() + cipher.block_size()];
|
||||||
|
let mut decrypted_len = decrypter.update(ciphertext, &mut decrypted_data)?;
|
||||||
|
decrypted_len += decrypter.finalize(&mut decrypted_data[decrypted_len..])?;
|
||||||
|
|
||||||
|
decrypted_data.truncate(decrypted_len);
|
||||||
|
|
||||||
|
Ok(String::from_utf8(decrypted_data).unwrap())
|
||||||
|
}
|
101
src/main.rs
Normal file
101
src/main.rs
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
mod encryption;
|
||||||
|
use actix_web::{
|
||||||
|
// post,
|
||||||
|
// get,
|
||||||
|
HttpResponse,
|
||||||
|
HttpRequest,
|
||||||
|
http::header::HeaderMap,
|
||||||
|
web,
|
||||||
|
dev::Service
|
||||||
|
};
|
||||||
|
use openssl::ssl::{SslAcceptor, SslFiletype, SslMethod};
|
||||||
|
|
||||||
|
async fn make_post_request(url: &str, body: &str, headers: &HeaderMap) -> Result<String, reqwest::Error> {
|
||||||
|
let client = reqwest::Client::new();
|
||||||
|
let mut response = client
|
||||||
|
.post(url)
|
||||||
|
.body(body.to_string());
|
||||||
|
|
||||||
|
for (name, value) in headers.iter() {
|
||||||
|
if name == "Accept-Encoding" {continue;};
|
||||||
|
if name == "host" {
|
||||||
|
response = response.header("host", "api.app.lovelive-sif2.bushimo.jp");
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
response = response.header(name, value.to_str().unwrap());
|
||||||
|
}
|
||||||
|
|
||||||
|
let response_body = response.send().await?.text().await?;
|
||||||
|
|
||||||
|
Ok(response_body)
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn make_get_request(url: &str, headers: &HeaderMap) -> Result<String, reqwest::Error> {
|
||||||
|
let client = reqwest::Client::new();
|
||||||
|
let mut response = client.get(url);
|
||||||
|
for (name, value) in headers.iter() {
|
||||||
|
if name == "Accept-Encoding" {continue;};
|
||||||
|
if name == "host" {
|
||||||
|
response = response.header("host", "api.app.lovelive-sif2.bushimo.jp");
|
||||||
|
continue;
|
||||||
|
};
|
||||||
|
response = response.header(name, value.to_str().unwrap());
|
||||||
|
}
|
||||||
|
let response_body = response.send().await?.text().await?;
|
||||||
|
Ok(response_body)
|
||||||
|
}
|
||||||
|
|
||||||
|
async fn log_unknown_request(req: HttpRequest, body: String) -> HttpResponse {
|
||||||
|
if body != String::new() {
|
||||||
|
println!("req: {}", encryption::decrypt_packet(&body).unwrap_or(String::new()));
|
||||||
|
let resp = make_post_request(&format!("https://api.app.lovelive-sif2.bushimo.jp{}", req.path()), &body, req.headers()).await.unwrap();
|
||||||
|
|
||||||
|
//println!("Unhandled request: {} {}", req.path(), body);
|
||||||
|
println!("resp: {}", encryption::decrypt_packet(&resp).unwrap_or(String::new()));
|
||||||
|
HttpResponse::Ok().body(resp)
|
||||||
|
} else {
|
||||||
|
let resp = make_get_request(&format!("https://api.app.lovelive-sif2.bushimo.jp{}", req.path()), req.headers()).await.unwrap();
|
||||||
|
|
||||||
|
//println!("Unhandled request: {} {}", req.path(), body);
|
||||||
|
println!("resp: {}", encryption::decrypt_packet(&resp).unwrap_or(String::new()));
|
||||||
|
HttpResponse::Ok().body(resp)
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[actix_web::main]
|
||||||
|
async fn main() -> std::io::Result<()> {
|
||||||
|
use actix_web::{App, HttpServer};
|
||||||
|
|
||||||
|
let mut builder = SslAcceptor::mozilla_intermediate(SslMethod::tls()).unwrap();
|
||||||
|
builder
|
||||||
|
.set_private_key_file("key.pem", SslFiletype::PEM)
|
||||||
|
.unwrap();
|
||||||
|
builder.set_certificate_chain_file("cert.pem").unwrap();
|
||||||
|
|
||||||
|
let rv = HttpServer::new(|| App::new()
|
||||||
|
.wrap_fn(|req, srv| {
|
||||||
|
println!("Request: {}", req.path());
|
||||||
|
srv.call(req)
|
||||||
|
})
|
||||||
|
.default_service(web::route().to(log_unknown_request)))
|
||||||
|
.bind_openssl("0.0.0.0:8080", builder)?
|
||||||
|
.run();
|
||||||
|
println!("Server started: http://127.0.0.1:{}", 8080);
|
||||||
|
rv.await
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
fn main() {
|
||||||
|
let base64_input = "MX2tzmKTxY7EsV46rYFZuAfxeY0tPHuZ0etG15WsK1MAzs/U0WUXE4bJZINrEvCxqqUbvCYxhDtXp3HoeH/zDXtnW183aF/aYycmUW3aAF6zyio4/PJoqFl7EGET37ruotoQ9Teof2PXpXraF94diw==";
|
||||||
|
match decrypt_packet(base64_input) {
|
||||||
|
Ok(decrypted_json) => {
|
||||||
|
// Process the decrypted JSON
|
||||||
|
println!("Decrypted JSON: {}", decrypted_json);
|
||||||
|
}
|
||||||
|
Err(err) => {
|
||||||
|
eprintln!("Error decrypting packet: {}", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*/
|
Loading…
Add table
Reference in a new issue