首先在這之前要先將Xcode專案轉成iOSOpenDev,這篇~
SpringBoard在開啟app的時候如果發現設定了管理者權限就會閃退,所以直接編譯過去的app正常來說會閃退,只要拿編譯出來的deb檔案在另外安裝就好了
先拿之前Xcode專案轉iOSOpenDev的專案來修改,一般正常情況下在iDevice上的user id和group id都是501
2015/11/28 增加這個會造成一些一鍵關閉所有app的tweak權限錯誤,讓springboard當機,就"別加setuid()和setgid()"。 如果要判斷權限的話,使用geteuid(),root權限傳回0,mobile傳回501。
接著要講一下要跑root權限的原理,首先要安裝在root的Applications資料夾底下(/Applications),只要打包成deb就好了,接著在執行app時,是SpringBoard執行在app資料夾底下的可執行文件,而這個可執行文件可以是普通的Script,所以我們可以用這個普通的Script去執行我們app真正的可執行文件來達到root權限,大概也很難懂所以直接來動手做
到這個位置Package->DEBIAN
在這邊可以新增四個檔案,「preinst」、「postinst」、「prerm」和「postrm」
看名字可以猜出功能,pre就是之前、post是之後、inst是安裝、rm是移除,這四個檔案就是可以在安裝前後或是移除前後執行的Script,這邊需要安裝後和移除前(當然也可以硬幹自己打包deb,可是根據之前經驗,很麻煩而且不一定會成功)
touch postinst chmod +x postinst touch prerm chmod +x prerm
因為是可執行文件,所以記得要chmod增加執行權限
新增完後這兩個檔案拉進Xcode專案對應的位置裡面
將以下貼到postinst,然後app名字要修改成自己app的名字
#!/bin/bash cd "/Applications/rootApp.app/" # process origin binary mv rootApp rootApp_ chown root.wheel rootApp_ chmod +s rootApp_ cont=`cat <<"EOF" #!/bin/bash dir=$(dirname "$0") exec "${dir}"/rootApp_ "$@" EOF ` # create new fake binary echo -e "$cont" > rootApp chown root.wheel rootApp chmod +x rootApp #如果需要安裝完讓cydia提示重新啟動springBoard declare -a cydia cydia=($CYDIA) if [[ $1 == install || $1 == upgrade ]]; then if [[ ${CYDIA+@} ]]; then eval "echo 'finish:restart' >&${cydia[0]}" fi fi exit
簡單簡單講一下這些指令的作用
1. 首先將原本可執行文件「rootApp」改名「rootApp_」
2. 將「rootApp_」權限改成root擁有,群組為wheel
3. 將「rootApp_」加上「s」的權限,讓權限可以保持(這個我不清楚,關鍵字suid、sgid)
4. 將「rootApp」內容改成執行「rootApp_」的Script
5. 將「rootApp」權限改成root擁有,群組為wheel
6. 將「rootApp」加上可執行權限「x」
當然這些步驟可以自己硬幹啦,不過我上面也講了很容易失敗就是了,還要小心.DS_Store檔案被包進去...
接著在prerm裡面新增
#!/bin/bash rm -f "/Applications/rootApp.app/rootApp_"
因為「rootApp_」是在安裝後被新增出來的,所以如果用一般移除的話這個檔案會被留下來
接著完成後要用「Product」->「Build For」->「Profiling」(Shift+Command+I),接著在兩個地方都會有打包好的deb檔案
1. iDevice上的「/var/root/iOSOpenDevPackages」
2. 專案底下的「Packages」
那既然iDevice上有就直接安裝吧省著用ssh(記得不能打開cydia),只要返回值是0就代表安裝完成了,不過安裝完後不一定會馬上出現,要respring
或者指令(以mobile使用者權限執行uicache指令):
su mobile -c /usr/bin/uicache
另外要確定的方法就是到「/Applications/你的app.app」下確認有沒有檔案
UID和GID都是0表示成功,要移除app要到cydia上移除
用iOSOpenDev真的方便很多,之前只能全部手動非常麻煩
這個專案的github: rootApp
參考
iOSOpenDev-root-app: 'https://github.com/kivlara/iOSOpenDev-root-app'
沒有留言:
張貼留言