当前位置: 移动技术网 > IT编程>移动开发>Android > 使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK

使用拷贝的方式(adb push) 绕过Android系统和adb install直接安装APK

2019年03月22日  | 移动技术网IT编程  | 我要评论

某些情况下定制的android系统为了限制用户安装应用,例如电视盒子,车载中控等,通过修改代码屏蔽了正常安装应用的方式

本文探讨如何在 adb shell 具有读写data分区目录的权限前提下,通过adb push 拷贝方式绕过android系统和adb install直接安装apk到android系统,适用于对android系统和adb指令操作有一定基础的读者

 

测试环境: 夜神模拟器(android5.1)
测试应用: qq音乐车机版 爱奇艺音乐 爱奇艺android版

前置条件: adb shell具有root权限,可读写data分区

      通过执行 adb connect localhost:62001,可以使用命令行环境连接到模拟器内部的android环境

 

步骤:

1.根据下载的apk文件,准备拷贝文件,具体:
(1) 在电脑上使用解压软件打开apk文件,并根据androidmanifest.xml或代码目录结构(一般以com开头)获取软件包名(可以使用jadx解析apk后查看androidmanifest的manifest标签的package属性)


(2) 创建文件夹,命名为形如"包名-1",拷贝apk文件到该文件夹并重名为base.apk


(3) 将apk中lib文件加解压出来,并参考如下[android系统支持库类型与lib库内文件夹名对应关系]修改so文件所在文件夹的名称


(4) 若lib文件夹下只有一套so库(一个文件夹),直接拷贝软件解压后的lib文件夹到新建的形如"包名-1"文件夹


(5) 若lib文件夹下存在多套so库(多个文件夹),则参考如下[android系统支持库类型及优先级顺序],保留并优先级最高的so文件所在文件夹(64位>32位)


(6) 执行 adb push "包名-1" /data/app/"包名-1" 将文件拷贝至andorid系统/data/app目录下并重启系统


(7) 重启系统后,此时桌面应该已显示安装的应用,若打开时出现停止运行错误,一般由于找不到对应的so库导致,请继续执行如下第2步

 

 

2.修改android系统packages.xml系统存储的应用信息

(1) 执行 adb pull /data/system/packages.xml . (注意第二个参数是'.',表示电脑当前目录) 将android系统的packages.xml文件拷贝至电脑,该文件存储了android系统应用的信息


(2) 根据apk包名查找 "package" 标签,定位到前面通过拷贝安装至android系统的应用的信息内容


(3) 确认并在当前package标签下是否补充 primarycpuabi 属性, 内容为第1步第5小节所保留的so文件夹原名(即应用提供给android的系统支持库的类型名称),例如:

<package name="com.musicqiyi.mvideo" codepath="/data/app/com.musicqiyi.mvideo-1" nativelibrarypath="/data/app/com.musicqiyi.mvideo-1/lib" 
primarycpuabi="armeabi" flags="48708" ft="1699e32eb38" it="1699e32ebd1" ut="1699e32ebd1" version="2" userid="10031">
...
</package>

 

(4) 执行 adb push packages.xml /data/system 将修改后的packages.xml文件覆盖拷贝至android系统并重启,确认应用是否可以正常运行


(5) 若应用打开时仍出现错误,可能是并非首次安装该应用到android系统中,请尝试如下第3步

 

 

3.创建数据文件夹内容和删除dex缓存(非必须)

(1) 执行 adb shell 并定位到 /data/data 目录,在当前目录创建一个文件夹,名称为apk的包名 mkdir -p '包名'


(2) 在包名文件夹内创建软链接文件,将apk安装目录下的so库文件夹链接到当前目录下 ln -s lib /data/app/'包名-1'/lib/'so库文件夹'


(3) 定位到 /data/dalvik 目录, 执行 rm -rf * 清空系统对应用的dex缓存


(4) 重启系统

 

 

android系统支持库类型及优先级顺序
adb shell下执行cat system/build.prop | grep 'ro.product.cpu.'

# ro.product.cpu.abi and ro.product.cpu.abi2 are obsolete,
# use ro.product.cpu.abilist instead.
ro.product.cpu.abi=x86
ro.product.cpu.abilist=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist32=x86,armeabi-v7a,armeabi
ro.product.cpu.abilist64=

 

android系统支持库类型与lib库内文件夹名对应关系

/* /libcore/libart/src/main/java/dalvik/system/vmruntime.java */
private static final map<string, string> abi_to_instruction_set_map
  = new hashmap<string, string>();
static {
  abi_to_instruction_set_map.put("armeabi", "arm");
  abi_to_instruction_set_map.put("armeabi-v7a", "arm");
  abi_to_instruction_set_map.put("mips", "mips");
  abi_to_instruction_set_map.put("mips64", "mips64");
  abi_to_instruction_set_map.put("x86", "x86");
  abi_to_instruction_set_map.put("x86_64", "x86_64");
  abi_to_instruction_set_map.put("arm64-v8a", "arm64");
}

 

常见的android系统支持库与cpu对应关系

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网