comparison doc/Compal-unlock @ 987:7a55a3eb985a

doc: Compal-unlock and TFC139-breakin articles updated for the new tfc139 tool
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Sat, 12 Dec 2015 08:24:08 +0000
parents 3f67d5bf96ef
children 0654212e5c53
comparison
equal deleted inserted replaced
986:65418b391513 987:7a55a3eb985a
38 provision for interrupting the boot process and diverting it to an externally- 38 provision for interrupting the boot process and diverting it to an externally-
39 supplied piece of code loaded over the serial line. Older fw versions have 39 supplied piece of code loaded over the serial line. Older fw versions have
40 this feature enabled unconditionally, but some of the newer versions have a 40 this feature enabled unconditionally, but some of the newer versions have a
41 malfeature whereby the serial boot interrupt and code download possibility may 41 malfeature whereby the serial boot interrupt and code download possibility may
42 be disabled. Some C1xx phones out in the wild, particularly all North American 42 be disabled. Some C1xx phones out in the wild, particularly all North American
43 C139s with TracFone branding, have such maliciously-locked firmware in them. 43 C139s with TracFone branding and some of the Cingular-branded ones as well,
44 44 have such maliciously-locked firmware in them.
45 Fortunately though, these maliciously-locked firmwares (or at least the most 45
46 common TFC139 one) have been found to have another hole through which we can 46 Fortunately though, these maliciously-locked firmwares (or at least all versions
47 break in, as described in the TFC139-breakin article. We can exploit this hole 47 we've encountered so far) have been found to have another hole through which we
48 in the TFC139 firmware to gain code execution access to the Calypso, and then 48 can break in, as described in the TFC139-breakin article. We can exploit this
49 use the latter to reprogram the flash, replacing the ultra-malicious firmware 49 hole in the firmware to gain code execution access to the Calypso, and then use
50 with some other version that, although still proprietary, is a little less evil. 50 the latter to reprogram the flash, replacing the ultra-malicious firmware with
51 some other version that, although still proprietary, is a little less evil.
51 52
52 Making first contact 53 Making first contact
53 ==================== 54 ====================
54 55
55 If you have a C1xx phone which you are seeking to free, your first step should 56 If you have a C1xx phone which you are seeking to free, your first step should
109 jack. Because Mot/Compal's firmware is based on TI's reference architecture, 110 jack. Because Mot/Compal's firmware is based on TI's reference architecture,
110 the interface presented by the running fw on this serial port is TI's RVTMUX, 111 the interface presented by the running fw on this serial port is TI's RVTMUX,
111 albeit at 57600 baud instead of TI's default of 115200. 112 albeit at 57600 baud instead of TI's default of 115200.
112 113
113 4. Connect the headset jack serial cable if it wasn't already connected, and 114 4. Connect the headset jack serial cable if it wasn't already connected, and
114 run this FreeCalypso hack-utility: 115 run this FreeCalypso utility:
115 116
116 tfc139 /dev/ttyXXX 117 tfc139 /dev/ttyXXX
117 118
119 (The name tfc139 is historical; the current version is expected to work with
120 all Mot C1xx firmwares.)
121
118 Compal's TI-based firmware implements some of TI's Test Mode commands, and one 122 Compal's TI-based firmware implements some of TI's Test Mode commands, and one
119 of these commands is a raw memory write. Our tfc139 hack-utility will try to 123 of these commands is a raw memory write. It also implements some of TI's GPF
120 break into the phone (gain code execution access) by using this Test Mode 124 "system primitive" commands, including the MEMCHECK command that causes the
121 command to write a little payload into a particular RAM location (beginning of 125 firmware to report some info on all running GPF tasks, including the location
122 IRAM), and then doing more memory writes by the same method, seeking to smash 126 of each task's stack. Our tfc139 utility will try to break into the phone
123 the stack and cause control to be transferred to the sent payload by 127 (gain code execution access) by querying the target fw for the location of the
124 overwriting a function return address on the stack. 128 L1A task's stack, and then using Test Mode memory write commands to write a
125 129 piece of shellcode into an unused RAM location and to make this code execute by
126 If the stack smashing hack succeeds, the code injected by tfc139 will send a 130 overwriting a function return address on the stack of the L1A task that
127 message out the serial port indicating this success, and then re-enable the 131 processes these Test Mode commands.
132
133 If the stack smashing hack succeeds, the shellcode injected by tfc139 will send
134 a message out the serial port indicating this success, and then re-enable the
128 Calypso boot ROM and jump to it. Once the boot ROM code gains control, it will 135 Calypso boot ROM and jump to it. Once the boot ROM code gains control, it will
129 wait forever for a serial code download following its standard protocol. If 136 wait forever for a serial code download following its standard protocol. If
130 tfc139 gets the success indication from the target, it will announce this 137 tfc139 gets the success indication from the target, it will announce this
131 success and direct you to run: 138 success and direct you to run:
132 139
135 Do as it says. The -c none option tells fc-loadtool to skip compalstage and 142 Do as it says. The -c none option tells fc-loadtool to skip compalstage and
136 proceed directly to feeding loadagent to the Calypso boot ROM. You should now 143 proceed directly to feeding loadagent to the Calypso boot ROM. You should now
137 be in full control of the phone via fc-loadtool. 144 be in full control of the phone via fc-loadtool.
138 145
139 There is one additional quirk worth mentioning. It appears that Mot/Compal's 146 There is one additional quirk worth mentioning. It appears that Mot/Compal's
140 main fw (at least TF's version 8.8.17, which is the version we break into with 147 main fw keeps resetting the RTC alarm registers in the Calypso DBB as it runs,
141 tfc139; other versions are anyone's guess) keeps resetting the RTC alarm 148 always keeping the alarm time in the near future relative to the current time.
142 registers in the Calypso DBB as it runs, always keeping the alarm time in the 149 When one breaks into this firmware with tfc139 and takes over the control of
143 near future relative to the current time. When one breaks into this firmware 150 the device with fc-loadtool, this alarm time will almost certainly be reached,
144 with tfc139 and takes over the control of the device with fc-loadtool, this 151 and the RTC alarm will go off. This alarm has no effect on loadtool operation
145 alarm time will almost certainly be reached, and the RTC alarm will go off. 152 (i.e., it cannot reset the CPU or otherwise wrestle control away from loadtool,
146 This alarm has no effect on loadtool operation (i.e., it cannot reset the CPU 153 so it doesn't add any bricking risk), but it has one quite surprising effect
147 or otherwise wrestle control away from loadtool, so it doesn't add any bricking 154 upon exit, i.e., when you are done with your loadtool session and give it the
148 risk), but it has one quite surprising effect upon exit, i.e., when you are 155 exit command.
149 done with your loadtool session and give it the exit command.
150 156
151 Loadtool's configured default exit action for this target is to send a power-off 157 Loadtool's configured default exit action for this target is to send a power-off
152 command to the Iota ABB, leaving the device cleanly powered off. However, if 158 command to the Iota ABB, leaving the device cleanly powered off. However, if
153 the RTC alarm has gone off previously during the session, the ABB will instantly 159 the RTC alarm has gone off previously during the session, the ABB will instantly
154 power the phone back on, and put it through a new boot cycle. The firmware 160 power the phone back on, and put it through a new boot cycle. The firmware
155 (again, the only version this stuff can be tested on is the one that works with 161 handles this special form of boot rather oddly: it proceeds to the same end
156 tfc139) handles this special form of boot rather oddly: it proceeds to the same 162 state it would have reached via a normal power button hold-down boot (powered
157 end state it would have reached via a normal power button hold-down boot 163 on with the "Insert SIM" message on the LCD), but it reaches this state almost
158 (powered on with the "Insert SIM" message on the LCD), but it reaches this state 164 instantly, without going through the power-on LCD logo and buzz phase. Odd,
159 almost instantly, without going through the power-on LCD logo and buzz phase. 165 but harmless. This explanation has been included to save other hackers the
160 Odd, but harmless. This explanation has been included to save other hackers 166 hours of bewildered head-scratching I spent chasing this quirk down.
161 the hours of bewildered head-scratching I spent chasing this quirk down.
162 167
163 Dumping and reloading flash 168 Dumping and reloading flash
164 =========================== 169 ===========================
165 170
166 Once you break in with fc-loadtool (either through the bootloader or through 171 Once you break in with fc-loadtool (either through the bootloader or through
242 247
243 ftp.freecalypso.org:/pub/GSM/Compal/c139-unlocked-fw.zip 248 ftp.freecalypso.org:/pub/GSM/Compal/c139-unlocked-fw.zip
244 249
245 Unzip it, and you'll get c139-unlocked-fw.bin - that is the image you'll need 250 Unzip it, and you'll get c139-unlocked-fw.bin - that is the image you'll need
246 to flash into your phone. Get in with fc-loadtool (using tfc139 if necessary 251 to flash into your phone. Get in with fc-loadtool (using tfc139 if necessary
247 for locked-down Tracfones) and make a backup of the original flash content. 252 for bootloader-locked phones) and make a backup of the original flash content.
248 Then reflash the firmware as follows: 253 Then reflash the firmware as follows:
249 254
250 flash erase-program-boot c139-unlocked-fw.bin 2000 255 flash erase-program-boot c139-unlocked-fw.bin 2000
251 flash erase 10000 360000 256 flash erase 10000 360000
252 flash program-bin 2000 c139-unlocked-fw.bin 2000 257 flash program-bin 2000 c139-unlocked-fw.bin 2000