Advertisement
Guest User

Untitled

a guest
Oct 20th, 2013
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.22 KB | None | 0 0
  1. #!/system/bin/sh
  2. # By Hashcode
  3. PATH=/sbin:/system/sbin:/system/bin:/system/xbin
  4.  
  5. RECOVERY_DIR=/system/etc/safestrap
  6. BBX=/sbin/bbx
  7. SS_CONFIG=/ss.config
  8. SS_CHECK_FILE=/.safestrapped
  9. CURRENT_SYS_DIR=/system
  10. CURRENT_USER_DIR=/data
  11. ALT_SYSTEM_MODE="0"
  12.  
  13. if [ ! -f "$SS_CHECK_FILE" ]; then
  14. # remount root as rw
  15. mount -o remount,rw rootfs
  16.  
  17. # don't do this processing again
  18. $RECOVERY_DIR/bbx touch $SS_CHECK_FILE
  19.  
  20. # need busybox / ss.config
  21. $RECOVERY_DIR/bbx cp $RECOVERY_DIR/bbx $BBX
  22. $RECOVERY_DIR/bbx chmod 755 $BBX
  23. $RECOVERY_DIR/bbx chown 0.2000 $BBX
  24.  
  25. $BBX cp $RECOVERY_DIR/ss.config $SS_CONFIG
  26. $BBX chmod 600 $SS_CONFIG
  27. $BBX chown 0.0 $SS_CONFIG
  28.  
  29. . /system/etc/safestrap/ss_function.sh
  30. readConfig
  31.  
  32. if [ "$DEBUG_MODE" = "1" ]; then
  33. dumpConfig
  34. fi
  35.  
  36. if [ "$CHARGER_MODE" != "1" ] && [ "$POWERUP_REASON" != "$POWERUP_REASON_CHARGER" ]; then
  37. # set backlight
  38. $BBX echo $BACKLIGHT_BRIGHTNESS_VALUE > $BACKLIGHT_BRIGHTNESS_PATH
  39.  
  40. # create SS loopdevs
  41. $BBX mknod -m600 /dev/block/loop-system b 7 99
  42. $BBX mknod -m600 /dev/block/loop-userdata b 7 98
  43. $BBX mknod -m600 /dev/block/loop-cache b 7 97
  44. $BBX mknod -m600 /dev/block/loop-boot b 7 96
  45.  
  46. # create safestrap mount point
  47. $BBX mkdir $SS_MNT
  48. $BBX chown 0.2000 $SS_MNT
  49. $BBX chmod 777 $SS_MNT
  50. $BBX mkdir $SYS2_MNT
  51. $BBX chown 0.2000 $SYS2_MNT
  52. $BBX chmod 777 $SYS2_MNT
  53. $BBX mkdir $USER2_MNT
  54. $BBX chown 0.2000 $USER2_MNT
  55. $BBX chmod 777 $USER2_MNT
  56.  
  57. # mount safestrap partition
  58. if [ "$SS_USE_DATAMEDIA" = "1" ]; then
  59. $BBX mkdir $DATAMEDIA_MNT
  60. $BBX chown 0.2000 $DATAMEDIA_MNT
  61. $BBX chmod 777 $DATAMEDIA_MNT
  62. $BBX mount -t $SS_FSTYPE $BLOCK_DIR/$SS_PART $DATAMEDIA_MNT
  63. $BBX mount $DATAMEDIA_MNT/media $SS_MNT
  64. else
  65. $BBX mount -t $SS_FSTYPE $BLOCK_DIR/$SS_PART $SS_MNT
  66. fi
  67.  
  68. if [ ! -d "$SS_DIR" ]; then
  69. $BBX mkdir -p $SS_DIR
  70. fi
  71. if [ ! -f "$SS_DIR/active_slot" ]; then
  72. $BBX echo "stock" > $SS_DIR/active_slot
  73. fi
  74. SLOT_LOC=$($BBX cat $SS_DIR/active_slot)
  75.  
  76. # check the boot mode from the recovery file
  77. if [ -f $SS_DIR/recovery_mode ]; then
  78. CHECK_BOOTMODE=$($BBX cat $SS_DIR/recovery_mode)
  79. fi
  80. # boot modes= ap-bp-bypass, bp-tools
  81. if [ "$BOOTMODE" = "$CHECK_BOOTMODE" ]; then
  82. ALT_SYSTEM_MODE="2"
  83. else
  84. if [ -f "$SS_DIR/$SLOT_LOC/system.img" ] && [ -f "$SS_DIR/$SLOT_LOC/userdata.img" ] && [ -f "$SS_DIR/$SLOT_LOC/cache.img" ]; then
  85. ALT_SYSTEM_MODE="1"
  86. fi
  87. fi
  88.  
  89. # check for .recovery_mode on current /data mount
  90. if [ "$ALT_SYSTEM_MODE" = "1" ]; then
  91. # setup loopback
  92. $BBX losetup $BLOCK_DIR/loop-userdata $SS_DIR/$SLOT_LOC/userdata.img
  93. $BBX mount -t $USERDATA_FSTYPE $BLOCK_DIR/loop-userdata $USER2_MNT
  94. CURRENT_USER_DIR=$USER2_MNT
  95. fi
  96.  
  97. if [ -f $CURRENT_USER_DIR/$SS_RECOVERY_FILE ]; then
  98. $BBX rm $CURRENT_USER_DIR/$SS_RECOVERY_FILE
  99. ALT_SYSTEM_MODE="2"
  100. fi
  101.  
  102. if [ "$CURRENT_USER_DIR" = "$USER2_MNT" ]; then
  103. $BBX umount $USER2_MNT
  104. $BBX losetup -d $BLOCK_DIR/loop-userdata
  105. fi
  106.  
  107. # turn on hard button backlight
  108. /sbin/bbx echo 200 > /sys/class/leds/button-backlight/brightness
  109.  
  110. if [ "$ALT_SYSTEM_MODE" = "2" ] || [ $($RECOVERY_DIR/safestrapmenu $ALT_SYSTEM_MODE 2>&1 >/cache/trace/ss.log ;echo $?) -eq 0 ]; then
  111. # turn off hard button backlight
  112. /sbin/bbx echo 0 > /sys/class/leds/button-backlight/brightness
  113.  
  114. # filesystem cleanup
  115. $BBX rm /d
  116. $BBX rm /etc
  117. $BBX rm -rf /mnt
  118. $BBX rm /sdcard
  119. $BBX rm /storage
  120. $BBX rm /vendor
  121. $BBX rm /tmp
  122. $BBX mkdir /tmp
  123. # move bins out of the way so they don't block
  124. $BBX mv /sbin/adbd /sbin/adbd.old
  125. $BBX mv /sbin/taskset /sbin/taskset.old
  126. $BBX mv /init /init.old
  127.  
  128. if [ -d "/sys/fs/selinux" ]; then
  129. fixSELinux
  130. fi
  131. $BBX rm /*
  132.  
  133. # extract recovery ramdisk
  134. cd /
  135. $BBX gzip -dc $RECOVERY_DIR/ramdisk-recovery.img | $BBX cpio -iu
  136. $BBX unzip -o $RECOVERY_DIR/2nd-init.zip -d /sbin
  137. $BBX chmod 750 /sbin/*
  138. $BBX sync
  139.  
  140. # unmount partitions
  141. $BBX umount -l /system
  142. $BBX umount $SS_MNT
  143. if [ "$SS_USE_DATAMEDIA" = "1" ]; then
  144. $BBX umount $DATAMEDIA_MNT
  145. fi
  146.  
  147. /sbin/hijack.killall
  148.  
  149. /sbin/taskset -p -c 0 1 > /dev/kmsg
  150. $BBX sync
  151. if [ "$DEBUG_MODE" = "1" ]; then
  152. logCurrentStatus
  153. fi
  154. /sbin/taskset -c 0 /sbin/2nd-init > /dev/kmsg
  155. exit
  156. fi
  157.  
  158. # turn off hard button backlight
  159. /sbin/bbx echo 0 > /sys/class/leds/button-backlight/brightness
  160.  
  161. # either way we mount virtual "system" or real "system" and check for:
  162. # 1. /system/etc/rootfs (2nd-init boot)
  163. # 2. /system/etc/kexec (kexec boot)
  164.  
  165. # if we're on a virtual system set it up and change CURRENT_SYS_DIR
  166. if [ "$ALT_SYSTEM_MODE" = "1" ]; then
  167. # setup loopback
  168. $BBX losetup $BLOCK_DIR/loop-system $SS_DIR/$SLOT_LOC/system.img
  169. $BBX mount -t $SYSTEM_FSTYPE $BLOCK_DIR/loop-system $SYS2_MNT
  170. CURRENT_SYS_DIR=$SYS2_MNT
  171. fi
  172.  
  173. if [ "$ALT_SYSTEM_MODE" = "1" ] || [ -d "$CURRENT_SYS_DIR/etc/rootfs" ] || [ -d "$CURRENT_SYS_DIR/etc/kexec" ]; then
  174. if [ -f "/sbin/taskset" ]; then
  175. $BBX mv /sbin/taskset /sbin/taskset.old
  176. fi
  177. $BBX unzip -o $RECOVERY_DIR/2nd-init.zip -d /sbin
  178. $BBX chmod 750 /sbin/*
  179.  
  180. # on virtual systems, check for hijacks, and remove
  181. if [ "$ALT_SYSTEM_MODE" = "1" ] && [ -f "$SYS2_MNT/$HIJACK_LOC/$HIJACK_BIN.bin" ]; then
  182. $BBX rm $CURRENT_SYS_DIR/$HIJACK_LOC/$HIJACK_BIN
  183. $BBX mv $CURRENT_SYS_DIR/$HIJACK_LOC/$HIJACK_BIN.bin $CURRENT_SYS_DIR/$HIJACK_LOC/$HIJACK_BIN
  184. $BBX chmod 755 $CURRENT_SYS_DIR/$HIJACK_LOC/$HIJACK_BIN
  185. $BBX chown 0.2000 $CURRENT_SYS_DIR/$HIJACK_LOC/$HIJACK_BIN
  186. fi
  187.  
  188. # check for kexec files
  189. if [ -d "$CURRENT_SYS_DIR/etc/kexec" ]; then
  190. $BBX cp $CURRENT_SYS_DIR/etc/kexec/* /
  191.  
  192. # if virtual system is mounted unmount it
  193. if [ "$ALT_SYSTEM_MODE" = "1" ]; then
  194. # cleanup loopback
  195. $BBX umount $SYS2_MNT
  196. $BBX losetup -d $BLOCK_DIR/loop-system
  197. fi
  198.  
  199. # unmount SS
  200. $BBX umount $SS_MNT
  201. if [ "$SS_USE_DATAMEDIA" = "1" ]; then
  202. $BBX umount $DATAMEDIA_MNT
  203. fi
  204. $BBX umount -l /system
  205.  
  206. /sbin/hijack.killall
  207.  
  208. cd /
  209. $BBX chmod 755 /kexec
  210. $BBX chown 0.2000 /kexec
  211. $BBX insmod /uart.ko
  212. $BBX insmod /arm_kexec.ko
  213. $BBX insmod /kexec.ko
  214. /kexec -l /kernel --devtree=/devtree --ramdisk=/ramdisk.img --command-line='androidboot.safestrap.romslot=$SLOT_LOC'
  215. $BBX sleep 1
  216. /kexec -e
  217. exit
  218. fi
  219.  
  220. # check for alt-system or rootfs files
  221. if [ "$ALT_SYSTEM_MODE" = "1" ] || [ -d "$CURRENT_SYS_DIR/etc/rootfs" ]; then
  222. # BEGIN CLEANUP TODO: this should really be a device independant cleanup file
  223. if [ -d "$RECOVERY_DIR/rootfs" ]; then
  224. if [ -f "$RECOVERY_DIR/rootfs/sbin/adbd" ]; then
  225. $BBX mv /sbin/adbd /sbin/adbd.old
  226. fi
  227. if [ -f "$RECOVERY_DIR/rootfs/init" ]; then
  228. $BBX mv /init /init.old
  229. fi
  230. $BBX cp -R $RECOVERY_DIR/rootfs/* /
  231. fi
  232.  
  233. if [ -d "/sys/fs/selinux" ]; then
  234. fixSELinux
  235. fi
  236.  
  237. # adjust stock init.rc file to include /sbin/fixboot.sh
  238. /sbin/bbx cat /init.rc | /sbin/bbx sed "s/on fs/on fs\nexec \/sbin\/fixboot.sh/" > /init.rc.new0
  239. /sbin/bbx cat /init.rc.new0 | /sbin/bbx sed "s/service sdcard \/system\/bin\/sdcard \/data\/media/service sdcard \/system\/bin\/sdcard \/datamedia\/media/" > /init.rc.new2
  240. /sbin/bbx mv /init.rc /init.rc.old
  241. /sbin/bbx mv /init.rc.new2 /init.rc
  242. /sbin/bbx rm /init.rc.new*
  243.  
  244. # adjust init.<hardware>.rc for where to mount /sdcard
  245. $BBX cat /init.qcom.rc | $BBX sed "s/service sdcard \/system\/bin\/sdcard \/data\/media/service sdcard \/system\/bin\/sdcard \/datamedia\/media/" > /init.qcom.rc.new0
  246. $BBX mv /init.qcom.rc.new0 /init.qcom.rc
  247.  
  248. if [ -f "$CURRENT_SYS_DIR/etc/rootfs/sbin/adbd" ]; then
  249. $BBX mv /sbin/adbd /sbin/adbd.old
  250. fi
  251. if [ -f "$CURRENT_SYS_DIR/etc/rootfs/init" ]; then
  252. $BBX mv /init /init.old
  253. fi
  254. $BBX cp -R $CURRENT_SYS_DIR/etc/rootfs/* /
  255.  
  256. # reset permissions
  257. $BBX chmod -R 755 /sbin/*
  258. $BBX chmod 755 /init
  259. $BBX chmod 755 /charger
  260. $BBX chmod 644 /default.prop
  261. $BBX chmod 755 /*.rc
  262. $BBX chmod 755 /*.sh
  263.  
  264. # if virtual system is mounted unmount it
  265. if [ "$ALT_SYSTEM_MODE" = "1" ]; then
  266. # cleanup loopback
  267. $BBX umount $SYS2_MNT
  268. $BBX losetup -d $BLOCK_DIR/loop-system
  269. fi
  270.  
  271. # unmount SS
  272. $BBX umount $SS_MNT
  273. if [ "$SS_USE_DATAMEDIA" = "1" ]; then
  274. $BBX umount $DATAMEDIA_MNT
  275. fi
  276.  
  277. # unmount old /system
  278. $BBX umount -l /system
  279.  
  280. /sbin/hijack.killall
  281.  
  282. # mount point / symlink cleanup
  283. $BBX rm /sdcard
  284. $BBX rm -rf /mnt
  285.  
  286. /sbin/taskset -p -c 0 1
  287. $BBX sync
  288. if [ "$DEBUG_MODE" = "1" ]; then
  289. logCurrentStatus
  290. fi
  291.  
  292. /sbin/taskset -c 0 /sbin/2nd-init > /dev/kmsg
  293. exit
  294. fi
  295. fi
  296.  
  297. if [ "$ALT_SYSTEM_MODE" = "1" ]; then
  298. # cleanup loopback
  299. $BBX umount $SYS2_MNT
  300. $BBX losetup -d $BLOCK_DIR/loop-system
  301. fi
  302.  
  303. # unmount safestrap partition
  304. $BBX umount $SS_MNT
  305. if [ "$SS_USE_DATAMEDIA" = "1" ]; then
  306. $BBX umount $DATAMEDIA_MNT
  307. fi
  308. fi
  309. fi
  310.  
  311. # Run current file like expected by the system
  312. $BBX echo "\nPassing through hijack: /system/$HIJACK_LOC/$HIJACK_BIN.bin $@\n" > /dev/kmsg
  313.  
  314. /system/bin/sh /system/$HIJACK_LOC/$HIJACK_BIN.bin "$@"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement