1. #!/bin/bash
  2. NXT=0
  3. echo "======================================================================"
  4. echo "= This script will root your Android phone with adb restore function ="
  5. echo "= Script by Bin4ry (thanks to Goroh_kun and tkymgr for the idea) ="
  6. echo "= Idea for Tablet S from Fi01_IS01 ="
  7. echo "= (18.12.2012) v17 ="
  8. echo "= ported to Linux by Kamistral (15.09.2012), ="
  9. echo "= updated by codeworkx (01.10.2012) ="
  10. echo "======================================================================"
  11. echo
  12. choice() {
  13. echo "Device type:"
  14. echo "1) Normal"
  15. echo "2) Special (for example: Sony Tablet S, Medion Lifetab)"
  16. echo "x) Unroot"
  17. echo "Make a choice: "
  18. read type
  19. case $type in
  20. 1*) echo "Normal mode enabled!"
  21. do_test
  22. ;;
  23. 2*) echo "Special mode enabled!"
  24. tabsmenu
  25. ;;
  26. x*) echo "Unroot mode"
  27. do_unroot
  28. ;;
  29. *) clear
  30. echo "Please enter a valid command (1, 2, x)"
  31. choice
  32. ;;
  33. esac
  34. }
  35. tabsmenu() {
  36. echo
  37. echo "Special mode:"
  38. echo "1) Root"
  39. echo "2) Rollback"
  40. echo "Make a choice:"
  41. read reply
  42. case $reply in
  43. 1*) do_root
  44. ;;
  45. 2*) tablets_rollback
  46. ;;
  47. *) clear
  48. echo "Please enter a valid number (1 or 2)"
  49. tabsmenu
  50. ;;
  51. esac
  52. }
  53. do_test() {
  54. RIC=0
  55. echo "Checking if i should run in Normal Mode or special Sony Mode"
  56. echo "Please connect device with ADB-Debugging enabled now ..."
  57. adb wait-for-device
  58. mkdir -p tmp
  59. adb pull /system/bin/ric tmp/ric
  60. if [ -e tmp/ric ]; then
  61. echo "Found RIC-Daemon"
  62. echo
  63. RIC=1
  64. rm tmp/ric
  65. do_root
  66. fi
  67. adb pull /system/app/Backup-Restore.apk tmp/Backup-Restore.apk
  68. if [ -e tmp/Backup-Restore.apk ]; then
  69. echo "Found Sony Backup-Restore.apk"
  70. echo "LT26,LT22 etc. mode enabled!"
  71. echo
  72. rm tmp/Backup-Restore.apk
  73. NXT=1
  74. do_root
  75. else
  76. echo "Normal Mode enabled!"
  77. do_root
  78. fi
  79. }
  80. do_root() {
  81. echo "Please connect device with ADB-Debugging enabled now ..."
  82. adb wait-for-device
  83. if [ "$type" == "2" ]; then
  84. tabtrick
  85. else
  86. echo "Pushing busybox ..."
  87. adb push stuff/busybox /data/local/tmp/.
  88. echo "Pushing su binary ..."
  89. adb push stuff/su /data/local/tmp/.
  90. echo "Pushing Superuser app"
  91. adb push stuff/Superuser.apk /data/local/tmp/.
  92. echo "Pushing ric"
  93. adb push stuff/ric /data/local/tmp/ric
  94. echo "Making busybox runable ..."
  95. adb shell chmod 755 /data/local/tmp/busybox
  96. if [ "$RIC" == "1" ]; then
  97. adb push stuff/ric /data/local/tmp/ric
  98. fi
  99. if [ "$NXT" == "1" ]; then
  100. xpstrick
  101. else
  102. adb restore stuff/fakebackup.ab
  103. echo "Please look at your device and click RESTORE!"
  104. echo "If all is successful i will tell you, if not this shell will run forever."
  105. echo "Running ..."
  106. adb shell "while ! ln -s /data/local.prop /data/data/com.android.settings/a/file99; do :; done" > /dev/null
  107. echo "Successful, going to reboot your device in 10 seconds!"
  108. ping -c 10 127.0.0.1 > /dev/null
  109. adb reboot
  110. echo "Waiting for device to show up again ..."
  111. ping -c 10 127.0.0.1 > /dev/null
  112. adb wait-for-device
  113. do_copy
  114. fi
  115. fi
  116. }
  117. do_unroot() {
  118. echo "Really? (y/n)"
  119. read reply
  120. case $reply in
  121. y*)
  122. adb push stuff/busybox /data/local/tmp/busybox
  123. adb shell "chmod 755 /data/local/tmp/busybox"
  124. adb shell "su -c '/data/local/tmp/busybox mount -o remount,rw /system'"
  125. adb shell "su -c 'rm /system/xbin/su'"
  126. adb shell "su -c 'rm /system/app/Superuser.apk'"
  127. exit 0
  128. ;;
  129. n*)
  130. clear
  131. choice
  132. ;;
  133. *)
  134. clear
  135. do_unroot
  136. ;;
  137. esac
  138. }
  139. do_copy() {
  140. echo "Copying files to it's place ..."
  141. if [ "$RIC" == "1" ]; then
  142. adb shell "/data/local/tmp/busybox mount -o remount,rw /system && /data/local/tmp/busybox mv /data/local/tmp/su /system/xbin/su && /data/local/tmp/busybox mv /data/local/tmp/Superuser.apk /system/app/Superuser.apk && /data/local/tmp/busybox cp /data/local/tmp/busybox /system/xbin/busybox && chown 0.0 /system/xbin/su && chmod 06755 /system/xbin/su && chmod 655 /system/app/Superuser.apk && chmod 755 /system/xbin/busybox && rm /data/local.prop && reboot"
  143. else
  144. adb shell "/data/local/tmp/busybox mount -o remount,rw /system && /data/local/tmp/busybox mv /data/local/tmp/ric /system/bin/ric && chmod 755 /system/bin/ric && /data/local/tmp/busybox mv /data/local/tmp/su /system/xbin/su && /data/local/tmp/busybox mv /data/local/tmp/Superuser.apk /system/app/Superuser.apk && /data/local/tmp/busybox cp /data/local/tmp/busybox /system/xbin/busybox && chown 0.0 /system/xbin/su && chmod 06755 /system/xbin/su && chmod 655 /system/app/Superuser.apk && chmod 755 /system/xbin/busybox && rm /data/local.prop && reboot"
  145. fi
  146. }
  147. tabtrick() {
  148. adb install -s stuff/Term.apk
  149. adb push stuff/busybox /data/local/tmp/.
  150. adb push stuff/su /data/local/tmp/.
  151. adb push stuff/Superuser.apk /data/local/tmp/.
  152. adb push stuff/rootkittablet.tar.gz /data/local/tmp/rootkittablet.tar.gz
  153. adb shell "chmod 755 /data/local/tmp/busybox"
  154. adb shell "/data/local/tmp/busybox tar -C /data/local/tmp -x -v -f /data/local/tmp/rootkittablet.tar.gz"
  155. adb shell "chmod 644 /data/local/tmp/VpnFaker.apk"
  156. adb shell "touch -t 1346025600 /data/local/tmp/VpnFaker.apk"
  157. adb shell "chmod 755 /data/local/tmp/_su"
  158. adb shell "chmod 755 /data/local/tmp/su"
  159. adb shell "chmod 755 /data/local/tmp/onload.sh"
  160. adb shell "chmod 755 /data/local/tmp/onload2.sh"
  161. adb shell "rm -r /data/data/com.android.settings/a/*"
  162. adb restore stuff/tabletS.ab
  163. echo "Please look at your device and click \"Restore my data\""
  164. echo
  165. adb shell "while [ ! -d /data/data/com.android.settings/a/file99 ] ; do echo 1; done" > /dev/null
  166. ping -c 3 127.0.0.1 > /dev/null
  167. echo "1st RESTORE OK"
  168. read -p "Press [Enter] key to continue ..."
  169. adb shell "rm -r /data/data/com.android.settings/a"
  170. adb restore stuff/tabletS.ab
  171. echo "Please look at your device and click \"Restore my data\""
  172. echo
  173. adb shell "while : ; do ln -s /data /data/data/com.android.settings/a/file99; [ -f /data/file99 ] && exit; done" > /dev/null
  174. adb shell "rm -r /data/file99"
  175. ping -c 3 127.0.0.1 > /dev/null
  176. echo "Achieved!"
  177. read -p "Press [Enter] key to continue ..."
  178. adb shell "/data/local/tmp/busybox cp -r /data/system /data/system2"
  179. adb shell "/data/local/tmp/busybox find /data/system2 -type f -exec chmod 666 {} \;"
  180. adb shell "/data/local/tmp/busybox find /data/system2 -type d -exec chmod 777 {} \;"
  181. adb shell "mv /data/system /data/system-"
  182. adb shell "mv /data/system2 /data/system"
  183. adb shell "mv /data/app /data/app-"
  184. adb shell "mkdir /data/app"
  185. adb shell "mv /data/local/tmp/VpnFaker.apk /data/app"
  186. adb shell "/data/local/tmp/busybox sed -f /data/local/tmp/packages.xml.sed /data/system-/packages.xml > /data/system/packages.xml"
  187. adb shell "sync; sync; sync"
  188. echo "Need to reboot now!"
  189. adb reboot
  190. ping -c 3 127.0.0.1 > /dev/null
  191. echo "Waiting for device to come up again ..."
  192. adb wait-for-device
  193. echo "Unlock your device, a Terminal will show now, type this 2 lines, after each line press ENTER"
  194. echo /data/local/tmp/onload.sh
  195. echo /data/local/tmp/onload2.sh
  196. echo "after this is done press a key here in this shell to continue!"
  197. echo "If the shell on your device does not show please re-start the process!"
  198. adb shell "am start -n com.android.vpndialogs/.Term"
  199. read -p "Press [Enter] key to continue ..."
  200. # tabtrick1
  201. adb push stuff/script1.sh /data/local/tmp/.
  202. adb shell "chmod 755 /data/local/tmp/script1.sh"
  203. adb shell "/data/local/tmp/script1.sh"
  204. echo "Almost complete! Reboot and cleanup."
  205. adb reboot
  206. ping -c 3 127.0.0.1 > /dev/null
  207. echo "Waiting for device to come up again ..."
  208. adb wait-for-device
  209. adb shell "su -c 'rm -r /data/app2'"
  210. adb shell "su -c 'rm -r /data/system2'"
  211. adb shell "su -c 'rm -r /data/local/tmp/*'"
  212. }
  213. tablets_rollback() {
  214. echo
  215. echo "Tablet S Rollback"
  216. echo
  217. echo "Please connect device with ADB-Debugging enabled now ..."
  218. adb wait-for-device
  219. adb shell "if [ -d /data/app- ]; then echo 1 ; else echo 0 ; fi" > reply
  220. if [ "$reply" == "1" ]; then
  221. adb shell "rm -r /data/data/com.android.settings/a/*"
  222. adb restore stuff/tabletS.ab
  223. echo Please look at your device and click "Restore my data"
  224. echo.
  225. adb shell "while [ ! -d /data/data/com.android.settings/a/file99 ] ; do echo 1; done" > /dev/null
  226. echo "1st RESTORE OK"
  227. read -p "Press [Enter] key to continue ..."
  228. adb shell "rm -r /data/data/com.android.settings/a"
  229. adb restore stuff/tabletS.ab
  230. echo Please look at your device and click "Restore my data"
  231. echo.
  232. adb shell "while : ; do ln -s /data /data/data/com.android.settings/a/file99; [ -f /data/file99 ] && exit; done" > /dev/null
  233. adb shell "rm -r /data/file99"
  234. echo "Achieved!"
  235. read -p "Press [Enter] key to continue ..."
  236. adb shell "mv /data/system /data/system3"
  237. adb shell "mv /data/system- /data/system"
  238. adb shell "mv /data/app /data/app3"
  239. adb shell "mv /data/app- /data/app"
  240. echo "Rollback compelted."
  241. else
  242. echo "Rollback failed."
  243. exit 1
  244. fi
  245. }
  246. xpstrick() {
  247. NXT=0
  248. echo "Pushing fake Backup"
  249. adb push stuff/RootMe.tar /data/local/tmp/RootMe.tar
  250. adb shell "mkdir /mnt/sdcard/.semc-fullbackup > /dev/null 2>&1"
  251. echo "Extracting fakebackup on device ..."
  252. adb shell "cd /mnt/sdcard/.semc-fullbackup/; /data/local/tmp/busybox tar xf /data/local/tmp/RootMe.tar"
  253. echo "Watch now your device. Select the backup named RootMe and restore it!"
  254. adb shell "am start com.sonyericsson.vendor.backuprestore/.ui.BackupActivity"
  255. echo "If all is successful i will tell you, if not this shell will run forever."
  256. echo "Running ..."
  257. adb shell "while ! ln -s /data/local.prop /data/data/com.android.settings/a/file99; do :; done" > /dev/null
  258. echo
  259. echo "Good, it worked! Now we are rebooting soon, please be patient!"
  260. ping -c 3 127.0.0.1 > /dev/null
  261. adb shell "rm -r /mnt/sdcard/.semc-fullbackup/RootMe"
  262. adb reboot
  263. ping -c 10 127.0.0.1 > /dev/null
  264. echo "Waiting for device to come up again ..."
  265. adb wait-for-device
  266. do_copy
  267. }
  268. # Main
  269. choice
  270. echo "You can close all open command-prompts now!"
  271. echo "After reboot all is done! Have fun!"
  272. echo "Bin4ry"
  273. read -p "Press key to exit ..."
  274. exit 0