所謂系統程序就是system/app目錄中的程序,普通應用轉換成系統程序後有穩定、減小內存(DATA)空間佔用、恢復出廠設置後不會消失、修改系統時間、調用隱藏方法、系統關機重啓、靜默安裝升級卸載應用等等等等優勢,想知道怎麼操做?接下來咱們介紹三種方法。html
參考:android 將本身的應用改成系統應用java
一、把apk文件移動到system/app目錄,
二、.so文件移動到system/lib目錄。
三、修改相應的權限linux
1. 將你的手機數據線,插上,把你的設備設置爲容許usb調試
2. 打開命令終端cmd
3. 輸入命令 adb shell
4. 肯定能進入系統android
5. 輸入命令 mount
git
6. 由於system默認是隻讀文件夾,因此根據上面的提示輸入下面命令,使其變爲可讀寫
mount -o remount /dev/block/nandd /system (圖)github
再出輸入 mount
查看system和上面的不同了,說明正確算法
7. 輸入 exit
退出android系統終端shell
8. 解壓你的apk文件,進入查看lib/armeabi文件夾下有沒有 .so文件,若是沒有這種庫文件的話,直接跳到第10步,(由於有些apk文件是要調用動態連接庫的,你不拷貝的話,就沒有辦法運行!會報錯)若是有的話, 將這些*.so文件都拷貝到/system/lib文件夾下:segmentfault
命令:adb push libiReader_txtparser.so system/lib
windows
九、拷貝完了以後呢,要給這些庫文件添加權限,看看別的庫文件權限是幾
chmod 644 xxxxx.so
10. 將你的apk文件拷貝進入/system/app(該文件夾裏存放着因此係統級別的apk),圖中我是將iReader.apk拷貝過去的
11. 再次進入android終端 adb shell
12. 進入system/app文件夾 cd system/app
13. 查看其餘apk的權限 ll
能看出區別
14. 修改iReader.apk權限使其和其餘的同樣 chmod 644 iReader.apk
15. 搞定這些以後,重啓設備 reboot
16. 看看系統裏面是否是安裝好了該應用,點擊一下,看是否正常運行,能夠的話,再檢測是否沒法卸載!
RE管理器轉換和LINK2SD均可以實現,任選其一便可
一、首先咱們把須要轉換的程序在電腦上用壓縮軟件打開 ,看有沒有lib這個目錄。若是有,再把lib目錄打開,直到出現以.so結尾的文件,把文件都拖出來備用。
二、把須要轉換的應用(apk文件)連同剛拖出的.so文件(若是有),放到手機內存卡,
三、用RE管理器複製到system目錄,把權限更改如圖,
四、把更改權限後的apk文件移動到system/app目錄,.so文件移動到system/lib目錄。
五、完成後重啓手機,應用就轉換成系統程序了。
若是感受以上方法麻煩,也可藉助工具來操做,LINK2SD、鈦備份等軟件均可以把普通程序轉換爲系統程序,以LINK2SD爲例,打開LINK2SD,找到須要軟件的程序,點擊,再點操做,選擇轉換系統應用,接着會有個確認窗口,確認後,重啓手機程序就轉換好了。
參考:
android之使用signapk打包成系統應用,獲取系統權限
使用platform密鑰來給apk文件簽名的命令
Android安全開發之通用簽名風險
關於android:sharedUserId=」android.uid.system」這個系統級權限
安裝APK 時, 提示」 共享用戶權限不完整」 , 不能安裝成功, 如何解決?
https://github.com/android/platform_build/tree/master/target/product/security
爲了更好地理解下面介紹的兩種方法的原理,先來學習幾個概念:
Android系統要求安裝的應用必須用數字證書進行簽名後才能安裝,而且簽名證書的私鑰由應用開發者保存。簽名證書的生成也由開發者本身生成。在應用安裝時會校驗包名(package name)和簽名,若是系統中已經存在了一個相同的包名和簽名的應用,將會用新安裝的應用替換舊的;若是包名相同可是簽名不一樣,則會安裝失敗。
爲何須要數字簽名?
數字簽名是防止要保護的內容被篡改,用非對稱加密算法。先對要保護的內容進行消息摘要,用私鑰對消息摘要進行加密,生成數字簽名,將數字簽名和要保護的內容一塊兒分發出去。 內容接收者用公鑰對數字簽名解密獲得發送者給的消息摘要A,內容接收者對接收到的內容進行用相同的消息摘要算法處理獲得消息摘要B,對比A和B是否相同,來斷定傳送的內容是否被篡改。 正常的APK文件是個ZIP壓縮文件,除了應用的可執行文件、資源文件,還包括這些可執行文件、資源文件的摘要信息,數字證書的公鑰信息等。而且經過這些簽名信息能夠肯定APP和其開發者的關係。
進行簽名須要的工具備哪些?
對apk進行簽名須要用到簽名證書和簽名工具。Android系統要求對APP進行簽名的數字證書能夠由開發者本身生成。簽名工具備jarsigner和signapk。jarsigner是Java自己自帶的一個工具,他也能夠對jar進行簽名的;而signapk是專門爲了Android應用程序apk進行簽名的工具。兩者的區別是:jarsigner工具簽名時使用的是keystore簽名文件,signapk工具簽名時使用的是pk8,x509.pem文件。
簽名後的文件都有哪些?
應用簽名完後在應用的META-INF目錄下會有三個文件:
CERT.RSA、CERT.SF和MANIFEST.MF。
MANIFEST.MF中保存了全部其餘文件的SHA1摘要並base64編碼後的值。
CERT.SF文件 是對MANIFEST.MF文件中的每項中的每行加上「rn」後,再次SHA1摘要並base64編碼後的值(這是爲了防止經過篡改文件和其在MANIFEST.MF中對應的SHA1摘要值來篡改APK,要對MANIFEST的內容再進行一次數字摘要)。
CERT.RSA 文件:包含了簽名證書的公鑰信息和發佈機構信息。
對安裝包的校驗過程在源碼的frameworks/base/core/java/android/content/pm/PackageParser.java類中能夠看到
什麼是通用簽名?
搭建好Android開發環境後(使用Eclipse或Android Studio),對APK簽名的默認密鑰存在debug.keystore文件中。在linux和Mac上debug.keystore文件位置是在~/.android路徑下,在windows目錄下文件位置是C:\user\用戶名.android路徑下。
除了debug.keystore外,在AOSP發佈的Android源碼中,還有如下幾個證書是公開的,任何人均可以獲取,在源碼的build/target/product/security目錄中:
這幾個證書的做用:
testkey
Generic default key for packages that do not otherwise specify a key.
platform
Test key for packages that are part of the core platform.
shared
Test key for things that are shared in the home/contacts process.
media
Test key for packages that are part of the media/download system.
verity
Test Key for verifiedboot system imagein Android Lollipop. Sign boot.img,sign verity metadata in system.img.
通用簽名風險:
(1)若是攻擊者的應用包名與目標應用相同,又使用了相同的密鑰對應用進行簽名,攻擊者的應用就能夠替換掉目標應用;
(2)另外目標應用的自定義權限android:protectionlevel爲「signature」或者「signatureOrSystem」時,保護就形同虛設;
(3)若是設備使用的是第三方ROM,而第三方ROM的系統也是用AOSP默認的簽名,那麼使用若是使用系統級簽名文件簽名過的應用,權限就獲得了提高。
下面着重介紹一個這個方法:
1. 加入android:sharedUserId=」android.uid.system」這個屬性。
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.jant.addview" android:sharedUserId="android.uid.system" > <application ...(省略若干代碼) </application> </manifest>
2. 使用本身的簽名文件,生成apk
3. 使用通用簽名來從新給apk文件簽名。
3.1 .準備好platform.pk八、platform.x509.pem和簽名工具signapk.jar(3個文件的下載地址),還有本身的apk,放在同一個文件夾下。
3.2 在cmd下進入到該文件夾後,使用以下命令:
3.3 回車後咱們的文件夾下已經多了一個new.apk文件了,這就將咱們的應用打包成系統應用
你也能夠在github中去下載,可是下載的是SignApk.java,須要進行一些處理,以下
1.1.進入\build\target\product\security,找到【platform.pk8】和【platform.x509.pem】系統密鑰。
1.2.進入\build\tools\signapk找到SignApk.java,運行 javac編譯成SignApk.class
1.3.執行命令java com.android.signapk.SignApk platform.x509.pem platform.pk8 input.apk output.apk
首先加入android:sharedUserId=」android.uid.system」這個屬性。經過Shared User id,擁有同一個User id的多個APK能夠配置成運行在同一個進程中。那麼把程序的UID配成android.uid.system,也就是要讓程序運行在系統進程中,也就是系統應用。
只是加入UID還不夠,若是這時候安裝APK的話發現沒法安裝,提示簽名不符,緣由是程序想要運行在系統進程中還要有目標系統的platform key,就是上面第二個方法提到的platform.pk8和platform.x509.pem兩個文件。用這兩個key簽名後apk才真正能夠放入系統進程中。第一個方法中加入LOCAL_CERTIFICATE := platform其實就是用這兩個key來簽名。
這也有一個問題,就是這樣生成的程序只有在原始的Android系統或者是本身編譯的系統中才能夠用,由於這樣的系統才能夠拿到platform.pk8和platform.x509.pem兩個文件。要是別家公司作的Android上連安裝都安裝不了。試試原始的Android中的key來簽名,程序在模擬器上運行OK,不過放到小米四上安裝uibl,以下圖,這樣也是保護了系統的安全。
最後還說下,這個android:sharedUserId屬性不僅能夠把apk放到系統進程中,也能夠配置多個APK運行在一個進程中,這樣能夠共享數據,應該會頗有用的。
你在Manifest.xml裏聲明使用了shareuserid 或者一些特殊permission,好比你shareuserid到uid.system,就必須使用系統platform簽名來籤你的apk,不然是不能安裝的,同理share到其餘用戶id或者其餘process上也是得用跟那個process運行的apk同樣的簽名
通常簽名確定是廠商私有的,你確定是沒辦法了,除非機器燒的是開發版本(eng)
查看應用的進程屬性,若是是system用戶組,說明已是系統應用。
from:https://blog.csdn.net/m0_37135879/article/details/81134472?tdsourcetag=s_pcqq_aiomsg