apple-data 0.1.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
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'