查看包名的方式
什么是包?
像常见的apk、apks、xapk,这些归档格式的压缩包其实就是包,后面会详细讲解包的结构。
包名就是在Manifest文件中被定义了的名字,而不是xxx.apk,也是不是apk前面的名字,这是可以修改的,真实的包名是Manifest文件中package这个参数的值,这个值就是包名。
反编译查看清单文件
打开jadx或者jeb或者gda,打开apk文件,我拿三个软件都做一例子。
jadx 贾德克斯
使用jadx打开apk之后,左边的目录主要会存在三个文件夹,输出、源代码、资源文件,我们要反编译查看包名就需要到资源文件中去看AndroidManifest.txt,这是APK的核心文件,文件中定义了程序的名称、版本、权限、引用的库文件等信息。如图:
在文件中package="cn.trinea.android.developertools"
中的cn.trinea.android.developertools就是软件包的包名,而下面那些是相关的Android SDK版本、软件版本、版本名字等相关信息。
JEB 杰布
在JEB中我们打开apk包之后,在左边的侧边栏中就可以看到一个Manifest文件,我们点击打开文件就可以看到相关的内容,如下:
GDA
进入软件之后打开apk包之后是这样的,一目了然:
JDA的体验或许没有其他软件体验号,打开Manifest文件的时候有点卡顿,这一点要注意,非常吃资源,需要你多分配一点内存。
通过shell命令获取包名
除了以上使用反编译的工具可以查看包名,还可以使用shell命令。
查看包列表
pm list packages
在进入Android shell之后使用pm list packages命令可以查看所有的软件包。如图:
如果逆向在Linux shell或者Windows powershell中去执行该命令,只需要在前面添加一个adb shell即可:
adb shell pm list packages
通过进程查看包名
还可以通过进程来查看软件包的包名,使用Linux的shell命令ps
就可以查看,例如:
在后续的Linux高版本的内核中,移除了直接使用ps查看进程的方式,需要ps -A
命令查看:
查看app私有目录
我们可以通过查看app的私有目录的方式来查看包名,我们需要将路径切换到data/data目录下:
也可以查看app的安装目录来查看app的包名:
这里的app名字是进行了编码的,很明显使用的是Base64进行的编码,我们可以通过工具进行解码:
这里显示乱码的原因是错误解码的问题,我们可以通过转码成为16进制:
然后再进行16进制解码即可,解码结果如下:
输出窗口服务信息
我们可以输出当前正在运行的程序服务的信息来获取包名,执行dumpsys window windows命令时,它会列出所有与窗口管理相关的信息,这些信息对于调试应用程序的布局问题、多窗口模式的支持以及其他与UI相关的问题非常有用。
dumpsys window windows
我们可以使用grep
命令进行信息的过滤:
dumpsys window windows | grep qq
可以看见我们把QQ的相关信息给过滤了出来。
如果我们要在Linux或者Windows上面直接操作,我们只需要在前面添加adb shell即可,如果有多个设备,指定一个设备就可以了:
如果你用的是Windows操作系统,那么直接吧grep换成findstr就可以了,因为grep命令只能在Linux/Unix环境中去使用,Windows需要使用别的命令:
dumpsys window windows | findstr qq
获取用户交互焦点信息
Android:
dumpsys window windows | grep mFocusedApp
dumpsys window windows | findstr mFocusedApp
用来找出当前Android设备上获得焦点(即用户正在交互)的应用的信息,如图:
由于没有任何进行交互,所以没有信息返回。
Android:
dumpsys window windows | grep mCurrentFocus
Linux:
adb shell dumpsys window windows | grep mCurrentFocus
Windows:
adb shell dumpsys window windows | findstr mCurrentFocus
用于显示当前Android设备上当前获得焦点(即用户正在查看或交互)的窗口的信息,例如:
目前正在交互的窗口
Android:
dumpsys window | grep mCurrentFocus
Linux:
adb shell dumpsys window | grep mCurrentFocus
Windows:
adb shell dumpsys window | findstr mCurrentFocus
这里返回了QQ的焦点信息和QQ的包,最后面的信息是QQ的焦点,前面的绿框是QQ的包名。
评论区