├── .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 |
5 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/discord.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
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 |
35 |
36 |
37 |
38 |
39 |
40 |
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
--------------------------------------------------------------------------------