首页
社区
课程
招聘
[原创]Android下未root时导出data/app目录下APK的方法
发表于: 2015-1-16 21:43 39129

[原创]Android下未root时导出data/app目录下APK的方法

2015-1-16 21:43
39129
一、背景

很多时候,APK文件只存在于应用市场,在PC上无法直接下载。用手机下载下来后就直接安装了,也不能保存原始的APK文件。

APK安装到手机后,Android系统会保存一份和原始APK一模一样的拷贝,位于data/app目录,文件名为“APK的包名-1.apk”或者“APK的包名-2.apk”。这里的包名即 package name,形如 com.xxx.xxx。

data/app这个目录在非root的情况下,是无法直接查看的。但幸运的是,这个目录下所有的APK文件,是有other组可读权限的。

这就是本文方法的原理了。

下面以微信这个APK为例来说明下具体的操作步骤。

二、步骤

Step 0:在手机上安装APK,打开(在下面的步骤中保持APK处于打开状态)。

Step 1:将PC通过adb连接上手机。这步显然是必要条件,对adb不清楚的请自行查阅相关资料

Step 2:获取APK的包名(package name) - 最重要的一步 - 有两种方法

第一种方法 -- 如果你大概知道这个APK的包名可能会包含什么字符串。

比如,我们知道微信是腾讯出品的,那么按惯例,它包名里面肯定包含了“tencent ”这个字符串。

方法:打开PC的命令行,输入adb shell ps。它会列出当前手机中所有正在运行的程序,肯定包含了你要的APK的包名。

在这个输出里面查找包含 tencent的行,你很快就可以找到,它的包名是 com.tencent.mm。

第二种方法 -- 如果你对这个APK的包名可能包含什么内容一无所知。

这时可以使用一个比较复杂的命令:dumpsys activity activities

方法:打开PC的命令行,输入adb shell dumpsys activity activities ,它会列出当前手机中所有正在运行的应用的详细信息,按打开顺序排列,最后打开的APK信息会放在输出的最前面。

(输出非常长,可以重定向到文件中查看到 adb shell dumpsys activity activities > temp.txt)

这个文件最前面几行看起来是这样的:

    ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)  
      Main stack:  
      * TaskRecord{41aa9ed0 #4 A com.tencent.mm U 0}  
        numActivities=1 rootWasReset=true userId=0  
        affinity=com.tencent.mm  
        intent={act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] ***=0x10600000 cmp=com.tencent.mm/.ui.LauncherUI}  
        realActivity=com.tencent.mm/.ui.LauncherUI  
        askedCompatMode=false  
        lastThumbnail=null lastDescription=null  
        lastActiveTime=19915965 (inactive for 10s)  
        * Hist #9: ActivityRecord{41ba1a30 u0 com.tencent.mm/.ui.LauncherUI}  
            packageName=com.tencent.mm processName=com.tencent.mm  

发现了吗,第三行就已经有我们需要的信息了:com.tencent.mm
不要被里面的技术细节信息吓倒了,我们不需要关心那些~

Step 3:利用adb pull命令导出APK

知道了APK的包名,导出APK就简单了。因为data/app下的APK文件名只有两种情况,一个一个试就行了

adb pull data/app/com.tencent.mm-1.apk com.tencent.mm.apk

adb pull data/app/com.tencent.mm-2.apk com.tencent.mm.apk

备注:Android4.4以后,dumpsys的输出有点变化,这里,在获取到dumpsys的输出后,搜索关键字:Stack #1 ,就可以在下面几行找到类似的包名了

<完>

[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

收藏
免费 0
支持
分享
最新回复 (22)
雪    币: 324
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
直接用DDMS还不是可以导出来,[QUOTE][/QUOTE]Androidkiller也可以,大牛勿喷!
2015-1-16 22:50
0
雪    币: 188
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
学习下,多谢楼主
2015-1-17 09:56
0
雪    币: 212
活跃值: (75)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
安卓下面的,用ZArchiver等解压缩工具。不用root.直接这手机上就能查看data/app下面的文件哈。
2015-1-17 11:03
0
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
请实际去操作下,咱再来看,谢谢
2015-1-17 17:28
0
雪    币: 155
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
需要adb 有 root身份才行,否则不可以。
2015-1-19 09:47
0
雪    币: 324
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
大牛可以动手实验一年 看看能不能行,被喷我 我是经常这样搞 要不我可以给你截图
2015-1-19 10:19
0
雪    币: 155
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
呵呵……
2015-1-19 10:46
0
雪    币: 36
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
呵呵。。。。。。。
2015-1-19 10:57
0
雪    币: 215
活跃值: (372)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
adb shell pm list package -f |grep xx
2015-1-20 17:54
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
dumpsys activity activitys

很有用
2015-1-21 09:16
0
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
正在找,终于可以导出apk了
2015-1-21 09:27
0
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
这个方法不靠谱,你都不知道xx是什么,没办法过滤的
2015-1-21 10:14
0
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
觉得有用就点击“致谢”,谢谢
2015-1-21 10:15
0
雪    币: 215
活跃值: (372)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
logcat  ActivityManager
pm list package -3 -f
2015-1-21 11:29
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
data\app 目录下的apk,文件不是和安装的apk文件是一样的吗, 我之前验证过qq的
2015-1-21 15:18
0
雪    币: 67
活跃值: (53)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
可以的,AOSP没问题,自定义的ROM如果乱做了其他目录权限的改动就不知道是否可行了。
2015-1-21 17:51
0
雪    币: 201
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
备份:adb backup -f test.ab -apk com.tencent.mm
还原:adb restore test.ab
2015-1-21 17:53
0
雪    币: 59
活跃值: (185)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
都是一样的。
2015-3-12 15:55
0
雪    币: 15
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
为什么不装个es。支持app备份。
2015-4-24 10:01
0
雪    币: 215
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
豌豆荚也可以直接备份 但是么分析过原理~
2015-4-24 18:56
0
雪    币: 15
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
其实可以直接用io拷贝的,没有root,但是data下面的apk确实是可以用代码拷贝的
2015-5-6 17:57
0
雪    币: 190
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
很有用.谢谢
2015-5-7 10:04
0
游客
登录 | 注册 方可回帖
返回
//