diff --git a/BadBuilder.Tests/GitHubAndDownloadTests.cs b/BadBuilder.Tests/GitHubAndDownloadTests.cs index 5315bd1..7a301b0 100644 --- a/BadBuilder.Tests/GitHubAndDownloadTests.cs +++ b/BadBuilder.Tests/GitHubAndDownloadTests.cs @@ -27,6 +27,26 @@ public void ReleaseSelection_UsesLatestStableAndCanIncludePrerelease() Assert.Equal("preview", selectedPreview.TagName); } + + [Fact] + public void Catalog_ABadAvatar13Beta_IsPinnedToExpectedReleaseAndDigest() + { + ArtifactDefinition artifact = ArtifactCatalog.Exploits[ExploitOption.ABadAvatar13Beta]; + GitHubReleaseSource source = Assert.IsType(artifact.Source); + + Assert.Equal("ABadAvatar 1.3 Beta", artifact.DisplayName); + Assert.Equal("bibarub", source.Owner); + Assert.Equal("Xbox360BadUpdate", source.Repo); + Assert.Equal("ABadAvatar_v1.3-beta.zip", source.AssetPattern); + Assert.Equal(ReleaseSelectionPolicy.ExactTag, source.ReleasePolicy); + Assert.Equal("avatar-v1.3-beta", source.ReleaseTag); + Assert.Equal( + "A94E0948A5F10AA288BA3A5909B55F90AE56C3CFA628B9D429E178737A0F1E35", + source.PinnedSHA256); + Assert.Contains("BadUpdatePayload", artifact.Layout?.RequiredPaths ?? []); + Assert.Contains("Content", artifact.Layout?.RequiredPaths ?? []); + } + [Fact] public void AssetSelection_RequiresExactlyOneGlobMatch() { diff --git a/BadBuilder/BadBuilder.csproj b/BadBuilder/BadBuilder.csproj index 235ad76..672b98a 100644 --- a/BadBuilder/BadBuilder.csproj +++ b/BadBuilder/BadBuilder.csproj @@ -10,7 +10,7 @@ all low latest-recommended - 2.1.1 + 2.2.0 win-x64;linux-x64 true true diff --git a/BadBuilder/Configuration/ArtifactCatalog.cs b/BadBuilder/Configuration/ArtifactCatalog.cs index ed77db7..9425ded 100644 --- a/BadBuilder/Configuration/ArtifactCatalog.cs +++ b/BadBuilder/Configuration/ArtifactCatalog.cs @@ -19,6 +19,23 @@ internal static class ArtifactCatalog ArtifactPriority.Exploit, Layout: new ArchiveLayout(["BadUpdatePayload"]) ), + [ExploitOption.ABadAvatar13Beta] = new + ( + "exploit-abadavatar-1-3-beta", + "ABadAvatar 1.3 Beta", + "ABadAvatar rebased on BadUpdate 1.3 for much faster and more reliable execution; still beta", + "exploit", + new GitHubReleaseSource( + "bibarub", + "Xbox360BadUpdate", + "ABadAvatar_v1.3-beta.zip", + ReleaseSelectionPolicy.ExactTag, + "avatar-v1.3-beta", + "A94E0948A5F10AA288BA3A5909B55F90AE56C3CFA628B9D429E178737A0F1E35"), + [ new InstallOperation(InstallOperationKind.CopyDirectory, ".", ".") ], + ArtifactPriority.Exploit, + Layout: new ArchiveLayout(["BadUpdatePayload", "Content"]) + ), [ExploitOption.BadUpdate] = new ( "exploit-badupdate", diff --git a/BadBuilder/Configuration/Models.cs b/BadBuilder/Configuration/Models.cs index a0a2665..cf9e7f7 100644 --- a/BadBuilder/Configuration/Models.cs +++ b/BadBuilder/Configuration/Models.cs @@ -3,6 +3,7 @@ internal enum ExploitOption { ABadAvatar, + ABadAvatar13Beta, BadUpdate, } diff --git a/README.md b/README.md index dcaadab..4f73d67 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,16 @@ Do not run `sudo ./BadBuilder`. Interactive root launches are refused. ## Using BadBuilder 1. Open **Target drive** and choose the USB device. Fixed and protected disks are not shown. -2. Select BadUpdate or ABadAvatar, a post-exploit bootstrap, and any desired homebrew. Dashboard Update is a separate install mode for official `2.0.17559.0` update files. +2. Select BadUpdate, ABadAvatar Public Beta, or the pinned ABadAvatar 1.3 Beta build, then choose a post-exploit bootstrap and any desired homebrew. Dashboard Update is a separate install mode for official `2.0.17559.0` update files. 3. Choose **Install**. BadBuilder resolves releases, verifies or explicitly approves hashes, extracts into a unique temporary run directory, validates layouts, and builds the complete copy plan. 4. Review the displayed path, model, byte size, and serial/WWN. Type the exact device path to authorize formatting. 5. Wait for the success message. Linux automatically flushes and unmounts the USB. Windows leaves its assigned drive letter in place for normal eject. Expected disk, network, cache, and archive errors are shown as actionable messages and return to the menu. Detailed stack traces are written only to the per-user diagnostic log. +> [!WARNING] +> ABadAvatar 1.3 Beta is still a prerelease. Disconnect the Xbox 360 from both Ethernet and Wi-Fi before triggering it. Its release notes also warn that a connected Kinect can significantly reduce the exploit success rate. + ## Storage locations Persistent downloads and their manifests live in the user cache: @@ -52,7 +55,7 @@ Transient extraction uses a unique directory below the operating-system temporar ## Download integrity -GitHub release sources use an exact asset glob and an explicit release policy. Drafts are never selected; ABadAvatar may use its newest prerelease, while other moving sources use the newest stable release. Zero or multiple matching assets are errors. GitHub's per-asset `digest` metadata and catalog-pinned SHA-256 values are treated as trusted and enforced strictly. +GitHub release sources use an exact asset glob and an explicit release policy. Drafts are never selected; the original ABadAvatar entry may use its newest prerelease, while ABadAvatar 1.3 Beta is pinned to the exact `avatar-v1.3-beta` release and SHA-256. Other moving sources use the newest stable release. Zero or multiple matching assets are errors. GitHub's per-asset `digest` metadata and catalog-pinned SHA-256 values are treated as trusted and enforced strictly. When a trusted checksum is unavailable, BadBuilder displays the source, release, asset, and computed SHA-256 and asks for explicit approval. The approved bytes are recorded in the cache manifest; changed bytes trigger a new warning. Downloads stream into a partial file, verify their length and hash, and replace a cache entry only after success. A failed download cannot overwrite a valid cached archive. @@ -86,6 +89,7 @@ If release metadata is unavailable and no valid cache exists, BadBuilder asks fo - Pdawg11239 / [Pdawg-bytes](https://github.com/Pdawg-bytes/BadBuilder) — original BadBuilder project - Grimdoomer — [BadUpdate](https://github.com/grimdoomer/Xbox360BadUpdate) - Shutterbug2000 — [ABadAvatar](https://github.com/shutterbug2000/ABadAvatar) +- Bibarub — [ABadAvatar 1.3 Beta](https://github.com/bibarub/Xbox360BadUpdate/releases/tag/avatar-v1.3-beta) - FreeMyXe Team / InvoxiPlayGames — [FreeMyXe](https://github.com/FreeMyXe/FreeMyXe) - Byrom90 — [XeUnshackle](https://github.com/Byrom90/XeUnshackle) - Swizzy — Simple 360 NAND Flasher