[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