1
Fork 0
mirror of https://github.com/redstrate/Kawari.git synced 2025-04-29 01:47:45 +00:00

More attempts at packet decryption

This commit is contained in:
Joshua Goins 2025-03-08 16:39:13 -05:00
parent 51e0f0680e
commit 64b1ea9280
3 changed files with 15 additions and 7 deletions

3
.gitignore vendored
View file

@ -1,5 +1,4 @@
/target
.idea/
config.json
packet.bin
outpacket.bin
*.bin

View file

@ -1,4 +1,5 @@
use std::io::Cursor;
use std::fs::write;
use binrw::{BinRead, BinResult};
use physis::blowfish::Blowfish;
@ -40,15 +41,19 @@ where
panic!("This segment type is encrypted and no key was provided!");
};
let size = size - 16; // 16 = header size
let size = size - (std::mem::size_of::<u32>() * 4) as u32; // 16 = header size
let mut data = Vec::new();
data.resize(size as usize, 0x0);
reader.read_exact(&mut data)?;
write("encrypted.bin", &data);
let blowfish = Blowfish::new(encryption_key);
let decrypted_data = blowfish.decrypt(&data).unwrap();
write("decrypted.bin", &decrypted_data);
let mut cursor = Cursor::new(&decrypted_data);
T::read_options(&mut cursor, endian, ())
}

View file

@ -39,7 +39,9 @@ enum ConnectionType {
#[binrw]
#[derive(Debug, Clone)]
struct IPCSegment {
unk: u32,
unk1: u8,
unk2: u8,
op_code: u8,
}
#[binrw]
@ -142,8 +144,8 @@ async fn send_packet(socket: &mut WriteHalf<TcpStream>, segments: &[PacketSegmen
}
let header = PacketHeader {
unk1: 0,
unk2: 0,
unk1: 0xE2465DFF41A05252, // wtf?
unk2: 0x75C4997B4D642A7F, // wtf? x2
timestamp,
size: std::mem::size_of::<PacketHeader>() as u32 + total_segment_size,
connection_type: ConnectionType::Lobby,
@ -202,9 +204,11 @@ pub async fn parse_packet(socket: &mut WriteHalf<TcpStream>, data: &[u8], state:
state.client_key = Some(generate_encryption_key(key, phrase));
let blowfish = Blowfish::new(&state.client_key.unwrap());
let mut data = blowfish.encrypt(&0xE0003C2Au32.to_le_bytes()).unwrap();
let mut data = 0xE0003C2Au32.to_le_bytes().to_vec();
data.resize(0x280, 0);
let data = blowfish.encrypt(&data).unwrap();
let response_packet = PacketSegment {
source_actor: 0,
target_actor: 0,