Skip to content

Releases: AldySan/USBUtils_src

USBUtils 0.0.6

Choose a tag to compare

@AldySan AldySan released this 30 Oct 12:56
c104db3

USBUtils 0.0.6

Quality release: a full re-audit of the engine, CLI and GUI (bugs, logic errors, memory violations — no feature changes). Everything below was verified against real test drives and hostile/corrupt inputs before shipping.

Fixed — engine (memory safety)

  • Corrupt video-rip backup could OOM the app. The .rip sidecar loader sized its entry vector from the untrusted header count — a file claiming 4 billion entries attempted a ~64 GiB allocation on the worker thread before any read failed. The count is now clamped by the actual file size. Regression-tested with a hostile sidecar in the test suite.
  • PS2Load scan: unbounded allocation on corrupt images. The root-directory size from the Primary Volume Descriptor was trusted directly (up to a ~4 GiB vector). Now capped at 8 MiB, the same bound the ISO walker already enforced.
  • Failed copy/move left half-written games on the destination. If part N failed (or the destination ul.cfg could not be written), every already-copied chunk stayed behind as an unreferenced file until you ran Restore-space. All failure paths now roll back the written files — the same contract installs already had.

Fixed — CLI (could damage the wrong game)

  • usbutils remove 4294967296 deleted game #0. The index was parsed with atoi(), which on 64-bit Linux/macOS silently wraps (4294967296 → 0) and passes every bounds check. The same wrap affected rename/export/rip/inject/move/dnas patch. Indices are now parsed with strtoll and saturated, so the command errors out with bad index. (Verified against a real test drive: game #0 survives.)
  • find 666 searched for an empty pattern (matching every file of every game) instead of "666" — numeric positionals were stolen by the index branch.
  • list without -d silently listed the current working directory as if it were a drive, exit code 0.
  • recover --apply printed "ul.cfg updated" even when the write failed; fix --apply exited 0 when fixes failed — both now report errors and exit non-zero.
  • Multi-file extract / iso extract / export all: same-named files silently overwrote each other; collisions now get _1, _2… suffixes.
  • extract -o <existing directory> now treats it as an output directory (the rule iso extract already had); --size rejects non-numeric values; dnas patch without an index is a usage error; report -o detects short writes.

Fixed — GUI (stability)

  • Closing a dialog mid-operation could crash the app. The Video-rip, Game-files and Find dialogs run work on background threads that post progress back to the dialog — and all three could be destroyed while that work was still running (Esc and the Close button bypass the existing close guard; Game-files and Find had no guard at all). All close paths now respect a busy counter.
  • The menu bar stayed live during operations. After clicking Cancel on a progress dialog the job keeps running for a moment — during that window File→Open / Games→Remove could re-enter mid-operation and corrupt the list. The menu bar is disabled while busy.
  • Copy/Move ran on a live snapshot problem: the worker thread used the GUI-owned game list directly (a Move even mutated it from the thread). It now works on its own snapshot and re-resolves the game by id+serial.
  • Sort / Clean up drive space / Recover could act on the wrong drive. They used the drive combo selection instead of the opened games list — with two drives plugged in, "Clean up" deleted leftover files from the other drive while the visible list stayed unchanged. They now always operate on the opened list's drive.
  • The shutdown wait for the update check could time out before the network timeouts it waits for, leaving the worker posting events into a destroyed window; it now waits for completion.
  • A cancelled backup/extract was reported as a failure message box; the Replace progress dialog showed a Cancel button that could not cancel anything.

Fixed — dead features

  • ISO explorer: editing the Volume ID never worked — the field's signals were blocked on image load and never unblocked, so edits were silently dropped when saving the modified copy.
  • Find dialog: the optional exact-size filter was never read — typing a size changed nothing. It is now applied.

Downloads

File Contents
usbutils-0.0.6-windows-x86_64.zip GUI (usbutils-gui.exe) + CLI (usbutils.exe) + all required Qt and MinGW runtime DLLs + data files
usbutils-0.0.6-linux-x86_64.tar.gz GUI (usbutils-gui) + CLI (usbutils) + bundled Qt runtime + data files

Both packages are self-contained: extract and run — no Qt installation, no other downloads needed.

As always: the GUI performs a silent update check a few seconds after startup; the CLI has usbutils check-update.

USBUtils 0.0.5

Choose a tag to compare

@AldySan AldySan released this 29 Oct 16:55
7b46ed0

USBUtils 0.0.5

Stability release: fixes the Windows heap-corruption crash that surfaced in "Open ISO to [Explore/Modify]", and ships the project's analysis toolkit inside the repository.

Fixed

  • Windows: heap corruption crashing the GUI. The crash reported in 0.0.4 could be triggered by "Open ISO to [Explore/Modify]" but could also detonate later in unrelated features — the minidumps pointed at the ntdll heap manager, meaning the heap was already damaged elsewhere. Root causes (found by analyzing user-supplied minidumps, see docs/crash-v0.0.4-iso-explorer.md):
    • The Windows package now always bundles the MinGW runtime DLLs (libstdc++-6.dll, libgcc_s_seh-1.dll, libwinpthread-1.dll) that Qt6Core.dll imports. Previously Windows loaded them from whatever GCC runtime it found on the machine (e.g. an MSYS2 folder built with a different GCC) — a classic mixed-runtime heap corruption; on machines without any MinGW the app would not start at all. The packaging script now walks the import tables of the bundled Qt DLLs and plugins, and fails the build if any of the three is missing.
    • Ps2LoadDialog's thread helper captured stack locals by reference inside a worker-thread lambda and freed the QThread object while the OS thread could still be inside its teardown — a use-after-free that slowly corrupted the heap. Rewritten: the callable is copied into the worker, the result lives in a shared heap slot, and the wait happens in a proper QEventLoop.
    • WorkerThread now owns its own finished → deleteLater connection (the canonical Qt pattern); the hand-rolled lifetime wiring at all nine call sites was removed so nobody can get the contract wrong again.
    • The startup update-check thread is tracked via QPointer and cannot dangle at shutdown.
    • ISO9660 parser hardening (defense in depth, found while auditing): directory records must fully fit inside the extent — a record with a lied-about identifier length or a truncated header used to read past the buffer. Guarded by a hostile-ISO regression test (tools/hostile_iso_test.py).
  • CLI: usbutils drives now prints a friendly message when no removable drive is found, instead of an empty listing.

Added

  • The analysis toolkit now ships in the repository (tools/) — the Python tooling that produced this reimplementation: the reverse-engineering kit (PE resource/DFM extraction, binary DFM-to-text converter, Delphi string-reference finder, function-window extractor, usbutil.rcn decoder), the three minidump parsers used for both Windows crash forensics, the procedural icon generator and the hostile-ISO regression test. Everything runs on a stock Python 3; see tools/README.md.

Changed

  • The release-packaging script runs out of the box and self-discovers the full Qt/MinGW DLL closure.

Downloads

File Contents
usbutils-0.0.5-windows-x86_64.zip GUI (usbutils-gui.exe) + CLI (usbutils.exe) + all required Qt and MinGW runtime DLLs + data files
usbutils-0.0.5-linux-x86_64.tar.gz GUI (usbutils-gui) + CLI (usbutils) + bundled Qt runtime + data files

Both packages are self-contained: extract and run — no Qt installation, no other downloads needed.

As always: the GUI performs a silent update check a few seconds after startup; the CLI has usbutils check-update.

USBUtils 0.0.4

Choose a tag to compare

@AldySan AldySan released this 29 Oct 07:42

USBUtils 0.0.4

Bug-fix release focused on Windows stability.

Fixed

  • Windows: crash about 3 seconds after GUI startup. The bundled Qt 6.8 implements QThread::create() on top of std::async(std::launch::deferred, ...); under the MinGW-w64 toolchain that machinery corrupted heap state and crashed the app right when the automatic update check finished. Every background job (update check, copy/move, extract/inject, video rip, drive report, find, PS2Load) now uses a plain worker-thread implementation — the crashing code path no longer exists in the binary. Full minidump analysis: docs/crash-v0.0.3-startup.md.
  • The main window can no longer be destroyed while the startup update check is still running (it now waits for the worker to finish).
  • Update check: defensive URL parsing in the Windows HTTP path.

Changed

  • Release packages now ship the complete data set: PS2LOAD.ELF, usbutil.dni and usbutil.dna (the IOPRP image packages used by DNAS patching) and usbutil.ljs (game compatibility notes). Earlier packages only included PS2LOAD.ELF, which left the DNAS patch tool without its data.
  • Windows build: libwinpthread is statically linked (one less DLL to ship).

Downloads

File Contents
usbutils-0.0.4-windows-x86_64.zip GUI (usbutils-gui.exe) + CLI (usbutils.exe) + all required Qt and MinGW runtime DLLs + data files
usbutils-0.0.4-linux-x86_64.tar.gz GUI (usbutils-gui) + CLI (usbutils) + bundled Qt runtime + data files

Both packages are self-contained: extract and run — no Qt installation, no other downloads needed.

As always: the GUI performs a silent update check a few seconds after startup; the CLI has usbutils check-update.

USBUtils 0.0.3

Choose a tag to compare

@AldySan AldySan released this 29 Oct 06:20
c9e9926

USBUtils 0.0.3

A catch-up release: everything the classic 2009 tool could do is now in here, the app got much friendlier for everyday use, and it now checks by itself when a new version comes out.

What's new

  • Find files inside your games — lost track of which game has which file? Search every game at once, by name or by size.
  • Look inside a game — open a game like a folder, pull a single file out to your computer, or put a modified one back in (same size only).
  • Copy or move games to another drive — moving your collection to a bigger drive no longer means reinstalling everything.
  • Sort the games list — one click puts everything in A-to-Z order, on screen and on the drive.
  • Clean up drive space — safely finds left-over files from deleted or broken installs and clears them out, freeing room for new games.
  • A full drive report — a plain-text health report of your drive and every game on it.
  • Repairs games damaged by other tools — the known "666.66" serial-code damage is detected and fixed automatically.
  • Checks for updates by itself — the windowed app quietly looks for new releases when it starts (never blocks you), and both apps can check on demand.
  • A friendlier windowed app — clearer wording, a proper Quick Help page, smoother progress bars with cancel buttons, and fresh dialogs for the features above.
  • Windows users get the windowed app too — previous Windows downloads only had the text version; both downloads now always include both apps.

The two apps, as always

  • USBUtils — the one with windows and buttons, friendly for everyday use.
  • usbutils — the text version for people who like typing commands.

Both are in the downloads below (Windows and Linux), GUI and command line together. Quick start: unpack, double-click usbutils-gui (usbutils-gui.exe on Windows), pick your drive, go.

As before: use it only with games you own. Big thanks to ISEKO for the original 2009 tool this project is based on.

USBUtils 0.0.2 — PS2Load + ready-made downloads

Choose a tag to compare

@AldySan AldySan released this 29 Oct 03:16
910aaf3

USBUtils 0.0.2

This version adds the PS2Load helper and — as promised last time — ready-made downloads for both apps, so you no longer have to build anything yourself.

What's new

  • PS2Load support — some games only start from a USB drive when their boot program is swapped for a small helper called PS2Load. The tool can now do that swap for you, and undo it at any time. The helper file is included, and the game keeps all its data in place.
  • Ready-made downloads for everyone — grab the archive for your computer below, unpack it and run. Both downloads now include the windowed app as well as the command-line one.
  • A fix for reading real game discs — in the previous version, some game details could fail to be read from discs made the usual way. That is fixed.

Two apps, like before

  • USBUtils — the one with windows and buttons (in both downloads).
  • usbutils — the text version for people who like typing commands (in both downloads).

Quick start: unpack, then double-click usbutils-gui (usbutils-gui.exe on Windows), or run usbutils --help in a terminal.

As before: use it only with games you own. Big thanks to ISEKO for the original 2009 tool this project is based on.

USBUtils 0.0.1 — first release

Choose a tag to compare

@AldySan AldySan released this 29 Oct 01:36

USBUtils 0.0.1 — first release!

A free, modern replacement for the classic USBUtil 2.2 — the tool that
lets you keep PlayStation 2 games on a USB drive and play them without
burning discs. The original tool's source code was lost, so this one was
rebuilt from the ground up to keep it alive.

What you can do

  • Put games on your USB drive — pick a game file, pick your drive, wait a bit, done.
  • See all your games in one list, with sizes.
  • Rename or delete games.
  • Turn game videos off and on — some games play smoother from USB without their movies. Turning them off keeps a backup, so you can always turn them back on.
  • Back up a game from the drive back into a single game file.
  • Fix the "DNAS" error that stops some games from going online.
  • Bring back games that vanished from the list.

Two apps included

  • USBUtils — the one with windows and buttons, for everyday use.
  • usbutils — a text version for people who like typing commands.

Both are in the downloads below — grab the archive for your computer
(Windows or Linux), unpack it and run: double-click usbutils-gui, or
open a terminal and try usbutils --help. On macOS you can build it
yourself from the README. Plug in a USB drive (FAT32), pick your games,
and go.

Please use it only with games you own. Huge thanks to ISEKO for the
original 2009 tool this project is based on.