Figure 10- 1 Change of placeholder
- When you start to input message body, if the address only supports SMS, the “Send” button beside
the input box will be green; if it supports iMessage, the button will be blue.
- When you hit the “Send” button to send this message, if this is an SMS, the message bubble will be
green, otherwise it will be blue.
These 3 phenomena will appear one after another. Since the process of detecting iMessage
has already happened in the 1st phenomenon, it is enough to act as the cut-in point. We’ll focus
on the 1st phenomenon from now on.
After locating the cut-in point, let’s think together to concretize the phenomenon into a
reverse engineering idea.
What we can observe is visible on UI, i.e. the change from “Text Message” to “iMessage”.
As we’ve already known, visualizations on UI don’t come from nowhere but the data source,
hence by referring to visualizations, we can find the data source, i.e. placeholder, using Cycript.
Placeholder doesn’t come from nowhere but its data source either. The reason why
placeholder changes is that its data source (data source’s data source, and so on. Hereafter
referred to as the Nth data source) changes, like the following pseudo code presents:
id dataSource = ?;
id a = function(dataSource);
id b = function(a);
id c = function(b);
...
id z = function(y);
NSString *placeholder = function(z);
From the above snippet we can know that the original data source is dataSource, its change
in turn results in the change of placeholder. Well, what’s the original data source? In the 1st
phenomenon, our only input is the address, so the original data source is sure to be the address.