Difference between revisions of "PurpleRabbit"

From The iPhone Wiki
Jump to: navigation, search
(Added more details about the new Jobs.plist creation/editing features, will add more soon)
Line 4: Line 4:
 
| title = PurpleRabbit
 
| title = PurpleRabbit
 
| logo = [[File:PurpleRabbit Icon.png|118px]]
 
| logo = [[File:PurpleRabbit Icon.png|118px]]
  +
| screenshot = [[File:PurpleRabbit_main_screen.png|150px]]
  +
| caption = PurpleRabbit (61.40.4~301)
 
| collapsible =
 
| collapsible =
 
| author = Apple Inc.
 
| author = Apple Inc.
Line 16: Line 18:
 
| operating system = [[wikipedia:macOS|macOS]]
 
| operating system = [[wikipedia:macOS|macOS]]
 
| platform =
 
| platform =
| size =
+
| size = 34-4 3MB
 
| language = [[wikipedia:English language|English]]
 
| language = [[wikipedia:English language|English]]
 
| status =
 
| status =
| genre =
+
| genre = Firmware flasher
 
| license = [[wikipedia:Proprietary software|Closed source]]
 
| license = [[wikipedia:Proprietary software|Closed source]]
 
| website =
 
| website =
Line 28: Line 30:
 
The best example of this would be prototype iPhone 12 models. During the prototyping phase, there were many different models which had different capabilities and features. Some models supported 120Hz refresh rates while some didn't, etc. These models would all have a different model number depending on their features, therefore making it necessary to print out labels containing each prototype's model number, so that none of them get mixed up. Within the PurpleRabbit app, there is also a menu bar option that allows engineers to file a [[Radar]].
 
The best example of this would be prototype iPhone 12 models. During the prototyping phase, there were many different models which had different capabilities and features. Some models supported 120Hz refresh rates while some didn't, etc. These models would all have a different model number depending on their features, therefore making it necessary to print out labels containing each prototype's model number, so that none of them get mixed up. Within the PurpleRabbit app, there is also a menu bar option that allows engineers to file a [[Radar]].
   
By default the app will not launch correctly, and instead will throw an error saying "Failed to load Jobs.plist", which is actually nonexistent within the app's Application Support directory. As of version "61.40.4~301", this is no longer the case. If PurpleRabbit doesn't detect a Jobs.plist, it creates a blank one and continues to run. Another new feature is the ability to add/remove jobs from the Jobs.plist file. If you load an older version of PurpleRabbit after creating the file in the newest version, you'll be able to access the entire application. Unfortunately this doesn't reveal any features that weren't already discovered through reverse-engineering (see [[#Screenshot|Gallery]]) since job editing is not present in those versions.
+
By default the app will not launch correctly, and instead will throw an error saying "Failed to load Jobs.plist", which is actually nonexistent within the app's Application Support directory. As of version "61.40.4~301", this is no longer the case. If PurpleRabbit doesn't detect a Jobs.plist, it creates a blank one and continues to run. Another new feature is the ability to add/remove jobs from the Jobs.plist file. If you load an older version of PurpleRabbit after creating the file in the newest version, you'll be able to access the entire application. Unfortunately this doesn't reveal any features that weren't already discovered through reverse-engineering (see [[#Gallery|Gallery]]) since job editing is not present in those versions.
   
== Screenshot ==
+
== Job Editor ==
  +
The job editor is a feature that was added somewhere between PurpleRabbit v2.1 and v61.40.4~301. It allows you to create and edit the Jobs.plist file from within PurpleRabbit, as opposed to v2.1 where you would likely need one to get one (probably through [[AppleConnect (SSO)|AppleConnect]]) that was already set up for your use case.
  +
  +
=== Events ===
  +
There are 4 types of predefined events available in the job editor, as well as an option to create user-defined events. The 4 predetermined types are as follows:
  +
* '''When Device Connects'''
  +
* '''When Task Completes'''
  +
* '''When Task Fails'''
  +
* '''When PurpleRabbit Starts'''
  +
It is unclear how you would set what triggers a user-defined event as the only parameter shown when you select one is the event name.
  +
  +
=== Commands ===
  +
Commands are placed after an event and are run once the event triggers. A full list of all the commands that can be added is as follows: (names are written here exactly as they are written in the application and sorted to make looking through them easier)
  +
  +
'''Instant Pudding'''
  +
* ''Add Blob (Instant Pudding)''
  +
* ''Add Result (Instant Pudding)''
  +
* ''Add Serial Number (Instant Pudding)''
  +
* ''Add Station Attribute (Instant Pudding)''
  +
* ''Check SFC routing result (Instant Pudding)''
  +
* ''Done Commit (Instant Pudding)''
  +
* ''Start (Instant Pudding)''
  +
'''Diagnostics'''
  +
* ''Check Control Bit''
  +
* ''Pluckit''
  +
* ''Run Diags''
  +
* ''Run iCheck''
  +
* ''Test Module Response''
  +
'''NVRAM'''
  +
* ''Clear NVRAM Variable''
  +
* ''Set NVRAM Variable''
  +
'''Firmware/Software'''
  +
* ''Activate''
  +
* ''Install 2nd Party Application''
  +
* ''Install 3rd Party Application''
  +
* ''Load FDI (Factory Disk Image)''
  +
* ''Restore Device''
  +
* ''Scan For Bundles''
  +
'''Control/Timing'''
  +
* ''Delay''
  +
* ''Restart Device''
  +
* ''Run Script''
  +
* ''Wait For Task''
  +
* ''Wait to Reconnect''
  +
'''ShopFloor'''
  +
* ''ShopFloor - Add Record''
  +
* ''ShopFloor - Query Record''
  +
'''Other'''
  +
* ''Interpret''
  +
* ''Key Operation''
  +
* ''Log Parser - Search String''
  +
* ''Print Label''
  +
  +
== Command Errors ==
  +
Many commands that I have tested (such as ''Check Control Bit'') fail to run because "gh_station_info.json" cannot be found. It's possible that this file had to be distributed to each factory station in order to use PurpleRabbit. Instant Pudding-related commands fail with a null response. (For example, running ''Check SFC routing result (Instant Pudding)'' returns "IPAMIOK failed: (null)". This is likely because AmIOk and other Instant Pudding-related commands are only available on devices running internal firmware.)
  +
  +
== Gallery ==
 
<gallery>
 
<gallery>
File:PurpleRabbit01.png|PurpleRabbit Windows accessed through reverse engineering
+
File:PurpleRabbit01.png|PurpleRabbit v2.1 accessed through reverse engineering
  +
File:PurpleRabbit_test_fail.png|Device test failing in PurpleRabbit 61.40.4~301
  +
File:PurpleRabbit_job_editor.png|PurpleRabbit job editor will all events types added
  +
File:PurpleRabbit_command_list.png|List of commands that can be added to an event
 
</gallery>
 
</gallery>
   

Revision as of 23:35, 28 October 2021

This article discusses software internally used by Apple.

Acquiring a copy without Apple's consent is illegal and may result in being scammed.
Engaging in illegal activity is not condoned. This information is provided for educational purposes only.

PurpleRabbit
PurpleRabbit Icon.png
PurpleRabbit main screen.png
PurpleRabbit (61.40.4~301)
Original author(s) Apple Inc.
Developer(s) Apple Inc.
Stable release 61.40.4~301
(latest known version)
Operating system macOS
Size 34-4 3MB
Available in English
Type Firmware flasher
License Closed source

PurpleRabbit is an internal macOS app which can restore devices much like PurpleRestore and iOS Restore Tool, and can also print labels. This app seems to be to be used in factories, as the software uses files and libraries that are only found in factory machines. The app also has a label maker window, which allows workers to print out labels which have device information on them. These labels are then placed onto prototype devices and are used for identification, as there are usually many different type of prototypes of any given device that all perform differently or contain different features. The best example of this would be prototype iPhone 12 models. During the prototyping phase, there were many different models which had different capabilities and features. Some models supported 120Hz refresh rates while some didn't, etc. These models would all have a different model number depending on their features, therefore making it necessary to print out labels containing each prototype's model number, so that none of them get mixed up. Within the PurpleRabbit app, there is also a menu bar option that allows engineers to file a Radar.

By default the app will not launch correctly, and instead will throw an error saying "Failed to load Jobs.plist", which is actually nonexistent within the app's Application Support directory. As of version "61.40.4~301", this is no longer the case. If PurpleRabbit doesn't detect a Jobs.plist, it creates a blank one and continues to run. Another new feature is the ability to add/remove jobs from the Jobs.plist file. If you load an older version of PurpleRabbit after creating the file in the newest version, you'll be able to access the entire application. Unfortunately this doesn't reveal any features that weren't already discovered through reverse-engineering (see Gallery) since job editing is not present in those versions.

Job Editor

The job editor is a feature that was added somewhere between PurpleRabbit v2.1 and v61.40.4~301. It allows you to create and edit the Jobs.plist file from within PurpleRabbit, as opposed to v2.1 where you would likely need one to get one (probably through AppleConnect) that was already set up for your use case.

Events

There are 4 types of predefined events available in the job editor, as well as an option to create user-defined events. The 4 predetermined types are as follows:

  • When Device Connects
  • When Task Completes
  • When Task Fails
  • When PurpleRabbit Starts

It is unclear how you would set what triggers a user-defined event as the only parameter shown when you select one is the event name.

Commands

Commands are placed after an event and are run once the event triggers. A full list of all the commands that can be added is as follows: (names are written here exactly as they are written in the application and sorted to make looking through them easier)

Instant Pudding

  • Add Blob (Instant Pudding)
  • Add Result (Instant Pudding)
  • Add Serial Number (Instant Pudding)
  • Add Station Attribute (Instant Pudding)
  • Check SFC routing result (Instant Pudding)
  • Done Commit (Instant Pudding)
  • Start (Instant Pudding)

Diagnostics

  • Check Control Bit
  • Pluckit
  • Run Diags
  • Run iCheck
  • Test Module Response

NVRAM

  • Clear NVRAM Variable
  • Set NVRAM Variable

Firmware/Software

  • Activate
  • Install 2nd Party Application
  • Install 3rd Party Application
  • Load FDI (Factory Disk Image)
  • Restore Device
  • Scan For Bundles

Control/Timing

  • Delay
  • Restart Device
  • Run Script
  • Wait For Task
  • Wait to Reconnect

ShopFloor

  • ShopFloor - Add Record
  • ShopFloor - Query Record

Other

  • Interpret
  • Key Operation
  • Log Parser - Search String
  • Print Label

Command Errors

Many commands that I have tested (such as Check Control Bit) fail to run because "gh_station_info.json" cannot be found. It's possible that this file had to be distributed to each factory station in order to use PurpleRabbit. Instant Pudding-related commands fail with a null response. (For example, running Check SFC routing result (Instant Pudding) returns "IPAMIOK failed: (null)". This is likely because AmIOk and other Instant Pudding-related commands are only available on devices running internal firmware.)

Gallery

See Also