[Scummvm-git-logs] scummvm master -> 06ea94b2921399af86e6505ba6b67a5e6431a343

bluegr noreply at scummvm.org
Sun Jul 5 17:08:43 UTC 2026


This automated email contains information about 2 new commits which have been
pushed to the 'scummvm' repo located at https://api.github.com/repos/scummvm/scummvm .

Summary:
85755663fe COMMON: Add support for obfuscated InstallShield files
06ea94b292 NANCY: Mark "Ultimate Dare" version of Nancy 10 as compressed


Commit: 85755663fe74a7aae38bbb8a10627be62d91e054
    https://github.com/scummvm/scummvm/commit/85755663fe74a7aae38bbb8a10627be62d91e054
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2026-07-05T20:08:38+03:00

Commit Message:
COMMON: Add support for obfuscated InstallShield files

Changed paths:
    common/compression/installshield_cab.cpp


diff --git a/common/compression/installshield_cab.cpp b/common/compression/installshield_cab.cpp
index d729d950fee..5b160ea149a 100644
--- a/common/compression/installshield_cab.cpp
+++ b/common/compression/installshield_cab.cpp
@@ -83,6 +83,41 @@ bool inflateZlibInstallShield(byte *dst, uint dstLen, const byte *src, uint srcL
 	return true;
 }
 
+class SeekableDeobfuscationReadStream : public SeekableReadStream {
+protected:
+	DisposablePtr<SeekableReadStream> _parentStream;
+
+public:
+	SeekableDeobfuscationReadStream(SeekableReadStream *parentStream)
+		: _parentStream(parentStream, DisposeAfterUse::YES) {
+		assert(parentStream);
+	}
+
+	bool err() const override { return _parentStream->err(); }
+	void clearErr() override { _parentStream->clearErr(); }
+
+	bool eos() const override { return _parentStream->eos(); }
+
+	int64 pos() const override { return _parentStream->pos(); }
+	int64 size() const override { return _parentStream->size(); }
+	bool seek(int64 offset, int whence = SEEK_SET) { return _parentStream->seek(offset, whence); }
+
+#define ror8(x,n)   (((x) >> ((int)(n))) | ((x) << (8 - (int)(n))))
+
+	uint32 read(void *dataPtr, uint32 dataSize) override {
+		uint32 seed = _parentStream->pos();
+		uint32 res = _parentStream->read(dataPtr, dataSize);
+
+		byte *ptr = (byte *)dataPtr;
+
+		for (uint32 i = 0; i < dataSize; i++) {
+			ptr[i] = ror8(ptr[i] ^ 0xD5, 2) - ((seed + i) % 0x47);
+		}
+
+		return res;
+	}
+};
+
 class InstallShieldCabinet : public Archive {
 public:
 	InstallShieldCabinet();
@@ -133,6 +168,7 @@ private:
 
 	Path getHeaderName() const;
 	Path getVolumeName(uint volume) const;
+	SeekableReadStream *createReadStreamForMemberHelper(const Path &path) const;
 };
 
 InstallShieldCabinet::InstallShieldCabinet() : _version(0), _archive(nullptr) {
@@ -351,12 +387,17 @@ SeekableReadStream *InstallShieldCabinet::createReadStreamForMember(const Path &
 	if (!_map.contains(path))
 		return nullptr;
 
+	SeekableReadStream *stream = createReadStreamForMemberHelper(path);
+
 	const FileEntry &entry = _map[path];
+	if (entry.flags & kObfuscated)
+		stream = new SeekableDeobfuscationReadStream(stream);
 
-	if (entry.flags & kObfuscated) {
-		warning("Cannot extract obfuscated file %s", path.toString().c_str());
-		return nullptr;
-	}
+	return stream;
+}
+
+SeekableReadStream *InstallShieldCabinet::createReadStreamForMemberHelper(const Path &path) const {
+	const FileEntry &entry = _map[path];
 
 	ScopedPtr<SeekableReadStream> stream;
 	if (_archive) {
@@ -449,7 +490,7 @@ bool InstallShieldCabinet::readVolumeHeader(SeekableReadStream *volumeStream, In
 		return false;
 	}
 
-	// We support cabinet versions 5 - 13, but do not deobfuscate obfuscated files
+	// We support cabinet versions 5 - 13
 
 	uint32 magicBytes = volumeStream->readUint32LE();
 	int shift = magicBytes >> 24;


Commit: 06ea94b2921399af86e6505ba6b67a5e6431a343
    https://github.com/scummvm/scummvm/commit/06ea94b2921399af86e6505ba6b67a5e6431a343
Author: Torbjörn Andersson (eriktorbjorn at users.sourceforge.net)
Date: 2026-07-05T20:08:38+03:00

Commit Message:
NANCY: Mark "Ultimate Dare" version of Nancy 10 as compressed

Otherwise it won't even try to read data from the .cab files.

Changed paths:
    engines/nancy/detection_tables.h


diff --git a/engines/nancy/detection_tables.h b/engines/nancy/detection_tables.h
index 01d7935a32c..fc28d40d9c5 100644
--- a/engines/nancy/detection_tables.h
+++ b/engines/nancy/detection_tables.h
@@ -755,7 +755,7 @@ static const NancyGameDescription gameDescriptions[] = {
 			},
 			Common::EN_ANY,
 			Common::kPlatformWindows,
-			ADGF_UNSTABLE | ADGF_DROPPLATFORM,
+			ADGF_UNSTABLE | ADGF_DROPPLATFORM | GF_COMPRESSED,
 			NANCY8_GUIOPTIONS
 		},
 		kGameTypeNancy10




More information about the Scummvm-git-logs mailing list