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:
parent
51e0f0680e
commit
64b1ea9280
3 changed files with 15 additions and 7 deletions
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -1,5 +1,4 @@
|
|||
/target
|
||||
.idea/
|
||||
config.json
|
||||
packet.bin
|
||||
outpacket.bin
|
||||
*.bin
|
||||
|
|
|
@ -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, ())
|
||||
}
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Add table
Reference in a new issue