日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

【转】Android 将自己的应用改为系统应用

發(fā)布時間:2023/12/13 综合教程 77 生活家
生活随笔 收集整理的這篇文章主要介紹了 【转】Android 将自己的应用改为系统应用 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

所謂系統(tǒng)程序就是system/app目錄中的程序,普通應(yīng)用轉(zhuǎn)換成系統(tǒng)程序后有穩(wěn)定、減少內(nèi)存(DATA)空間占用、恢復(fù)出廠設(shè)置后不會消失、修改系統(tǒng)時間、調(diào)用隱藏方法、系統(tǒng)關(guān)機重啟、靜默安裝升級卸載應(yīng)用等等等等優(yōu)點,想知道怎么操作?接下來我們介紹三種方法。

第一種:使用ADB命令將app安裝在system/app目錄下

參考:android 將自己的應(yīng)用改為系統(tǒng)應(yīng)用

這種方法的原理就是:

1、把apk文件移動到system/app目錄,
2、.so文件移動到system/lib目錄。
3、修改相應(yīng)的權(quán)限

操作步驟:

1. 將你的手機數(shù)據(jù)線,插上,把你的設(shè)備設(shè)置為允許usb調(diào)試
2. 打開命令終端cmd
3. 輸入命令adb shell
4. 確定能進入系統(tǒng)

5. 輸入命令mount

6. 因為system默認(rèn)是只讀文件夾,所以根據(jù)上面的提示輸入下面命令,使其變?yōu)榭勺x寫
mount -o remount /dev/block/nandd /system(圖)

再出輸入mount查看system和上面的不一樣了,說明正確

7. 輸入exit退出android系統(tǒng)終端

8. 解壓你的apk文件,進入查看lib/armeabi文件夾下有沒有 .so文件,如果沒有這種庫文件的話,直接跳到第10步,(因為有些apk文件是要調(diào)用動態(tài)鏈接庫的,你不拷貝的話,就沒有辦法運行!會報錯)如果有的話, 將這些*.so文件都拷貝到/system/lib文件夾下:

命令:adb push libiReader_txtparser.so system/lib

9、拷貝完了之后呢,要給這些庫文件添加權(quán)限,看看別的庫文件權(quán)限是幾

chmod   644  xxxxx.so

1

1

10. 將你的apk文件拷貝進入/system/app(該文件夾里存放著所以系統(tǒng)級別的apk),圖中我是將iReader.apk拷貝過去的

11. 再次進入android終端adb shell
12. 進入system/app文件夾cd system/app
13. 查看其他apk的權(quán)限ll能看出區(qū)別

14. 修改iReader.apk權(quán)限使其和其他的一樣 chmod 644 iReader.apk

15. 搞定這些之后,重啟設(shè)備reboot
16. 看看系統(tǒng)里面是不是安裝好了該應(yīng)用,點擊一下,看是否正常運行,可以的話,再檢測是否無法卸載!

第二種:借助工具把app轉(zhuǎn)為系統(tǒng)應(yīng)用(原理和方法一一樣)

轉(zhuǎn)載:安卓進階教程:怎樣把應(yīng)用轉(zhuǎn)換成系統(tǒng)程序

RE管理器轉(zhuǎn)換和LINK2SD都可以實現(xiàn),任選其一即可

使用RE管理器轉(zhuǎn)換

1、首先我們把需要轉(zhuǎn)換的程序在電腦上用壓縮軟件打開 ,看有沒有l(wèi)ib這個目錄。如果有,再把lib目錄打開,直到出現(xiàn)以.so結(jié)尾的文件,把文件都拖出來備用。

2、把需要轉(zhuǎn)換的應(yīng)用(apk文件)連同剛拖出的.so文件(如果有),放到手機內(nèi)存卡,
3、用RE管理器復(fù)制到system目錄,把權(quán)限更改如圖,
4、把更改權(quán)限后的apk文件移動到system/app目錄,.so文件移動到system/lib目錄。
5、完成后重啟手機,應(yīng)用就轉(zhuǎn)換成系統(tǒng)程序了。

使用LINK2SD轉(zhuǎn)換

如果感覺以上方法麻煩,也可借助工具來操作,LINK2SD、鈦備份等軟件都可以把普通程序轉(zhuǎn)換為系統(tǒng)程序,以LINK2SD為例,打開LINK2SD,找到需要軟件的程序,點擊,再點操作,選擇轉(zhuǎn)換系統(tǒng)應(yīng)用,接著會有個確認(rèn)窗口,確認(rèn)后,重啟手機程序就轉(zhuǎn)換好了。

第三種:使用signapk打包成系統(tǒng)應(yīng)用

參考:
android之使用signapk打包成系統(tǒng)應(yīng)用,獲取系統(tǒng)權(quán)限
使用platform密鑰來給apk文件簽名的命令
Android安全開發(fā)之通用簽名風(fēng)險
關(guān)于android:sharedUserId=”android.uid.system”這個系統(tǒng)級權(quán)限
安裝APK 時, 提示” 共享用戶權(quán)限不完整” , 不能安裝成功, 如何解決?
https://github.com/android/platform_build/tree/master/target/product/security

為了更好地理解下面介紹的兩種方法的原理,先來學(xué)習(xí)幾個概念:

Android應(yīng)用簽名機制

Android系統(tǒng)要求安裝的應(yīng)用必須用數(shù)字證書進行簽名后才能安裝,并且簽名證書的私鑰由應(yīng)用開發(fā)者保存。簽名證書的生成也由開發(fā)者自己生成。在應(yīng)用安裝時會校驗包名(package name)和簽名,如果系統(tǒng)中已經(jīng)存在了一個相同的包名和簽名的應(yīng)用,將會用新安裝的應(yīng)用替換舊的;如果包名相同但是簽名不同,則會安裝失敗。

為什么需要數(shù)字簽名?

數(shù)字簽名是防止要保護的內(nèi)容被篡改,用非對稱加密算法。先對要保護的內(nèi)容進行消息摘要,用私鑰對消息摘要進行加密,生成數(shù)字簽名,將數(shù)字簽名和要保護的內(nèi)容一起分發(fā)出去。 內(nèi)容接收者用公鑰對數(shù)字簽名解密得到發(fā)送者給的消息摘要A,內(nèi)容接收者對接收到的內(nèi)容進行用相同的消息摘要算法處理得到消息摘要B,對比A和B是否相同,來判定傳送的內(nèi)容是否被篡改。 正常的APK文件是個ZIP壓縮文件,除了應(yīng)用的可執(zhí)行文件、資源文件,還包括這些可執(zhí)行文件、資源文件的摘要信息,數(shù)字證書的公鑰信息等。并且通過這些簽名信息可以確定APP和其開發(fā)者的關(guān)系。

進行簽名需要的工具有哪些?

對apk進行簽名需要用到簽名證書和簽名工具。Android系統(tǒng)要求對APP進行簽名的數(shù)字證書可以由開發(fā)者自己生成。簽名工具有jarsigner和signapk。jarsigner是Java本身自帶的一個工具,他也可以對jar進行簽名的;而signapk是專門為了Android應(yīng)用程序apk進行簽名的工具。二者的區(qū)別是:jarsigner工具簽名時使用的是keystore簽名文件,signapk工具簽名時使用的是pk8,x509.pem文件。

簽名后的文件都有哪些?

應(yīng)用簽名完后在應(yīng)用的META-INF目錄下會有三個文件:

CERT.RSA、CERT.SF和MANIFEST.MF。

MANIFEST.MF中保存了所有其他文件的SHA1摘要并base64編碼后的值。

CERT.SF文件 是對MANIFEST.MF文件中的每項中的每行加上“rn”后,再次SHA1摘要并base64編碼后的值(這是為了防止通過篡改文件和其在MANIFEST.MF中對應(yīng)的SHA1摘要值來篡改APK,要對MANIFEST的內(nèi)容再進行一次數(shù)字摘要)。

CERT.RSA文件:包含了簽名證書的公鑰信息和發(fā)布機構(gòu)信息。

對安裝包的校驗過程在源碼的frameworks/base/core/java/android/content/pm/PackageParser.java類中可以看到

什么是通用簽名?

搭建好Android開發(fā)環(huán)境后(使用Eclipse或Android Studio),對APK簽名的默認(rèn)密鑰存在debug.keystore文件中。在linux和Mac上debug.keystore文件位置是在~/.android路徑下,在windows目錄下文件位置是C:user用戶名.android路徑下。

除了debug.keystore外,在AOSP發(fā)布的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.

通用簽名風(fēng)險:

(1)如果攻擊者的應(yīng)用包名與目標(biāo)應(yīng)用相同,又使用了相同的密鑰對應(yīng)用進行簽名,攻擊者的應(yīng)用就可以替換掉目標(biāo)應(yīng)用;

(2)另外目標(biāo)應(yīng)用的自定義權(quán)限android:protectionlevel為“signature”或者“signatureOrSystem”時,保護就形同虛設(shè);

(3)如果設(shè)備使用的是第三方ROM,而第三方ROM的系統(tǒng)也是用AOSP默認(rèn)的簽名,那么使用如果使用系統(tǒng)級簽名文件簽名過的應(yīng)用,權(quán)限就得到了提升。

具體的實現(xiàn)方法:

第一種是需要在Android系統(tǒng)源碼的環(huán)境下用make來編譯:

在應(yīng)用程序的AndroidManifest.xml中的manifest節(jié)點中加入android:sharedUserId=”android.uid.system”這個屬性。
修改Android.mk文件,加入LOCAL_CERTIFICATE := platform這一行
使用mm命令來編譯,生成的apk就有修改系統(tǒng)時間的權(quán)限了。

第二種:

下面著重介紹一個這個方法:

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 .準(zhǔn)備好platform.pk8、platform.x509.pem和簽名工具signapk.jar(3個文件的下載地址),還有自己的apk,放在同一個文件夾下。

3.2 在cmd下進入到該文件夾后,使用如下命令:

3.3 回車后我們的文件夾下已經(jīng)多了一個new.apk文件了,這就將我們的應(yīng)用打包成系統(tǒng)應(yīng)用


你也可以在github中去下載,但是下載的是SignApk.java,需要進行一些處理,如下

1.1.進入uild argetproductsecurity,找到【platform.pk8】和【platform.x509.pem】系統(tǒng)密鑰。
1.2.進入uild oolssignapk找到SignApk.java,運行 javac編譯成SignApk.class
1.3.執(zhí)行命令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,也就是要讓程序運行在系統(tǒng)進程中,也就是系統(tǒng)應(yīng)用。

只是加入UID還不夠,如果這時候安裝APK的話發(fā)現(xiàn)無法安裝,提示簽名不符,原因是程序想要運行在系統(tǒng)進程中還要有目標(biāo)系統(tǒng)的platform key,就是上面第二個方法提到的platform.pk8和platform.x509.pem兩個文件。用這兩個key簽名后apk才真正可以放入系統(tǒng)進程中。第一個方法中加入LOCAL_CERTIFICATE := platform其實就是用這兩個key來簽名。

這也有一個問題,就是這樣生成的程序只有在原始的Android系統(tǒng)或者是自己編譯的系統(tǒng)中才可以用,因為這樣的系統(tǒng)才可以拿到platform.pk8和platform.x509.pem兩個文件。要是別家公司做的Android上連安裝都安裝不了。試試原始的Android中的key來簽名,程序在模擬器上運行OK,不過放到小米四上安裝uibl,如下圖,這樣也是保護了系統(tǒng)的安全。

最后還說下,這個android:sharedUserId屬性不只可以把apk放到系統(tǒng)進程中,也可以配置多個APK運行在一個進程中,這樣可以共享數(shù)據(jù),應(yīng)該會很有用的。
你在Manifest.xml里聲明使用了shareuserid 或者一些特殊permission,比如你shareuserid到uid.system,就必須使用系統(tǒng)platform簽名來簽?zāi)愕腶pk,否則是不能安裝的,同理share到其他用戶id或者其他process上也是得用跟那個process運行的apk一樣的簽名
一般簽名肯定是廠商私有的,你肯定是沒辦法了,除非機器燒的是開發(fā)版本(eng)

檢驗app是否已經(jīng)是系統(tǒng)應(yīng)用

查看應(yīng)用的進程屬性,如果是system用戶組,說明已經(jīng)是系統(tǒng)應(yīng)用。

from:https://blog.csdn.net/m0_37135879/article/details/81134472?tdsourcetag=s_pcqq_aiomsg

總結(jié)

以上是生活随笔為你收集整理的【转】Android 将自己的应用改为系统应用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。