From c81689961c7ba259a13f20e24fa1a773e0a48a77 Mon Sep 17 00:00:00 2001 From: lifegpc Date: Thu, 9 Apr 2026 12:56:18 +0800 Subject: [PATCH] Add NatsupochiCrypt (untested) --- msg_tool_xp3data/crypt.json | 40 +++++++++++++++++++ src/scripts/kirikiri/archive/xp3/crypt/mod.rs | 18 ++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/msg_tool_xp3data/crypt.json b/msg_tool_xp3data/crypt.json index f5fd47e..856e354 100644 --- a/msg_tool_xp3data/crypt.json +++ b/msg_tool_xp3data/crypt.json @@ -337,6 +337,10 @@ "ControlBlockName": "deepone.bin", "Title": "Deep One -ディープワン- | 深渊的来访者" }, + "DISCODE-2 Niritsu Haihan": { + "$type": "NatsupochiCrypt", + "Title": "DISCODE-2 二律背反" + }, "Do-M Imouto O-nedari Kojin Lesson": { "$type": "HashCrypt", "Title": "ドM妹おねだり個人レッスン~私のSEX家庭教師お兄ちゃん~ | 义妹私教辅导~哥哥我是家庭教师" @@ -526,6 +530,10 @@ "$type": "HashCrypt", "Title": "ハメドル白濁堕ち ~生中出しで、お仕事を貰っていいですか?~" }, + "Hame-dori Jikkyou Chuukei!": { + "$type": "NatsupochiCrypt", + "Title": "ハメ撮り実況中継!兄妹初エッチ12時間" + }, "Haniwari! Sayaka Ojou-sama": { "$type": "FlyingShineCrypt", "Title": "はにわり!沙耶華お嬢様~感染する股間の大きなモノ~" @@ -647,6 +655,10 @@ "$type": "HashCrypt", "Title": "HENTAI 巨乳ナース ~草食男子、治療計画!?~" }, + "Hikuu Yousai Mitsutsubo no Himegimi": { + "$type": "NatsupochiCrypt", + "Title": "妃喰要塞 蜜壺の姫君" + }, "Hime to Majin to Koi Suru Tamashii": { "$type": "HashCrypt", "Title": "ヒメと魔神と恋するたましぃ" @@ -727,6 +739,10 @@ "$type": "HashCrypt", "Title": "インモラル・ラブ ~妻の連れ子が俺の恋人~" }, + "Imouto Haramasex": { + "$type": "NatsupochiCrypt", + "Title": "妹孕ませっくす" + }, "Imouto Shokushu Rape": { "$type": "HashCrypt", "Title": "妹触手レイプ ~復讐の処女貫通~" @@ -1216,6 +1232,14 @@ "Key": 87, "Title": "夏ノ終熄 | 夏之终熄 | 夏日终焉" }, + "Natsuiro Shimai": { + "$type": "NatsupochiCrypt", + "Title": "夏色姉妹 ~幼馴染と真夏のヒメゴト~ | 夏色姐妹~青梅竹马与盛夏秘事~" + }, + "Natsupochi": { + "$type": "NatsupochiCrypt", + "Title": "なつぽち" + }, "Natsuzora Kanata": { "$type": "CxEncryption", "Mask": 757, @@ -1245,6 +1269,10 @@ "ControlBlockName": "nekogami.bin", "Title": "ネコ神さまと、ななつぼし -妹の姉- | 猫神大人与七颗星星" }, + "Netorare Osananajimi ~Haruka to Chika~": { + "$type": "NatsupochiCrypt", + "Title": "寝取られ幼馴染~春花と千夏~" + }, "Nidaime wa ☆ Mahou Shoujo": { "$type": "CxEncryption", "Mask": 507, @@ -1259,6 +1287,10 @@ "$type": "NephriteCrypt", "Title": "にいなちゃん Lovely Life" }, + "Nitou Ou Mono wa Ittou mo Ezu": { + "$type": "NatsupochiCrypt", + "Title": "二刀追うものは一刀も得ず | 追二刀者不得一刀" + }, "Nyotai-ka Panic!": { "$type": "HashCrypt", "Title": "女体化パニック! ~オンナのコのカラダってキモチイイ~" @@ -1279,6 +1311,10 @@ "$type": "OkibaCrypt", "Title": "置き場がない!" }, + "Omae no Kaa-chan, Ii Onna Da yo na": { + "$type": "NatsupochiCrypt", + "Title": "お前の母ちゃん、良い女だよな。 | 你妈真漂亮 | 你媽真漂亮" + }, "Omae no Tsuma wa, Ore no Inran Niku Yome": { "$type": "HashCrypt", "Title": "お前の妻は、オレの淫乱肉嫁 ~お隣さんは欲求不満でした~" @@ -1817,6 +1853,10 @@ "$type": "HashCrypt", "Title": "たわわ奥さん×ハプニングジム ~むっちりボディとすけべなエクササイズ~" }, + "Temptation -Saiin no Naraku-": { + "$type": "NatsupochiCrypt", + "Title": "Temptation -催淫の奈落-" + }, "Temptation Naked": { "$type": "HashCrypt" }, diff --git a/src/scripts/kirikiri/archive/xp3/crypt/mod.rs b/src/scripts/kirikiri/archive/xp3/crypt/mod.rs index a15b18b..5bc1d7b 100644 --- a/src/scripts/kirikiri/archive/xp3/crypt/mod.rs +++ b/src/scripts/kirikiri/archive/xp3/crypt/mod.rs @@ -164,6 +164,7 @@ enum CryptType { DameganeCrypt, NephriteCrypt, AlteredPinkCrypt, + NatsupochiCrypt, } #[derive(Clone, Debug, Deserialize)] @@ -255,6 +256,7 @@ impl Schema { CryptType::DameganeCrypt => Box::new(DameganeCrypt::new(self.base.clone())), CryptType::NephriteCrypt => Box::new(NephriteCrypt::new(self.base.clone())), CryptType::AlteredPinkCrypt => Box::new(AlteredPinkCrypt::new(self.base.clone())), + CryptType::NatsupochiCrypt => Box::new(NatsupochiCrypt::new(self.base.clone())), }) } } @@ -880,7 +882,7 @@ impl Read for NephriteCryptReader { } } -seek_crypt_filehash_key_u8_impl!(AlteredPinkCrypt, AlteredPinkCryptReader); +seek_crypt_impl!(AlteredPinkCrypt, AlteredPinkCryptReader); impl Read for AlteredPinkCryptReader { fn read(&mut self, buf: &mut [u8]) -> std::io::Result { @@ -894,6 +896,20 @@ impl Read for AlteredPinkCryptReader { } } +seek_crypt_filehash_key_impl!(NatsupochiCrypt, NatsupochiCryptReader); + +impl Read for NatsupochiCryptReader { + fn read(&mut self, buf: &mut [u8]) -> std::io::Result { + let readed = self.inner.read(buf)?; + let key = (self.key >> 3) as u8; + for t in (&mut buf[..readed]).iter_mut() { + *t ^= key; + } + self.pos += readed as u64; + Ok(readed) + } +} + #[test] fn test_deserialize_crypt() { for (key, schema) in CRYPT_SCHEMA.iter() {