├── .github └── workflows │ └── ci.yml ├── .gitignore ├── .idea ├── .gitignore ├── aws.xml ├── discord.xml ├── homebrew-jailbreak.iml ├── misc.xml ├── modules.xml ├── thriftCompiler.xml └── vcs.xml ├── .rubocop.yml ├── Formula ├── apple-roms.rb ├── checkra1n-toolchain.rb ├── disass.rb ├── dsdump.rb ├── dyldextractor.rb ├── frida-node.rb ├── frida-tools.rb ├── go-apfs.rb ├── go-rop.rb ├── graboid.rb ├── img4lib.rb ├── ipsw.rb ├── ktool.rb ├── lporg.rb ├── macvdmtool.rb ├── scgen.rb ├── seccomp-gen.rb ├── siguza-dt.rb ├── vm-proxy.rb ├── wait-for-es.rb └── yolo_dsc.rb ├── Gemfile ├── Gemfile.lock ├── LICENSE ├── README.md ├── Rakefile └── docs ├── CNAME ├── README.md └── _config.yml /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | branches: 9 | - main 10 | 11 | env: 12 | HOMEBREW_DEVELOPER: 1 13 | HOMEBREW_GITHUB_ACTIONS: 1 14 | HOMEBREW_NO_AUTO_UPDATE: 1 15 | HOMEBREW_CHANGE_ARCH_TO_ARM: 1 16 | 17 | concurrency: 18 | group: "tests-${{ github.ref }}" 19 | cancel-in-progress: ${{ github.event_name == 'pull_request' }} 20 | 21 | jobs: 22 | tap_syntax: 23 | if: github.repository == 'hack-different/homebrew-jailbreak' 24 | runs-on: ubuntu-latest 25 | container: 26 | image: ghcr.io/homebrew/ubuntu16.04:master 27 | env: 28 | HOMEBREW_SIMULATE_MACOS_ON_LINUX: 1 29 | outputs: 30 | testing_formulae: ${{ steps.formulae-detect.outputs.testing_formulae }} 31 | added_formulae: ${{ steps.formulae-detect.outputs.added_formulae }} 32 | deleted_formulae: ${{ steps.formulae-detect.outputs.deleted_formulae }} 33 | steps: 34 | - name: Set up Homebrew 35 | id: set-up-homebrew 36 | uses: Homebrew/actions/setup-homebrew@master 37 | 38 | - run: brew test-bot --only-tap-syntax 39 | 40 | - run: brew test-bot --only-formulae-detect 41 | if: github.event_name == 'pull_request' 42 | id: formulae-detect 43 | 44 | setup_tests: 45 | if: github.event_name == 'pull_request' && github.repository == 'hack-different/homebrew-jailbreak' 46 | runs-on: ubuntu-latest 47 | needs: tap_syntax 48 | outputs: 49 | syntax-only: ${{ steps.check-labels.outputs.syntax-only }} 50 | linux-runner: ${{ steps.check-labels.outputs.linux-runner }} 51 | fail-fast: ${{ steps.check-labels.outputs.fail-fast }} 52 | test-dependents: ${{ steps.check-labels.outputs.test-dependents }} 53 | timeout-minutes: ${{ steps.check-labels.outputs.timeout-minutes }} 54 | container: ${{ steps.check-labels.outputs.container }} 55 | test-bot-formulae-args: ${{ steps.check-labels.outputs.test-bot-formulae-args }} 56 | test-bot-dependents-args: ${{ steps.check-labels.outputs.test-bot-dependents-args }} 57 | steps: 58 | - name: Check for CI labels 59 | id: check-labels 60 | uses: actions/github-script@v3 61 | with: 62 | github-token: ${{ secrets.GITHUB_TOKEN }} 63 | script: | 64 | const { data: { labels: labels } } = await github.pulls.get({ 65 | owner: context.repo.owner, 66 | repo: context.repo.repo, 67 | pull_number: context.issue.number 68 | }) 69 | const label_names = labels.map(label => label.name) 70 | 71 | if (label_names.includes('CI-syntax-only')) { 72 | console.log('CI-syntax-only label found. Skipping tests job.') 73 | core.setOutput('syntax-only', 'true') 74 | } else { 75 | console.log('No CI-syntax-only label found. Running tests job.') 76 | core.setOutput('syntax-only', 'false') 77 | } 78 | 79 | if (label_names.includes('CI-linux-self-hosted')) { 80 | core.setOutput('linux-runner', 'linux-self-hosted-1') 81 | } else { 82 | core.setOutput('linux-runner', 'ubuntu-latest') 83 | } 84 | 85 | if (label_names.includes('CI-no-fail-fast')) { 86 | console.log('CI-no-fail-fast label found. Continuing tests despite failing matrix builds.') 87 | core.setOutput('fail-fast', 'false') 88 | } else { 89 | console.log('No CI-no-fail-fast label found. Stopping tests on first failing matrix build.') 90 | core.setOutput('fail-fast', 'true') 91 | } 92 | 93 | if (label_names.includes('CI-skip-dependents')) { 94 | console.log('CI-skip-dependents label found. Skipping brew test-bot --only-formulae-dependents.') 95 | core.setOutput('test-dependents', 'false') 96 | } else { 97 | console.log('No CI-skip-dependents label found. Running brew test-bot --only-formulae-dependents.') 98 | core.setOutput('test-dependents', 'true') 99 | } 100 | 101 | if (label_names.includes('CI-long-timeout')) { 102 | const labelCountQuery = `query($owner:String!, $name:String!, $label:String!) { 103 | repository(owner:$owner, name:$name) { 104 | pullRequests(last: 100, states: OPEN, labels: [$label]) { 105 | totalCount 106 | } 107 | } 108 | }`; 109 | var long_pr_count; 110 | try { 111 | const response = await github.graphql( 112 | labelCountQuery, { 113 | owner: context.repo.owner, 114 | name: context.repo.repo, 115 | label: 'CI-long-timeout' 116 | } 117 | ) 118 | long_pr_count = response.repository.pullRequests.totalCount 119 | } catch (error) { 120 | // The GitHub API query errored, so fail open and assume 0 long PRs. 121 | long_pr_count = 0 122 | core.warning('CI-long-timeout label count query failed. Assuming no long PRs.') 123 | } 124 | const maximum_long_pr_count = 2 125 | if (long_pr_count > maximum_long_pr_count) { 126 | core.setFailed(`Too many pull requests (${long_pr_count}) with the long-timeout label!`) 127 | core.error(`Only ${maximum_long_pr_count} pull requests at a time can use this label.`) 128 | core.error('Remove the long-timeout label from this or other PRs (once their CI has completed).') 129 | } 130 | console.log('CI-long-timeout label found. Setting long GitHub Actions timeout.') 131 | core.setOutput('timeout-minutes', '4320') 132 | } else { 133 | console.log('No CI-long-timeout label found. Setting short GitHub Actions timeout.') 134 | core.setOutput('timeout-minutes', '60') 135 | } 136 | 137 | const container = {} 138 | if (label_names.includes('CI-linux-wheezy')) { 139 | console.log('CI-linux-wheezy label found. Using Linux Debian 7 (Wheezy) container.') 140 | container.image = 'homebrew/debian7:latest' 141 | } else { 142 | console.log('No CI-linux-wheezy label found. Using default Homebrew (Ubuntu 16.04) container.') 143 | container.image = 'ghcr.io/homebrew/ubuntu16.04:master' 144 | } 145 | container.options = '--user=linuxbrew -e GITHUB_ACTIONS_HOMEBREW_SELF_HOSTED' 146 | core.setOutput('container', JSON.stringify(container)) 147 | 148 | const test_bot_formulae_args = ["--only-formulae", "--junit", "--only-json-tab", "--skip-dependents"] 149 | test_bot_formulae_args.push('--testing-formulae=${{needs.tap_syntax.outputs.testing_formulae}}') 150 | test_bot_formulae_args.push('--added-formulae=${{needs.tap_syntax.outputs.added_formulae}}') 151 | test_bot_formulae_args.push('--deleted-formulae=${{needs.tap_syntax.outputs.deleted_formulae}}') 152 | 153 | const test_bot_dependents_args = ["--only-formulae-dependents", "--junit"] 154 | test_bot_dependents_args.push('--testing-formulae=${{needs.tap_syntax.outputs.testing_formulae}}') 155 | 156 | if (label_names.includes('CI-test-bot-fail-fast')) { 157 | console.log('CI-test-bot-fail-fast label found. Passing --fail-fast to brew test-bot.') 158 | test_bot_formulae_args.push('--fail-fast') 159 | test_bot_dependents_args.push('--fail-fast') 160 | } else { 161 | console.log('No CI-test-bot-fail-fast label found. Not passing --fail-fast to brew test-bot.') 162 | } 163 | 164 | if (label_names.includes('CI-build-dependents-from-source')) { 165 | console.log('CI-build-dependents-from-source label found. Passing --build-dependents-from-source to brew test-bot.') 166 | test_bot_dependents_args.push('--build-dependents-from-source') 167 | } else { 168 | console.log('No CI-build-dependents-from-source label found. Not passing --build-dependents-from-source to brew test-bot.') 169 | } 170 | 171 | if (label_names.includes('CI-skip-recursive-dependents')) { 172 | console.log('CI-skip-recursive-dependents label found. Passing --skip-recursive-dependents to brew test-bot.') 173 | test_bot_dependents_args.push('--skip-recursive-dependents') 174 | } else { 175 | console.log('No CI-skip-recursive-dependents label found. Not passing --skip-recursive-dependents to brew test-bot.') 176 | } 177 | 178 | core.setOutput('test-bot-formulae-args', test_bot_formulae_args.join(" ")) 179 | core.setOutput('test-bot-dependents-args', test_bot_dependents_args.join(" ")) 180 | 181 | tests: 182 | needs: setup_tests 183 | if: ${{github.event_name == 'pull_request' && fromJson(needs.setup_tests.outputs.syntax-only) == false}} 184 | strategy: 185 | matrix: 186 | include: 187 | - runner: '12-arm64' 188 | - runner: '12' 189 | - runner: '11-arm64' 190 | - runner: '11' 191 | - runner: '10.15' 192 | - runner: ${{needs.setup_tests.outputs.linux-runner}} 193 | container: ${{fromJson(needs.setup_tests.outputs.container)}} 194 | workdir: /github/home 195 | fail-fast: ${{fromJson(needs.setup_tests.outputs.fail-fast)}} 196 | runs-on: ${{matrix.runner}} 197 | container: ${{matrix.container}} 198 | timeout-minutes: ${{ (matrix.runner == 'ubuntu-latest' && 360) || fromJson(needs.setup_tests.outputs.timeout-minutes) }} 199 | defaults: 200 | run: 201 | shell: /bin/bash -e {0} 202 | working-directory: ${{matrix.workdir || github.workspace}} 203 | env: 204 | GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} 205 | HOMEBREW_GITHUB_API_TOKEN: ${{secrets.GITHUB_TOKEN}} 206 | steps: 207 | - name: Set environment variables 208 | if: runner.os == 'macOS' 209 | run: | 210 | echo 'PATH=/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin' >> $GITHUB_ENV 211 | # TODO: remove the line below once set in the runner .env file 212 | echo 'GITHUB_ACTIONS_HOMEBREW_SELF_HOSTED=1' >> $GITHUB_ENV 213 | 214 | - name: Set up Homebrew 215 | id: set-up-homebrew 216 | uses: Homebrew/actions/setup-homebrew@master 217 | 218 | - run: brew test-bot --only-cleanup-before 219 | 220 | - run: brew test-bot --only-setup 221 | 222 | - name: Run brew test-bot ${{ needs.setup_tests.outputs.test-bot-formulae-args }} 223 | id: brew-test-bot-formulae 224 | run: | 225 | mkdir bottles 226 | cd bottles 227 | brew test-bot ${{ needs.setup_tests.outputs.test-bot-formulae-args }} 228 | 229 | - name: Failures summary for brew test-bot ${{ needs.setup_tests.outputs.test-bot-formulae-args }} 230 | if: always() 231 | run: | 232 | touch bottles/steps_output.txt 233 | cat bottles/steps_output.txt 234 | rm bottles/steps_output.txt 235 | 236 | - name: Run brew test-bot ${{ needs.setup_tests.outputs.test-bot-dependents-args }} --skipped-or-failed-formulae=${{ steps.brew-test-bot-formulae.outputs.skipped_or_failed_formulae }} 237 | if: ${{fromJson(needs.setup_tests.outputs.test-dependents)}} 238 | run: | 239 | cd bottles 240 | brew test-bot ${{ needs.setup_tests.outputs.test-bot-dependents-args }} --skipped-or-failed-formulae=${{ steps.brew-test-bot-formulae.outputs.skipped_or_failed_formulae }} 241 | 242 | - name: Failures summary for brew test-bot ${{ needs.setup_tests.outputs.test-bot-dependents-args }} --skipped-or-failed-formulae=${{ steps.brew-test-bot-formulae.outputs.skipped_or_failed_formulae }} 243 | if: ${{always() && fromJson(needs.setup_tests.outputs.test-dependents) == true}} 244 | run: | 245 | touch bottles/steps_output.txt 246 | cat bottles/steps_output.txt 247 | rm bottles/steps_output.txt 248 | 249 | - name: Output brew linkage result 250 | if: always() 251 | run: | 252 | cat bottles/linkage_output.txt 253 | rm bottles/linkage_output.txt 254 | 255 | - name: Output brew bottle result 256 | if: always() 257 | run: | 258 | cat bottles/bottle_output.txt 259 | rm bottles/bottle_output.txt 260 | 261 | - name: Upload logs 262 | if: always() 263 | uses: actions/upload-artifact@main 264 | with: 265 | name: logs-${{ matrix.runner }} 266 | path: ${{matrix.workdir || github.workspace}}/bottles/logs 267 | 268 | - name: Delete logs and home 269 | if: always() 270 | run: | 271 | rm -rvf bottles/logs 272 | rm -rvf bottles/home 273 | 274 | - name: Count bottles 275 | id: bottles 276 | if: always() 277 | run: | 278 | cd bottles 279 | count=$(ls *.json | wc -l | xargs echo -n) 280 | echo "$count bottles" 281 | echo "::set-output name=count::$count" 282 | failures=$(ls failed/*.json | wc -l | xargs echo -n) 283 | echo "$failures failed bottles" 284 | echo "::set-output name=failures::$failures" 285 | 286 | - name: Upload failed bottles 287 | if: always() && steps.bottles.outputs.failures > 0 288 | uses: actions/upload-artifact@main 289 | with: 290 | name: bottles-${{ matrix.runner }} 291 | path: ${{matrix.workdir || github.workspace}}/bottles/failed 292 | 293 | # Must be run before the `Upload bottles` step so that failed 294 | # bottles are not included in the `bottles` artifact. 295 | - name: Delete failed bottles 296 | if: always() 297 | run: rm -rvf bottles/failed 298 | 299 | - name: Upload bottles 300 | if: always() && steps.bottles.outputs.count > 0 301 | uses: actions/upload-artifact@main 302 | with: 303 | name: bottles 304 | path: ${{matrix.workdir || github.workspace}}/bottles 305 | 306 | - name: Post cleanup 307 | if: always() 308 | run: | 309 | brew test-bot --only-cleanup-after 310 | rm -rvf bottles 311 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | /.config 4 | /coverage/ 5 | /InstalledFiles 6 | /pkg/ 7 | /spec/reports/ 8 | /spec/examples.txt 9 | /test/tmp/ 10 | /test/version_tmp/ 11 | /tmp/ 12 | 13 | # Used by dotenv library to load environment variables. 14 | # .env 15 | 16 | # Ignore Byebug command history file. 17 | .byebug_history 18 | 19 | ## Specific to RubyMotion: 20 | .dat* 21 | .repl_history 22 | build/ 23 | *.bridgesupport 24 | build-iPhoneOS/ 25 | build-iPhoneSimulator/ 26 | 27 | ## Specific to RubyMotion (use of CocoaPods): 28 | # 29 | # We recommend against adding the Pods directory to your .gitignore. However 30 | # you should judge for yourself, the pros and cons are mentioned at: 31 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 32 | # 33 | # vendor/Pods/ 34 | 35 | ## Documentation cache and generated files: 36 | /.yardoc/ 37 | /_yardoc/ 38 | /doc/ 39 | /rdoc/ 40 | 41 | ## Environment normalization: 42 | /.bundle/ 43 | /vendor/bundle 44 | /lib/bundler/man/ 45 | 46 | # for a library or gem, you might want to ignore these files since the code is 47 | # intended to run in multiple environments; otherwise, check them in: 48 | # Gemfile.lock 49 | # .ruby-version 50 | # .ruby-gemset 51 | 52 | # unless supporting rvm < 1.11.0 or doing something fancy, ignore this: 53 | .rvmrc 54 | 55 | # Used by RuboCop. Remote config files pulled in from inherit_from directive. 56 | # .rubocop-https?--* 57 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | # Editor-based HTTP Client requests 5 | /httpRequests/ 6 | # Datasource local storage ignored files 7 | /dataSources/ 8 | /dataSources.local.xml 9 | -------------------------------------------------------------------------------- /.idea/aws.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /.idea/discord.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /.idea/homebrew-jailbreak.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 41 | 42 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /.idea/thriftCompiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.rubocop.yml: -------------------------------------------------------------------------------- 1 | # TODO: Try getting more rules in sync. 2 | 3 | require: 4 | - ./Homebrew/rubocops.rb 5 | - rubocop-performance 6 | - rubocop-rails 7 | 8 | inherit_mode: 9 | merge: 10 | - Include 11 | - Exclude 12 | 13 | AllCops: 14 | TargetRubyVersion: 2.6 15 | DisplayCopNames: false 16 | # enable all pending rubocops 17 | NewCops: enable 18 | Include: 19 | - "**/*.rbi" 20 | Exclude: 21 | - "Homebrew/sorbet/rbi/gems/**/*.rbi" 22 | - "Homebrew/sorbet/rbi/hidden-definitions/**/*.rbi" 23 | - "Homebrew/sorbet/rbi/todo.rbi" 24 | - "Homebrew/sorbet/rbi/upstream.rbi" 25 | - "Homebrew/bin/*" 26 | - "Homebrew/vendor/**/*" 27 | - "Taps/*/*/vendor/**/*" 28 | 29 | Cask/Desc: 30 | Description: "Ensure that the desc stanza conforms to various content and style checks." 31 | Enabled: true 32 | 33 | Cask/HomepageUrlTrailingSlash: 34 | Description: "Ensure that the homepage url has a slash after the domain name." 35 | Enabled: true 36 | 37 | Cask/NoDslVersion: 38 | Description: "Do not use the deprecated DSL version syntax in your cask header." 39 | Enabled: true 40 | 41 | Cask/StanzaGrouping: 42 | Description: "Ensure that cask stanzas are grouped correctly. More info at https://docs.brew.sh/Cask-Cookbook#stanza-order" 43 | Enabled: true 44 | 45 | Cask/StanzaOrder: 46 | Description: "Ensure that cask stanzas are sorted correctly. More info at https://docs.brew.sh/Cask-Cookbook#stanza-order" 47 | Enabled: true 48 | 49 | # enable all formulae audits 50 | FormulaAudit: 51 | Enabled: true 52 | 53 | # enable all formulae strict audits 54 | FormulaAuditStrict: 55 | Enabled: true 56 | 57 | # enable all Homebrew custom cops 58 | Homebrew: 59 | Enabled: true 60 | 61 | # makes DSL usage ugly. 62 | Layout/SpaceBeforeBrackets: 63 | Exclude: 64 | - "**/*_spec.rb" 65 | - "Taps/*/*/*.rb" 66 | - "/**/{Formula,Casks}/*.rb" 67 | - "**/{Formula,Casks}/*.rb" 68 | 69 | # Use `<<~` for heredocs. 70 | Layout/HeredocIndentation: 71 | Enabled: true 72 | 73 | # Keyword arguments don't have the same readability 74 | # problems as normal parameters. 75 | Metrics/ParameterLists: 76 | CountKeywordArgs: false 77 | 78 | # Allow dashes in filenames. 79 | Naming/FileName: 80 | Regex: !ruby/regexp /^[\w\@\-\+\.]+(\.rb)?$/ 81 | 82 | # Implicitly allow EOS as we use it everywhere. 83 | Naming/HeredocDelimiterNaming: 84 | ForbiddenDelimiters: 85 | - END, EOD, EOF 86 | 87 | Naming/InclusiveLanguage: 88 | CheckStrings: true 89 | FlaggedTerms: 90 | # TODO: If possible, make this stricter. 91 | slave: 92 | AllowedRegex: 93 | - "gitslave" # Used in formula `gitslave` 94 | - "log_slave" # Used in formula `ssdb` 95 | - "ssdb_slave" # Used in formula `ssdb` 96 | - "var_slave" # Used in formula `ssdb` 97 | - "patches/13_fix_scope_for_show_slave_status_data.patch" # Used in formula `mytop` 98 | blacklist: 99 | AllowedRegex: 100 | - "--listBlacklist" # Used in formula `xmlsectool` 101 | 102 | Naming/MethodName: 103 | IgnoredPatterns: 104 | - '\A(fetch_)?HEAD\?\Z' 105 | 106 | # Both styles are used depending on context, 107 | # e.g. `sha256` and `something_countable_1`. 108 | Naming/VariableNumber: 109 | Enabled: false 110 | 111 | # Require &&/|| instead of and/or 112 | Style/AndOr: 113 | Enabled: true 114 | EnforcedStyle: always 115 | 116 | # Avoid leaking resources. 117 | Style/AutoResourceCleanup: 118 | Enabled: true 119 | 120 | # This makes these a little more obvious. 121 | Style/BarePercentLiterals: 122 | EnforcedStyle: percent_q 123 | 124 | # Use consistent style for better readability. 125 | Style/CollectionMethods: 126 | Enabled: true 127 | 128 | # Prefer tokens with type annotations for consistency 129 | # between formatting numbers and strings. 130 | Style/FormatStringToken: 131 | EnforcedStyle: annotated 132 | 133 | # autocorrectable and more readable 134 | Style/HashEachMethods: 135 | Enabled: true 136 | Style/HashTransformKeys: 137 | Enabled: true 138 | Style/HashTransformValues: 139 | Enabled: true 140 | 141 | # Allow for license expressions 142 | Style/HashAsLastArrayItem: 143 | Exclude: 144 | - "Taps/*/*/*.rb" 145 | - "/**/Formula/*.rb" 146 | - "**/Formula/*.rb" 147 | 148 | # Enabled now LineLength is lowish. 149 | Style/IfUnlessModifier: 150 | Enabled: true 151 | 152 | # Only use this for numbers >= `1_000_000`. 153 | Style/NumericLiterals: 154 | MinDigits: 7 155 | Strict: true 156 | Exclude: 157 | - "**/Brewfile" 158 | 159 | # Zero-prefixed octal literals are widely used and understood. 160 | Style/NumericLiteralPrefix: 161 | EnforcedOctalStyle: zero_only 162 | 163 | # Rescuing `StandardError` is an understood default. 164 | Style/RescueStandardError: 165 | EnforcedStyle: implicit 166 | 167 | # Returning `nil` is unnecessary. 168 | Style/ReturnNil: 169 | Enabled: true 170 | 171 | # We have no use for using `warn` because we 172 | # are calling Ruby with warnings disabled. 173 | Style/StderrPuts: 174 | Enabled: false 175 | 176 | # Use consistent method names. 177 | Style/StringMethods: 178 | Enabled: true 179 | 180 | # An array of symbols is more readable than a symbol array 181 | # and also allows for easier grepping. 182 | Style/SymbolArray: 183 | EnforcedStyle: brackets 184 | 185 | # Trailing commas make diffs nicer. 186 | Style/TrailingCommaInArguments: 187 | EnforcedStyleForMultiline: comma 188 | Style/TrailingCommaInArrayLiteral: 189 | EnforcedStyleForMultiline: comma 190 | Style/TrailingCommaInHashLiteral: 191 | EnforcedStyleForMultiline: comma 192 | 193 | # Does not hinder readability, so might as well enable it. 194 | Performance/CaseWhenSplat: 195 | Enabled: true 196 | 197 | # Makes code less readable for minor performance increases. 198 | Performance/Caller: 199 | Enabled: false 200 | 201 | # Makes code less readable for minor performance increases. 202 | Performance/MethodObjectAsBlock: 203 | Enabled: false 204 | 205 | Rails: 206 | # Selectively enable what we want. 207 | Enabled: false 208 | # Cannot use ActiveSupport in RuboCops. 209 | Exclude: 210 | - "Homebrew/rubocops/**/*" 211 | 212 | # These relate to ActiveSupport and not other parts of Rails. 213 | Rails/ActiveSupportAliases: 214 | Enabled: true 215 | Rails/Blank: 216 | Enabled: true 217 | Rails/CompactBlank: 218 | Enabled: true 219 | Rails/Delegate: 220 | Enabled: false # TODO 221 | Rails/DelegateAllowBlank: 222 | Enabled: true 223 | Rails/DurationArithmetic: 224 | Enabled: true 225 | Rails/ExpandedDateRange: 226 | Enabled: true 227 | Rails/Inquiry: 228 | Enabled: true 229 | Rails/NegateInclude: 230 | Enabled: true 231 | Rails/PluralizationGrammar: 232 | Enabled: true 233 | Rails/Presence: 234 | Enabled: true 235 | Rails/Present: 236 | Enabled: true 237 | Rails/RelativeDateConstant: 238 | Enabled: true 239 | Rails/SafeNavigation: 240 | Enabled: true 241 | Rails/SafeNavigationWithBlank: 242 | Enabled: true 243 | 244 | # Don't allow cops to be disabled in casks and formulae. 245 | Style/DisableCopsWithinSourceCodeDirective: 246 | Enabled: true 247 | Include: 248 | - "Taps/*/*/*.rb" 249 | - "/**/{Formula,Casks}/*.rb" 250 | - "**/{Formula,Casks}/*.rb" 251 | 252 | # make our hashes consistent 253 | Layout/HashAlignment: 254 | EnforcedHashRocketStyle: table 255 | EnforcedColonStyle: table 256 | 257 | # `system` is a special case and aligns on second argument, so allow this for formulae. 258 | Layout/ArgumentAlignment: 259 | Exclude: 260 | - "Taps/*/*/*.rb" 261 | - "/**/Formula/*.rb" 262 | - "**/Formula/*.rb" 263 | 264 | # this is a bit less "floaty" 265 | Layout/CaseIndentation: 266 | EnforcedStyle: end 267 | 268 | # Need to allow #: for external commands. 269 | Layout/LeadingCommentSpace: 270 | Exclude: 271 | - "Taps/*/*/cmd/*.rb" 272 | 273 | # this is a bit less "floaty" 274 | Layout/EndAlignment: 275 | EnforcedStyleAlignWith: start_of_line 276 | 277 | # conflicts with DSL-style path concatenation with `/` 278 | Layout/SpaceAroundOperators: 279 | Enabled: false 280 | 281 | # layout is not configurable (https://github.com/rubocop-hq/rubocop/issues/6254). 282 | Layout/RescueEnsureAlignment: 283 | Enabled: false 284 | 285 | # significantly less indentation involved; more consistent 286 | Layout/FirstArrayElementIndentation: 287 | EnforcedStyle: consistent 288 | Layout/FirstHashElementIndentation: 289 | EnforcedStyle: consistent 290 | 291 | # favour parens-less DSL-style arguments 292 | Lint/AmbiguousBlockAssociation: 293 | Enabled: false 294 | 295 | Lint/RequireRelativeSelfPath: 296 | # bugged on formula-analytics 297 | # https://github.com/Homebrew/brew/pull/12152/checks?check_run_id=3755137378#step:15:60 298 | Exclude: 299 | - "Taps/homebrew/homebrew-formula-analytics/*/*.rb" 300 | 301 | Lint/DuplicateBranch: 302 | Exclude: 303 | - "Taps/*/*/*.rb" 304 | - "/**/{Formula,Casks}/*.rb" 305 | - "**/{Formula,Casks}/*.rb" 306 | 307 | # needed for lazy_object magic 308 | Naming/MemoizedInstanceVariableName: 309 | Exclude: 310 | - "Homebrew/lazy_object.rb" 311 | 312 | # useful for metaprogramming in RSpec 313 | Lint/ConstantDefinitionInBlock: 314 | Exclude: 315 | - "**/*_spec.rb" 316 | 317 | # so many of these in formulae and can't be autocorrected 318 | Lint/ParenthesesAsGroupedExpression: 319 | Exclude: 320 | - "Taps/*/*/*.rb" 321 | - "/**/Formula/*.rb" 322 | - "**/Formula/*.rb" 323 | 324 | # Most metrics don't make sense to apply for casks/formulae/taps. 325 | Metrics/AbcSize: 326 | Exclude: 327 | - "Taps/**/*" 328 | - "/**/{Formula,Casks}/*.rb" 329 | - "**/{Formula,Casks}/*.rb" 330 | Metrics/BlockLength: 331 | Exclude: 332 | - "Taps/**/*" 333 | - "/**/{Formula,Casks}/*.rb" 334 | - "**/{Formula,Casks}/*.rb" 335 | Metrics/ClassLength: 336 | Exclude: 337 | - "Taps/**/*" 338 | - "/**/{Formula,Casks}/*.rb" 339 | - "**/{Formula,Casks}/*.rb" 340 | Metrics/CyclomaticComplexity: 341 | Exclude: 342 | - "Taps/**/*" 343 | - "/**/{Formula,Casks}/*.rb" 344 | - "**/{Formula,Casks}/*.rb" 345 | Metrics/MethodLength: 346 | Exclude: 347 | - "Taps/**/*" 348 | - "/**/{Formula,Casks}/*.rb" 349 | - "**/{Formula,Casks}/*.rb" 350 | Metrics/ModuleLength: 351 | Exclude: 352 | - "Taps/**/*" 353 | - "/**/{Formula,Casks}/*.rb" 354 | - "**/{Formula,Casks}/*.rb" 355 | Metrics/PerceivedComplexity: 356 | Exclude: 357 | - "Taps/**/*" 358 | - "/**/{Formula,Casks}/*.rb" 359 | - "**/{Formula,Casks}/*.rb" 360 | 361 | # allow those that are standard 362 | # TODO: try to remove some of these 363 | Naming/MethodParameterName: 364 | AllowedNames: 365 | - "_" 366 | - "a" 367 | - "b" 368 | - "cc" 369 | - "c1" 370 | - "c2" 371 | - "d" 372 | - "e" 373 | - "f" 374 | - "ff" 375 | - "fn" 376 | - "id" 377 | - "io" 378 | - "o" 379 | - "p" 380 | - "pr" 381 | - "r" 382 | - "rb" 383 | - "s" 384 | - "to" 385 | - "v" 386 | 387 | # GitHub diff UI wraps beyond 118 characters 388 | Layout/LineLength: 389 | Max: 118 390 | # ignore manpage comments and long single-line strings 391 | IgnoredPatterns: 392 | [ 393 | "#: ", 394 | ' url "', 395 | ' mirror "', 396 | " plist_options ", 397 | ' appcast "', 398 | ' executable: "', 399 | ' font "', 400 | ' homepage "', 401 | ' name "', 402 | ' pkg "', 403 | ' pkgutil: "', 404 | " sha256 cellar: ", 405 | " sha256 ", 406 | "#{language}", 407 | "#{version.", 408 | ' "/Library/Application Support/', 409 | '"/Library/Caches/', 410 | '"/Library/PreferencePanes/', 411 | ' "~/Library/Application Support/', 412 | '"~/Library/Caches/', 413 | '"~/Application Support', 414 | " was verified as official when first introduced to the cask", 415 | ] 416 | 417 | Sorbet/FalseSigil: 418 | Exclude: 419 | - "Taps/**/*" 420 | - "/**/{Formula,Casks}/*.rb" 421 | - "**/{Formula,Casks}/*.rb" 422 | - "Homebrew/test/**/Casks/**/*.rb" 423 | 424 | Sorbet/StrictSigil: 425 | inherit_mode: 426 | override: 427 | - Include 428 | Enabled: true 429 | Include: 430 | - "**/*.rbi" 431 | 432 | # Try getting rid of these. 433 | Sorbet/ConstantsFromStrings: 434 | Enabled: false 435 | 436 | # Avoid false positives on modifiers used on symbols of methods 437 | # See https://github.com/rubocop-hq/rubocop/issues/5953 438 | Style/AccessModifierDeclarations: 439 | Enabled: false 440 | 441 | # Conflicts with type signatures on `attr_*`s. 442 | Style/AccessorGrouping: 443 | Enabled: false 444 | 445 | # make rspec formatting more flexible 446 | Style/BlockDelimiters: 447 | Exclude: 448 | - "Homebrew/**/*_spec.rb" 449 | - "Homebrew/**/shared_examples/**/*.rb" 450 | 451 | # TODO: remove this when possible. 452 | Style/ClassVars: 453 | Exclude: 454 | - "**/developer/bin/*" 455 | 456 | # Don't enforce documentation in casks or formulae. 457 | Style/Documentation: 458 | Exclude: 459 | - "Taps/**/*" 460 | - "/**/{Formula,Casks}/*.rb" 461 | - "**/{Formula,Casks}/*.rb" 462 | - "**/*.rbi" 463 | 464 | Style/DocumentationMethod: 465 | Include: 466 | - "Homebrew/formula.rb" 467 | 468 | # Not used for casks and formulae. 469 | Style/FrozenStringLiteralComment: 470 | EnforcedStyle: always 471 | Exclude: 472 | - "Taps/*/*/*.rb" 473 | - "/**/{Formula,Casks}/*.rb" 474 | - "**/{Formula,Casks}/*.rb" 475 | - "Homebrew/test/**/Casks/**/*.rb" 476 | - "**/*.rbi" 477 | - "**/Brewfile" 478 | 479 | # TODO: remove this when possible. 480 | Style/GlobalVars: 481 | Exclude: 482 | - "**/developer/bin/*" 483 | 484 | # potential for errors in formulae too high with this 485 | Style/GuardClause: 486 | Exclude: 487 | - "Taps/*/*/*.rb" 488 | - "/**/{Formula,Casks}/*.rb" 489 | - "**/{Formula,Casks}/*.rb" 490 | 491 | # avoid hash rockets where possible 492 | Style/HashSyntax: 493 | EnforcedStyle: ruby19 494 | 495 | # OpenStruct is a nice helper. 496 | Style/OpenStructUse: 497 | Enabled: false 498 | 499 | # so many of these in formulae and can't be autocorrected 500 | Style/StringConcatenation: 501 | Exclude: 502 | - "Taps/*/*/*.rb" 503 | - "/**/{Formula,Casks}/*.rb" 504 | - "**/{Formula,Casks}/*.rb" 505 | 506 | # ruby style guide favorite 507 | Style/StringLiterals: 508 | EnforcedStyle: double_quotes 509 | 510 | # consistency with above 511 | Style/StringLiteralsInInterpolation: 512 | EnforcedStyle: double_quotes 513 | 514 | # make things a bit easier to read 515 | Style/TernaryParentheses: 516 | EnforcedStyle: require_parentheses_when_complex 517 | 518 | # `unless ... ||` and `unless ... &&` are hard to mentally parse 519 | Style/UnlessLogicalOperators: 520 | Enabled: true 521 | EnforcedStyle: forbid_logical_operators 522 | 523 | # a bit confusing to non-Rubyists but useful for longer arrays 524 | Style/WordArray: 525 | MinSize: 4 526 | 527 | # would rather freeze too much than too little 528 | Style/MutableConstant: 529 | EnforcedStyle: strict 530 | 531 | # unused keyword arguments improve APIs 532 | Lint/UnusedMethodArgument: 533 | AllowUnusedKeywordArguments: true -------------------------------------------------------------------------------- /Formula/apple-roms.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | # we should create JaikbreakFormula that pretends it's not tap only by generating a version in the 5 | # form of the height of the "main" branch 6 | class AppleRoms < Formula 7 | desc "Known SecureROM and SEPROM binaries" 8 | homepage "https://hekapooios.github.io" 9 | head "https://github.com/hekapooios/hekapooios.github.io.git" 10 | 11 | def install 12 | pkgshare.install Dir["resources/SEPROM/*"] 13 | pkgshare.install Dir["resources/APROM/*"] 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /Formula/checkra1n-toolchain.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | class Checkra1nToolchain < Formula 5 | desc "Official checkra1n build toolchain" 6 | homepage "https://github.com/checkra1n/toolchain" 7 | 8 | url "https://github.com/checkra1n/toolchain/archive/refs/tags/v0.1.tar.gz" 9 | version "0.1" 10 | sha256 "c69dac5da25feb9a0573d4223874b959e233ccae52b854855a30eeea1cc8e1df" 11 | 12 | depends_on :macos 13 | end 14 | -------------------------------------------------------------------------------- /Formula/disass.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | # This file was generated by GoReleaser. DO NOT EDIT. 5 | class Disass < Formula 6 | desc "MachO ARMv9-a Disassembler" 7 | homepage "https://github.com/blacktop/arm64-cgo" 8 | url "https://github.com/blacktop/arm64-cgo/releases/download/v1.0.51/disass_1.0.51_macOS_universal.tar.gz" 9 | version "1.0.51" 10 | sha256 "3c950df9b4c97fabcaa039698dcd6880eef0bd661b60010a67befbc5197c079e" 11 | 12 | depends_on :macos 13 | depends_on "bat" => :optional 14 | 15 | def install 16 | bin.install "disass" 17 | bash_completion.install "completions/_bash" => "disass" 18 | zsh_completion.install "completions/_zsh" => "_disass" 19 | fish_completion.install "completions/_fish" => "disass.fish" 20 | end 21 | 22 | test do 23 | system "#{bin}/disass", "--version" 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /Formula/dsdump.rb: -------------------------------------------------------------------------------- 1 | # Formula taken from dsdump repository 2 | class Dsdump < Formula 3 | desc "Improved nm + Objective-C & Swift class-dump" 4 | homepage "https://github.com/DerekSelander/dsdump" 5 | url "https://github.com/DerekSelander/dsdump/blob/master/compiled/dsdump_compiled.zip" 6 | version "0.1.0" 7 | sha256 "fe2de7d58048f92735c89686fd8c5bab92b5e8d0cf7ba6dce4ab00e62d0c7529" 8 | head "https://github.com/DerekSelander/dsdump.git" 9 | 10 | def install 11 | bin.install "selander/dsdump" 12 | end 13 | end 14 | -------------------------------------------------------------------------------- /Formula/dyldextractor.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | # generated by poet 5 | class Dyldextractor < Formula 6 | include Language::Python::Virtualenv 7 | 8 | desc "Extract unoptimized libraries from the shared cache, making proper RE possible" 9 | homepage "https://github.com/arandomdev/dyldextractor" 10 | url "https://files.pythonhosted.org/packages/44/dd/e40b4fd57147d13114d813d4d5131bb708f8f167aba52c1028da3af7d322/dyldextractor-1.0.6.tar.gz" 11 | sha256 "4aba9ac54d1288eca4060a791a585986766d56d17667231a43db69c527bf5d14" 12 | 13 | depends_on "python3" 14 | 15 | resource "capstone" do 16 | url "https://files.pythonhosted.org/packages/f2/ae/21dbb3ccc30d5cc9e8cdd8febfbf5d16d93b8c10e595280d2aa4631a0d1f/capstone-4.0.2.tar.gz" 17 | sha256 "2842913092c9b69fd903744bc1b87488e1451625460baac173056e1808ec1c66" 18 | end 19 | 20 | resource "progressbar2" do 21 | url "https://files.pythonhosted.org/packages/ec/91/8ccedd384153a4f070be8b8d0fc0f9f6436bcc0d1ad4b4d1f891343d109c/progressbar2-3.55.0.tar.gz" 22 | sha256 "86835d1f1a9317ab41aeb1da5e4184975e2306586839d66daf63067c102f8f04" 23 | end 24 | 25 | resource "python-utils" do 26 | url "https://files.pythonhosted.org/packages/03/d8/3ad4dd157e5a36184df0280857bcaea60b13cb6e945e27ac3d8589f8c2a2/python-utils-2.5.6.tar.gz" 27 | sha256 "352d5b1febeebf9b3cdb9f3c87a3b26ef22d3c9e274a8ec1e7048ecd2fac4349" 28 | end 29 | 30 | resource "six" do 31 | url "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz" 32 | sha256 "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" 33 | end 34 | 35 | def install 36 | virtualenv_create(libexec, "python3") 37 | virtualenv_install_with_resources 38 | end 39 | 40 | test do 41 | false 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /Formula/frida-node.rb: -------------------------------------------------------------------------------- 1 | require "language/node" 2 | 3 | class FridaNode < Formula 4 | desc "Node.js bindings for Frida" 5 | homepage "https://www.frida.re/" 6 | url "https://registry.npmjs.org/frida/-/frida-14.0.1.tgz" 7 | sha256 "051b2bc5179bffd9eaee3589e744c35e8ce474b9f86218296683ac87717a95bb" 8 | license "MIT" 9 | 10 | # livecheck do 11 | # url :stable 12 | # end 13 | 14 | depends_on "node" 15 | 16 | def install 17 | system "npm", "install", *Language::Node.std_npm_install_args(libexec) 18 | # bin.install_symlink Dir["#{libexec}/bin/*"] 19 | end 20 | 21 | # test do 22 | # (testpath/".eslintrc.json").write("{}") # minimal config 23 | # (testpath/"syntax-error.js").write("{}}") 24 | # # https://eslint.org/docs/user-guide/command-line-interface#exit-codes 25 | # output = shell_output("#{bin}/eslint syntax-error.js", 1) 26 | # assert_match "Unexpected token }", output 27 | # end 28 | end 29 | -------------------------------------------------------------------------------- /Formula/frida-tools.rb: -------------------------------------------------------------------------------- 1 | class FridaTools < Formula 2 | include Language::Python::Virtualenv 3 | 4 | desc "CLI tools for Frida" 5 | homepage "https://www.frida.re/" 6 | url "https://files.pythonhosted.org/packages/d8/c0/4d00f9e85b499bed8857971040e9a5b9e6f1a995fb3569d25984eaf5294c/frida-tools-9.2.5.tar.gz" 7 | sha256 "354736266f9da2586d4a1a9327886de896ed97a59087c373225999f7e1ceb372" 8 | license "MIT" 9 | revision 3 10 | 11 | livecheck do 12 | url :stable 13 | regex(%r{href=.*?/packages.*?/frida[._-]v?(\d+(?:\.\d+)*(?:[a-z]\d+)?)\.t}i) 14 | end 15 | 16 | depends_on "python@3.9" 17 | 18 | resource "colorama" do 19 | url "https://files.pythonhosted.org/packages/1f/bb/5d3246097ab77fa083a61bd8d3d527b7ae063c7d8e8671b1cf8c4ec10cbe/colorama-0.4.4.tar.gz" 20 | sha256 "5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b" 21 | end 22 | 23 | resource "frida" do 24 | url "https://files.pythonhosted.org/packages/a4/9b/47060185e90b7641dd9776a8577b9b048ae5ebce62db91e757ba91455aff/frida-14.2.18.tar.gz" 25 | sha256 "f0e40b8b2efec32a540c259b923ee65a73a6085c1f30d139adf01c859abaf47a" 26 | end 27 | 28 | resource "prompt_toolkit" do 29 | url "https://files.pythonhosted.org/packages/88/4b/2c0f9e2b52297bdeede91c8917c51575b125006da5d0485521fa2b1e0b75/prompt_toolkit-3.0.19.tar.gz" 30 | sha256 "08360ee3a3148bdb5163621709ee322ec34fc4375099afa4bbf751e9b7b7fa4f" 31 | end 32 | 33 | resource "Pygments" do 34 | url "https://files.pythonhosted.org/packages/ba/6e/7a7c13c21d8a4a7f82ccbfe257a045890d4dbf18c023f985f565f97393e3/Pygments-2.9.0.tar.gz" 35 | sha256 "a18f47b506a429f6f4b9df81bb02beab9ca21d0a5fee38ed15aef65f0545519f" 36 | end 37 | 38 | resource "six" do 39 | url "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz" 40 | sha256 "1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926" 41 | end 42 | 43 | resource "wcwidth" do 44 | url "https://files.pythonhosted.org/packages/89/38/459b727c381504f361832b9e5ace19966de1a235d73cdbdea91c771a1155/wcwidth-0.2.5.tar.gz" 45 | sha256 "c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83" 46 | end 47 | 48 | def install 49 | virtualenv_install_with_resources 50 | end 51 | 52 | test do 53 | ENV["LC_ALL"] = "en_US.UTF-8" 54 | 55 | output = shell_output("#{bin}/frida-ps") 56 | assert_match "PID Name", output 57 | end 58 | end 59 | -------------------------------------------------------------------------------- /Formula/go-apfs.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | class GoApfs < Formula 5 | desc "APFS parser written in pure Go" 6 | homepage "https://github.com/blacktop/go-apfs" 7 | url "https://github.com/blacktop/go-apfs/releases/download/v1.0.12/apfs_1.0.12_macOS_universal.tar.gz" 8 | version "1.0.12" 9 | sha256 "2b4fa31434709ce324c2980dece7a6d19c5c30677735a27ae9bbfb65d1e55b6e" 10 | head "https://github.com/blacktop/go-apfs.git" 11 | depends_on :macos 12 | 13 | def install 14 | bin.install "apfs" 15 | bash_completion.install "completions/_bash" => "apfs" 16 | zsh_completion.install "completions/_zsh" => "_apfs" 17 | fish_completion.install "completions/_fish" => "apfs.fish" 18 | end 19 | 20 | test do 21 | system "#{bin}/apfs", "--version" 22 | end 23 | end 24 | -------------------------------------------------------------------------------- /Formula/go-rop.rb: -------------------------------------------------------------------------------- 1 | class GoRop < Formula 2 | desc "ROP Gadget Finder" 3 | homepage "https://github.com/blacktop/go-rop" 4 | url "https://github.com/blacktop/go-rop/releases/download/0.1.1/go-rop_0.1.1_macOS_amd64.tar.gz" 5 | version "0.1.1" 6 | sha256 "aede90067014acdbb81038de0ea3facafa4d6ae17f91cb9e5d7c9043b8e06286" 7 | 8 | def install 9 | bin.install "go-rop" 10 | end 11 | 12 | test do 13 | system "#{bin}/go-rop", "--version" 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /Formula/graboid.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | # This file was generated by GoReleaser. DO NOT EDIT. 5 | class Graboid < Formula 6 | desc "Clientless docker image downloader" 7 | homepage "https://github.com/blacktop/graboid" 8 | version "0.15.8" 9 | 10 | on_macos do 11 | if Hardware::CPU.arm? 12 | url "https://github.com/blacktop/graboid/releases/download/0.15.8/graboid_0.15.8_macOS_arm64.tar.gz" 13 | sha256 "b916b7b8f11f33927a293cfb05b3f01fffbca1a6a16b1da264223a38014f3598" 14 | end 15 | if Hardware::CPU.intel? 16 | url "https://github.com/blacktop/graboid/releases/download/0.15.8/graboid_0.15.8_macOS_x86_64.tar.gz" 17 | sha256 "f6772a554b312df901087d4fb49e03776f25888b55c37158654abdbb5f22beee" 18 | end 19 | end 20 | 21 | on_linux do 22 | if Hardware::CPU.arm? && Hardware::CPU.is_64_bit? 23 | url "https://github.com/blacktop/graboid/releases/download/0.15.8/graboid_0.15.8_linux_arm64.tar.gz" 24 | sha256 "4f05c3e7428e9c4a84342ccb8afdef70b60c66c5ab8298aeba8642fcf8d60666" 25 | end 26 | if Hardware::CPU.intel? 27 | url "https://github.com/blacktop/graboid/releases/download/0.15.8/graboid_0.15.8_linux_x86_64.tar.gz" 28 | sha256 "d841cd183e18e40436d1a8b576857db066c92f79b369af74d3ea3682a81629be" 29 | end 30 | end 31 | 32 | def install 33 | bin.install "graboid" 34 | end 35 | 36 | test do 37 | system "#{bin}/graboid", "--version" 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /Formula/img4lib.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | class Img4lib < Formula 4 | desc "img4 library and tool" 5 | homepage "https://github.com/xerub/img4lib" 6 | version "1.0" 7 | head "https://github.com/xerub/img4lib.git" 8 | url "https://github.com/xerub/img4lib/releases/download/1.0/img4lib-2020-10-27.tar.gz" 9 | 10 | depends_on "openssl" 11 | 12 | def install 13 | system "make" 14 | 15 | bin.install "img4" 16 | end 17 | end -------------------------------------------------------------------------------- /Formula/ipsw.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | # This file was generated by GoReleaser. DO NOT EDIT. 5 | class Ipsw < Formula 6 | desc "Download and parse ipsw(s)" 7 | homepage "https://github.com/blacktop/ipsw" 8 | version "3.1.45" 9 | depends_on :macos 10 | depends_on "bat" => :optional 11 | 12 | on_macos do 13 | if Hardware::CPU.arm? 14 | url "https://github.com/blacktop/ipsw/releases/download/v3.1.45/ipsw_3.1.45_macOS_arm64.tar.gz" 15 | sha256 "e86f4c4e0d21fb2b3a874c0c577b8bd2cb8d82631ddad6219123f5b9c86711aa" 16 | 17 | def install 18 | bin.install "ipsw" 19 | bash_completion.install "completions/_bash" => "ipsw" 20 | zsh_completion.install "completions/_zsh" => "_ipsw" 21 | fish_completion.install "completions/_fish" => "ipsw.fish" 22 | end 23 | end 24 | if Hardware::CPU.intel? 25 | url "https://github.com/blacktop/ipsw/releases/download/v3.1.45/ipsw_3.1.45_macOS_x86_64.tar.gz" 26 | sha256 "a4524276b90513731bc103e9c8e3319b90661a40a6cda3753c11bf47cb69c8bb" 27 | 28 | def install 29 | bin.install "ipsw" 30 | bash_completion.install "completions/_bash" => "ipsw" 31 | zsh_completion.install "completions/_zsh" => "_ipsw" 32 | fish_completion.install "completions/_fish" => "ipsw.fish" 33 | end 34 | end 35 | end 36 | 37 | test do 38 | system "#{bin}/ipsw", "--version" 39 | end 40 | end 41 | -------------------------------------------------------------------------------- /Formula/ktool.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | class Ktool < Formula 5 | include Language::Python::Virtualenv 6 | 7 | desc "Cross platform MachO/ObjC tooling in Python" 8 | homepage "https://github.com/cxnder/ktool" 9 | url "https://files.pythonhosted.org/packages/b8/b8/1588dba876e687bcb5f5cf9153a402a36396956e28613d2d885a37e39cf7/k2l-0.20.1.tar.gz" 10 | sha256 "77c3d271983e02d8480597366038b82957259a0eca6ade3b3968554f9d8e8b0e" 11 | 12 | depends_on "python3" 13 | 14 | # direct k2l deps 15 | resource "kimg4" do 16 | url "https://files.pythonhosted.org/packages/31/24/96ce0f7f686681a9a709ab619dd8a385226d84a251fab979a3fec2975850/kimg4-0.1.1.tar.gz" 17 | sha256 "cec41e94593b070cbee107aa00d2d7207f335c5c5f8d51ab9a2b5c2fd3f8932a" 18 | end 19 | 20 | resource "packaging" do 21 | url "https://files.pythonhosted.org/packages/df/9e/d1a7217f69310c1db8fdf8ab396229f55a699ce34a203691794c5d1cad0c/packaging-21.3.tar.gz" 22 | sha256 "dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb" 23 | end 24 | 25 | resource "pyaes" do 26 | url "https://files.pythonhosted.org/packages/44/66/2c17bae31c906613795711fc78045c285048168919ace2220daa372c7d72/pyaes-1.6.1.tar.gz" 27 | sha256 "02c1b1405c38d3c370b085fb952dd8bea3fadcee6411ad99f312cc129c536d8f" 28 | end 29 | 30 | resource "Pygments" do 31 | url "https://files.pythonhosted.org/packages/15/53/5345177cafa79a49e02c27102019a01ef1682ab170d2138deca47a4c8924/Pygments-2.11.1.tar.gz" 32 | sha256 "59b895e326f0fb0d733fd28c6839bd18ad0687ba20efc26d4277fd1d30b971f4" 33 | end 34 | 35 | # pygments deps 36 | resource "pyparsing" do 37 | url "https://files.pythonhosted.org/packages/ab/61/1a1613e3dcca483a7aa9d446cb4614e6425eb853b90db131c305bd9674cb/pyparsing-3.0.6.tar.gz" 38 | sha256 "d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81" 39 | end 40 | 41 | def install 42 | virtualenv_create(libexec, "python3") 43 | virtualenv_install_with_resources 44 | end 45 | 46 | test do 47 | false 48 | end 49 | end 50 | -------------------------------------------------------------------------------- /Formula/lporg.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | # This file was generated by GoReleaser. DO NOT EDIT. 5 | class Lporg < Formula 6 | desc "Organize Your macOS Launchpad Apps" 7 | homepage "https://github.com/blacktop/lporg" 8 | url "https://github.com/blacktop/lporg/releases/download/v20.4.7/lporg_20.4.7_macOS_universal.tar.gz" 9 | version "20.4.7" 10 | sha256 "4a13ee5ead8b14e9609949c465858cbbb4aa24c96afd23599fb04c5a528cf0c8" 11 | depends_on :macos 12 | 13 | def install 14 | bin.install "lporg" 15 | end 16 | 17 | test do 18 | system "#{bin}/lporg", "--version" 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /Formula/macvdmtool.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | class Macvdmtool < Formula 4 | desc "USB-C PD VDM Tool for Fruity Hardware" 5 | homepage "https://github.com/hack-different/macvdmtool" 6 | version "1.0" 7 | head "https://github.com/hack-different/macvdmtool.git" 8 | url "https://github.com/hack-different/macvdmtool/archive/refs/tags/v1.0.tar.gz" 9 | sha256 "fb7632120301e9ea327ea438d5a7dae8c66105a53cea7f659f56e7e7af4a990d" 10 | depends_on "cmake" => :build 11 | 12 | def install 13 | mkdir 'build' do 14 | args = std_cmake_args 15 | system "cmake", "..", *args 16 | system "make", "install" 17 | end 18 | end 19 | end 20 | -------------------------------------------------------------------------------- /Formula/scgen.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | # This file was generated by GoReleaser. DO NOT EDIT. 5 | class Scgen < Formula 6 | desc "Docker Secure Computing Profile Generator" 7 | homepage "https://github.com/blacktop/seccomp-gen" 8 | url "https://github.com/blacktop/seccomp-gen/releases/download/v1.1.5/scgen_1.1.5_macOS_universal.tar.gz" 9 | version "1.1.5" 10 | sha256 "c7b4dcf3279e4ce9b89c125cfd86d21bacdc92e5c6518d80e0f16f676894091a" 11 | 12 | on_linux do 13 | if Hardware::CPU.arm? && Hardware::CPU.is_64_bit? 14 | url "https://github.com/blacktop/seccomp-gen/releases/download/v1.1.5/scgen_1.1.5_linux_arm64.tar.gz" 15 | sha256 "d5910fffeb006438b5e91d3b320f0113337aa232fa9da8016a284c156d0e24a6" 16 | 17 | def install 18 | bin.install "scgen" 19 | end 20 | end 21 | 22 | if Hardware::CPU.intel? 23 | url "https://github.com/blacktop/seccomp-gen/releases/download/v1.1.5/scgen_1.1.5_linux_x86_64.tar.gz" 24 | sha256 "853dc658089f473477b56feaf70395900419f391af126621add53924a0a98fa8" 25 | 26 | def install 27 | bin.install "scgen" 28 | end 29 | end 30 | end 31 | 32 | def install 33 | bin.install "scgen" 34 | end 35 | 36 | test do 37 | system "#{bin}/scgen", "--version" 38 | end 39 | end 40 | -------------------------------------------------------------------------------- /Formula/seccomp-gen.rb: -------------------------------------------------------------------------------- 1 | class SeccompGen < Formula 2 | desc "Docker Secure Computing Profile Generator" 3 | homepage "https://github.com/blacktop/seccomp-gen" 4 | url "https://github.com/blacktop/seccomp-gen/releases/download/v1.1.4/seccomp-gen_1.1.4_macOS_amd64.tar.gz" 5 | version "1.1.4" 6 | sha256 "c12f07321dcb1059b459176d6a07f0c33b022e9124f9a85925f5f19f777142f7" 7 | 8 | def install 9 | bin.install "scgen" 10 | end 11 | 12 | test do 13 | system "#{bin}/scgen", "--version" 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /Formula/siguza-dt.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | class SiguzaDt < Formula 5 | desc "Siguza's Device Tree (dt)" 6 | homepage "https://github.com/Siguza/dt" 7 | head "https://github.com/Siguza/dt.git" 8 | 9 | def install 10 | system "make" 11 | 12 | bin.install "dt" 13 | bin.install "pmgr" 14 | end 15 | end 16 | -------------------------------------------------------------------------------- /Formula/vm-proxy.rb: -------------------------------------------------------------------------------- 1 | class VmProxy < Formula 2 | desc "Allows hypervisors to be controlled from docker containers" 3 | homepage "https://github.com/blacktop/vm-proxy" 4 | url "https://github.com/blacktop/vm-proxy/releases/download/18.03.9-dev/vm-proxy_18.03.9-dev_macOS_amd64.tar.gz" 5 | version "18.03.9-dev" 6 | sha256 "8a9468ab3e9353fe1e962d28e37d1267a412b6b3abc37331db23336192d0e087" 7 | 8 | def install 9 | bin.install "vm-proxy" 10 | end 11 | 12 | plist_options startup: false 13 | 14 | def plist 15 | <<~EOS 16 | 17 | 19 | 20 | 21 | Label 22 | #{plist_name} 23 | Program 24 | #{bin}/vm-proxy 25 | WorkingDirectory 26 | #{HOMEBREW_PREFIX} 27 | StandardOutPath 28 | #{var}/log/vm-proxy/vm-proxy.log 29 | StandardErrorPath 30 | #{var}/log/vm-proxy/vm-proxy.log 31 | RunAtLoad 32 | 33 | 34 | 35 | ... 36 | 37 | EOS 38 | end 39 | 40 | test do 41 | system "#{bin}/vm-proxy", "--version" 42 | end 43 | end 44 | -------------------------------------------------------------------------------- /Formula/wait-for-es.rb: -------------------------------------------------------------------------------- 1 | # This file was generated by GoReleaser. DO NOT EDIT. 2 | class WaitForEs < Formula 3 | desc "Wait until Elasticsearch become available" 4 | homepage "https://github.com/blacktop/wait-for-es" 5 | url "https://github.com/blacktop/wait-for-es/releases/download/v0.1.3/wait-for-es_0.1.3_MacOS_64-bit.tar.gz" 6 | version "0.1.3" 7 | sha256 "e091a2bfb06ae59a44c88aeeedf34c756e3984d50496a545ff46ccad4216e7f7" 8 | 9 | def install 10 | bin.install "wait-for-es" 11 | end 12 | 13 | test do 14 | system "#{bin}/wait-for-es", "--version" 15 | end 16 | end 17 | -------------------------------------------------------------------------------- /Formula/yolo_dsc.rb: -------------------------------------------------------------------------------- 1 | # typed: false 2 | # frozen_string_literal: true 3 | 4 | class YoloDsc < Formula 5 | desc "DSC (dyld-shared-cache) extractor of last resort" 6 | homepage "https://github.com/rickmark/yolo_dsc" 7 | url "https://github.com/rickmark/yolo_dsc/archive/refs/tags/v1.0.1.tar.gz" 8 | version "1.0.1" 9 | sha256 "bdd51f3f88587884796e10422ff14042308e1bc5b4faacbcc0925e8804c3d760" 10 | 11 | depends_on "cmake" => :build 12 | 13 | def install 14 | system "cmake", ".", *std_cmake_args 15 | 16 | system "make" 17 | 18 | system "make", "install" 19 | end 20 | end 21 | -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | source "https://rubygems.org" 4 | 5 | group :development, :test do 6 | gem "overcommit" 7 | gem "rake" 8 | gem "rubocop" 9 | gem "rubocop-rake" 10 | gem "sorbet" 11 | gem "sorbet-runtime" 12 | end 13 | -------------------------------------------------------------------------------- /Gemfile.lock: -------------------------------------------------------------------------------- 1 | GEM 2 | remote: https://rubygems.org/ 3 | specs: 4 | ast (2.4.2) 5 | childprocess (4.1.0) 6 | iniparse (1.5.0) 7 | overcommit (0.58.0) 8 | childprocess (>= 0.6.3, < 5) 9 | iniparse (~> 1.4) 10 | rexml (~> 3.2) 11 | parallel (1.21.0) 12 | parser (3.1.0.0) 13 | ast (~> 2.4.1) 14 | rainbow (3.1.1) 15 | rake (13.0.6) 16 | regexp_parser (2.2.0) 17 | rexml (3.2.5) 18 | rubocop (1.25.0) 19 | parallel (~> 1.10) 20 | parser (>= 3.1.0.0) 21 | rainbow (>= 2.2.2, < 4.0) 22 | regexp_parser (>= 1.8, < 3.0) 23 | rexml 24 | rubocop-ast (>= 1.15.1, < 2.0) 25 | ruby-progressbar (~> 1.7) 26 | unicode-display_width (>= 1.4.0, < 3.0) 27 | rubocop-ast (1.15.1) 28 | parser (>= 3.0.1.1) 29 | rubocop-rake (0.6.0) 30 | rubocop (~> 1.0) 31 | ruby-progressbar (1.11.0) 32 | sorbet (0.5.9534) 33 | sorbet-static (= 0.5.9534) 34 | sorbet-runtime (0.5.9534) 35 | sorbet-static (0.5.9534-universal-darwin-21) 36 | unicode-display_width (2.1.0) 37 | 38 | PLATFORMS 39 | arm64-darwin-21 40 | x86_64-darwin-21 41 | 42 | DEPENDENCIES 43 | overcommit 44 | rake 45 | rubocop 46 | rubocop-rake 47 | sorbet 48 | sorbet-runtime 49 | 50 | BUNDLED WITH 51 | 2.3.3 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Hack Different 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # homebrew-jailbreak 2 | 3 | A collection of homebrew formula for the different thinking hacker. 4 | 5 | This project maintained by [Hack Different](https://hackdiffe.rent) 6 | 7 | ## Installation 8 | 9 | Homebrew (and, as follows, this tap) requires either a MacOS or Linux machine 10 | 11 | 1. [Install Homebrew](https://brew.sh) 12 | 2. run `brew tap hack-different/jailbreak` 13 | 3. Install any of the packages with `brew install ` 14 | 15 | `brew tap-info hack-different/jailbreak --json | grep nt/ja | awk '{$1=$1};1'` Will list packages available in the tap. 16 | 17 | ## Requirements for inclusion 18 | 19 | Think and Hack Different - in total opposition to `homebrew-core` we do not accept non-head formulas. 20 | 21 | Who ships versions anyway? Use `main` and live dangerously. 22 | 23 | 24 | ## credits, thanks and shameless theft 25 | 26 | The origins of this are -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | # frozen_string_literal: true 2 | 3 | require "bundler/setup" 4 | 5 | FORMULA_PATH = File.join(File.dirname(__FILE__), "Formula").freeze 6 | 7 | desc "test all formulas are valid" 8 | task :test do 9 | Dir.glob(File.join(FORMULA_PATH, "*.rb")).sort.each do |formula| 10 | require formula 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /docs/CNAME: -------------------------------------------------------------------------------- 1 | tap.hackdiffe.rent -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # Homebrew `hack-different/jailbreak` 2 | 3 | We have created a tap for homebrew that contains the required info for installing jailbreak related tooling. 4 | 5 | --- 6 | 7 | ## Installation 8 | 9 | Homebrew (and, as follows, this tap) requires either a MacOS or Linux machine 10 | 11 | 1. [Install Homebrew](https://brew.sh) 12 | 2. run `brew tap hack-different/jailbreak` 13 | 3. Install any of the packages with `brew install ` 14 | 15 | `brew tap-info hack-different/jailbreak --json | grep nt/ja | awk '{$1=$1};1'` Will list packages available in the tap. 16 | 17 | ## Contributing 18 | 19 | ### What is a "tap"? 20 | 21 | Taps are independent "repos" for [Homebrew](https://brew.sh) containing installable packages. 22 | 23 | [Read their official documentation here](https://docs.brew.sh/Taps) 24 | 25 | ### What is a "Formula"? 26 | 27 | Formulae are ruby source files containing "instructions" on how to install a package. Their documentation is located [Here](https://docs.brew.sh/Formula-Cookbook) 28 | 29 | ### Languages 30 | 31 | #### Python 32 | 33 | `poet` - https://github.com/tdsmith/homebrew-pypi-poet -- Tool for generating HomeBrew Formulae for installing pypi projects. 34 | 35 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-slate --------------------------------------------------------------------------------