apple-data 0.1.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. checksums.yaml +4 -4
  2. data/lib/apple_data/boot_args.rb +5 -0
  3. data/lib/apple_data/fdr.rb +30 -0
  4. data/lib/apple_data/ioreg.rb +57 -0
  5. data/lib/apple_data/ipsw.rb +25 -0
  6. data/lib/apple_data/keybag.rb +56 -0
  7. data/lib/apple_data/lockdown.rb +48 -0
  8. data/lib/apple_data/macho.rb +5 -0
  9. data/lib/apple_data/version.rb +5 -0
  10. data/lib/apple_data.rb +8 -0
  11. data/share/4cc.yaml +297 -293
  12. data/share/apns.yaml +367 -364
  13. data/share/backup.yaml +47 -44
  14. data/share/baseband/qualcomm/mav13.yaml +26 -0
  15. data/share/baseband/qualcomm/mav20.yaml +45 -0
  16. data/share/baseband/qualcomm/mav21.yaml +254 -0
  17. data/share/baseband.yaml +290 -1
  18. data/share/bluetooth.yaml +75 -71
  19. data/share/boot_args.yaml +863 -855
  20. data/share/bridgeos.yaml +174 -131
  21. data/share/bundles.yaml +56 -60
  22. data/share/coprocessor.yaml +64 -0
  23. data/share/cores.yaml +72 -47
  24. data/share/debug.yaml +13 -0
  25. data/share/defaults.yaml +5 -0
  26. data/share/dnssd.yaml +171 -166
  27. data/share/entitlements.yaml +10391 -0
  28. data/share/environment_variables.yaml +354 -0
  29. data/share/esim.yaml +7 -0
  30. data/share/fdr.yaml +150 -148
  31. data/share/firmware.yaml +1310 -0
  32. data/share/homekit.yaml +14 -14
  33. data/share/iboot.yaml +143 -0
  34. data/share/icloud.yaml +11 -8
  35. data/share/img4.yaml +454 -453
  36. data/share/ioreg.yaml +5647 -5642
  37. data/share/ipsw.yaml +51505 -1099
  38. data/share/kext.yaml +3491 -1718
  39. data/share/keybags/7000.yaml +44342 -0
  40. data/share/keybags/7001.yaml +19430 -0
  41. data/share/keybags/7002.yaml +292 -0
  42. data/share/keybags/8000.yaml +82065 -0
  43. data/share/keybags/8001.yaml +29655 -0
  44. data/share/keybags/8004.yaml +295 -0
  45. data/share/keybags/8006.yaml +65 -0
  46. data/share/keybags/8010.yaml +23899 -0
  47. data/share/keybags/8011.yaml +4409 -0
  48. data/share/keybags/8015.yaml +23626 -0
  49. data/share/keybags/8020.yaml +4488 -0
  50. data/share/keybags/8027.yaml +43 -0
  51. data/share/keybags/8030.yaml +8687 -0
  52. data/share/keybags/8101.yaml +8595 -0
  53. data/share/keybags/8720.yaml +2026 -0
  54. data/share/keybags/8900.yaml +2344 -0
  55. data/share/keybags/8920.yaml +6761 -0
  56. data/share/keybags/8922.yaml +3141 -0
  57. data/share/keybags/8930.yaml +20583 -0
  58. data/share/keybags/8940.yaml +36319 -0
  59. data/share/keybags/8942.yaml +17343 -0
  60. data/share/keybags/8945.yaml +23360 -0
  61. data/share/keybags/8947.yaml +1384 -0
  62. data/share/keybags/8950.yaml +16258 -0
  63. data/share/keybags/8955.yaml +52163 -0
  64. data/share/keybags/8960.yaml +49499 -0
  65. data/share/keys.yaml +56 -0
  66. data/share/lightning.yaml +26 -23
  67. data/share/lockdownd.yaml +74 -71
  68. data/share/mach_o.yaml +204 -172
  69. data/share/mobile_assets.yaml +113 -127
  70. data/share/mobile_gestalt.yaml +2447 -2444
  71. data/share/nvram.yaml +463 -441
  72. data/share/ota.yaml +4 -1
  73. data/share/pki.yaml +103 -99
  74. data/share/platforms.yaml +35 -31
  75. data/share/pmu.yaml +52 -26
  76. data/share/registers.yaml +1579 -1603
  77. data/share/resources.yaml +202 -198
  78. data/share/sep.yaml +210 -206
  79. data/share/services.yaml +641 -636
  80. data/share/sip.yaml +64 -0
  81. data/share/smc.yaml +7 -0
  82. data/share/syscfg.yaml +4 -1
  83. data/share/tipw_sync.yaml +79103 -0
  84. data/share/vmapple.yaml +35 -0
  85. metadata +80 -15
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 364470e15839f7c778c71e079e71b390ce25f658badad6fa75dedd951f76aea8
4
- data.tar.gz: b42d763751fba1422c89902c3b8291c368164e370db2ef473b931a34b8ed5f56
3
+ metadata.gz: 18210321b989a92b229f328c7b98efff91cbadb5663dc91ec437bc44fdd1db19
4
+ data.tar.gz: 237f98dc8650687b41b341922d573e896f4ed64e178b9d52e854d907766e171a
5
5
  SHA512:
6
- metadata.gz: ced7544c4aa23fc1f7fcfde68387726ce8aa7f636be4921deb020801a04b7c82cc25bd3221691c263ea1f8f9b9b0bb9d4f0c157c246aee21e3887fae65034f36
7
- data.tar.gz: acef047056e1b709c6564c05c2dc59a285aeb5c9a5e9c5cf093676ee8f1567fcd572f436ef969666f65c532aac7d4d7cb1cc61b4a03c909a11eac9c338a56a3e
6
+ metadata.gz: 95110443f487a8958365cd5ca4ef25ef41f0bd5468bdbc9a3d2a443c7cdce5ea520329d7612b142125c316f807c4d6ed62d39bbae84d17beb7bdd4cfa3c1e125
7
+ data.tar.gz: 2c9712af1124372baf6cd24bab8954cd8d90366e8f18b01afec1943aabf31cdfaeb04da67d4fbd670269237bfa2ebe48b74ffc02eff2530741e0fc2d2e4864d4
@@ -0,0 +1,5 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ class BootArgsData < DataFile
5
+ end
@@ -0,0 +1,30 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ # Factory Device Restore
5
+ class FDRData < DataFile
6
+ def initialize
7
+ super 'fdr.yaml'
8
+
9
+ @data ||= {}
10
+
11
+ @data['properties'] = []
12
+ end
13
+
14
+ def ensure_property(prop)
15
+ prop_instance = @data['properties'].find { |p| p['name'] == prop }
16
+ unless prop_instance
17
+ prop_instance = {}
18
+ prop_instance['name'] = prop
19
+ prop_instance['description'] = nil
20
+ @data['properties'] << prop_instance
21
+ end
22
+ prop_instance
23
+ end
24
+
25
+ def data
26
+ @data['properties'].sort_by! { |prop| prop['name'] }
27
+
28
+ @data
29
+ end
30
+ end
@@ -0,0 +1,57 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ # Data file for the IOReg data
5
+ class IORegData < DataFile
6
+ def initialize
7
+ super 'ioreg.yaml'
8
+
9
+ @classes = []
10
+
11
+ @data['classes'].each do |single_class|
12
+ @classes << IORegClass.load_one(single_class)
13
+ end
14
+ end
15
+
16
+ def data
17
+ @data = {}
18
+ @data['classes'] = @classes.map(&:to_h)
19
+ end
20
+ end
21
+
22
+ # A single IOKit class
23
+ class IORegClass
24
+ attr_accessor :description, :name, :parents, :known_names
25
+
26
+ def initialize(klass_name)
27
+ @name = klass_name
28
+ @parents = []
29
+ end
30
+
31
+ def self.for_name(name)
32
+ @instances ||= {}
33
+
34
+ @instances[name] = IORegClass.new name unless @instances.key? name
35
+
36
+ @instances[name]
37
+ end
38
+
39
+ def self.values
40
+ @instances.values.sort_by(&:name)
41
+ end
42
+
43
+ def self.load_one(hash)
44
+ instance = for_name hash['name']
45
+ instance.description = hash['description']
46
+ instance.parents = hash['parents']
47
+ instance.known_names = (hash['known_names'] || []).sort
48
+ end
49
+
50
+ def to_h
51
+ { 'name' => @name, 'description' => @description, 'parents' => @parents, 'known_names' => @known_names }
52
+ end
53
+
54
+ def user_client?
55
+ @parents.include? 'IOUserClient'
56
+ end
57
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'zip'
4
+ require 'cfpropertylist'
5
+
6
+ # Represents an IPSW on disk and provides helper access
7
+ class IPSW
8
+ def initialize(path)
9
+ @path = path
10
+ @zip = Zip::File.open(@path)
11
+ @manifest = CFPropertyList.guess(@zip.get_entry('BuildManifest.plist').get_input_stream.read)
12
+ end
13
+
14
+ def baseband_files
15
+ result = []
16
+ @manifest['BuildIdentities'].each do |identity|
17
+ identity['Manifest'].each do |key, value|
18
+ result << value if key == 'BasebandFirmware'
19
+ end
20
+ end
21
+ result
22
+ end
23
+
24
+ def img4_files; end
25
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AppleData
4
+ # Represents a GID grouping of encrypted and decrypted keybags
5
+ class GIDKeyBag < DataFile
6
+ @keybags = {}
7
+ cattr_reader :keybags
8
+
9
+ class << self
10
+ def new(chip_id)
11
+ self.[](chip_id)
12
+ end
13
+
14
+ def save_all
15
+ @keybags.each do |_key, keybag|
16
+ keybag.save
17
+ end
18
+ end
19
+
20
+ def [](chip_id)
21
+ chip_id = chip_id.to_i
22
+ return @keybags[chip_id] if @keybags.key? chip_id
23
+
24
+ instance = allocate
25
+ instance.send(:initialize, chip_id)
26
+ @keybags[chip_id] = instance
27
+ end
28
+ end
29
+
30
+ def initialize(chip_id)
31
+ super('keybags', chip_id.to_s)
32
+ end
33
+
34
+ def get_board(board_id)
35
+ board_id = board_id.to_i
36
+ BoardKeyBag.new self, board_id, collection(:keybag_boards).ensure_key(board_id, description: false)
37
+ end
38
+
39
+ # A keybag of builds for a particular build
40
+ class BoardKeyBag
41
+ def initialize(gid_keybag, board_id, board)
42
+ @keybag = gid_keybag
43
+ @board_id = board_id
44
+ @board = board
45
+ end
46
+
47
+ def merge_keydb_build(build_id, build)
48
+ return unless build['keybags']
49
+
50
+ @board[build_id] ||= {}
51
+ @board[build_id]['components'] ||= {}
52
+ @board[build_id]['components'].reverse_merge! build['keybags']
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,48 @@
1
+ # typed: true
2
+ # frozen_string_literal: true
3
+
4
+ # Schema file for the `lockdownd.yaml` file
5
+ class LockdownData < DataFile
6
+ def initialize
7
+ super 'lockdownd.yaml'
8
+ @data ||= {}
9
+ @data['clients'] ||= []
10
+ @data['domains'] ||= []
11
+ end
12
+
13
+ def ensure_client(client)
14
+ @data['clients'] << client unless @data['clients'].include? client
15
+ end
16
+
17
+ def ensure_domain_has_property(domain, property, _type = nil)
18
+ domain_instance = get_domain domain
19
+
20
+ return unless property
21
+
22
+ domain_instance['properties'] << property unless domain_instance['properties'].include? property
23
+ end
24
+
25
+ def get_domain(domain)
26
+ result = @data['domains'].find { |d| d['name'] == domain }
27
+ unless result
28
+ result = {}
29
+ result['name'] = domain
30
+ @data['domains'] << result
31
+ end
32
+ result['description'] ||= nil
33
+ result['properties'] ||= []
34
+ result
35
+ end
36
+
37
+ def data
38
+ @data['clients'].sort!
39
+
40
+ @data['domains'].each do |domain|
41
+ domain['properties'].sort!
42
+ end
43
+
44
+ @data['domains'].sort_by! { |d| d['name'] }
45
+
46
+ @data
47
+ end
48
+ end
@@ -0,0 +1,5 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ class MachoData < DataFile
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module AppleData
4
+ VERSION = '1.0.1'
5
+ end
data/lib/apple_data.rb ADDED
@@ -0,0 +1,8 @@
1
+ # typed: strict
2
+ # frozen_string_literal: true
3
+
4
+ require 'apple-data/boot_args'
5
+ require 'apple-data/fdr'
6
+ require 'apple-data/ioreg'
7
+ require 'apple-data/macho'
8
+ require 'apple-data/lockdown'