Holes publishes pre-built release artifacts on GitHub Releases. Because Android APKs are sideloaded outside the Play Store, you should verify every download before installing.
This guide explains how to check SHA256 checksums and optionally scan files with VirusTotal.
- Confirms the file you downloaded matches what the project published
- Detects accidental corruption during transfer
- Adds an independent malware scan layer (VirusTotal)
Verification does not replace reading the source code or building the APK yourself — but it is a practical baseline for release users.
Official hashes live in the repository root:
Each line follows the standard format:
<lowercase-sha256-hex> <filename>
Example (Holes v1.0.0 app-release.apk):
9ec0d369aca28e0b981c453a9c08f18094cba762ce437aba1945d3e176983fe5 app-release.apk
Maintainers regenerate this file with:
.\scripts\generate-sha256.ps1Download the release asset from GitHub, then compute its hash locally and compare.
Get-FileHash -Path .\app-release.apk -Algorithm SHA256The Hash value (case-insensitive) must match the line in SHA256.txt for that filename.
One-liner check against the published hash:
$expected = "9ec0d369aca28e0b981c453a9c08f18094cba762ce437aba1945d3e176983fe5"
$actual = (Get-FileHash -Path .\app-release.apk -Algorithm SHA256).Hash.ToLower()
if ($actual -eq $expected) { "OK — hash matches" } else { "MISMATCH — do not install" }shasum -a 256 app-release.apk
# or
sha256sum app-release.apkCompare the output with SHA256.txt.
certutil -hashfile app-release.apk SHA256VirusTotal aggregates scans from many antivirus engines. It is useful as a second opinion, not a guarantee of safety.
The v1.0.0 release APK has been submitted and shows no malicious detections:
If your file's SHA256 matches the one above, you are looking at the same binary VirusTotal analyzed.
- Go to virustotal.com.
- Click Search and paste your file's SHA256 hash, or upload the APK directly.
- Review the detection ratio and community comments.
- Prefer files whose hash matches SHA256.txt and show a clean or expected scan profile.
Note: New or uncommon files may trigger false positives on one or two engines. A hash match to the official release plus a stable VirusTotal report is stronger than either check alone.
If you prefer not to trust pre-built binaries:
git clone https://github.com/Satan2049/holes.git
cd holes
flutter pub get
flutter build apk --releaseYour APK will be at build/app/outputs/flutter-apk/app-release.apk. You can hash it yourself; it will differ from release builds signed with the maintainer's key unless you use the same signing configuration.
When cutting a release:
- Build artifacts (
flutter build apk --release, plus any.exe/.zipassets). - Copy files to
releases/or pass-IncludeBuildOutputsto the script. - Run
.\scripts\generate-sha256.ps1and commitSHA256.txt. - Attach the same files to the GitHub release.
- Optionally upload the APK to VirusTotal and link the report in the release notes.
- SHA256.txt — published checksums
- SECURITY.md — report security issues
- instructions.md — build from source