Android 获取 uid

2024-04-13 17:28
文章标签 android 获取 uid

本文主要是介绍Android 获取 uid,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在 Android 系统中, 存在 uid、pid 等概念, uid 即用户 ID, pid 即进程 ID。 uid 每个进程可能会重复, pid 每个进程唯一。

博主博客

  • https://blog.uso6.com
  • https://blog.csdn.net/dxk539687357

一、Android

1.1 代码获取 uid

public static void getUid(Context context, String packageName){try {PackageManager pm = context.getPackageManager();ApplicationInfo ai = pm.getApplicationInfo(packageName, PackageManager.GET_ACTIVITIES);Log.e("nukix", "uid: " + ai.uid);} catch (PackageManager.NameNotFoundException e) {e.printStackTrace();}
}

1.2 代码通过 uid 获取包名

可通过 getPackageManager().getNameForUid(uid); 获取到指定 uid 的包名。

1.3 Binder

int uid = Binder.getCallingUid();
int pid = Binder.getCallingPid();

二、使用 Shell 命令获取

2.0 adb shell

使用 shell 命令前需要使用 adb shell 先进入 shell 命令行。 如果不进入命令行, 每个操作需要带上 adb shell, 比如 adb shell ps

2.1 ps 查看

emu64a:/ # ps -ef
UID  PID  PPID C STIME TTY  TIME CMD
root 1 0 0 59:30 ?  00:00:07 init second_stage
root 2 0 0 59:30 ?  00:00:00 [kthreadd]
u0_a152  2370 341 0 08:29:48 ? 00:00:02 com.uso6

上图包名 com.uso6uid 为 10152。

2.2 pid 查看

emu64a:/ # cat /proc/2370/status
Name:	com.uso6
Umask:	0077
State:	S (sleeping)
Tgid:	2370
Ngid:	0
Pid:	2370
PPid:	341
TracerPid:	0
Uid:	10152	10152	10152	10152
Gid:	10152	10152	10152	10152
FDSize:	128
Groups:	3003 9997 20152 50152 
VmPeak:	15802860 kB
VmSize:	15141828 kB
VmLck:	       0 kB
VmPin:	       0 kB
VmHWM:	  146008 kB
VmRSS:	  142144 kB
RssAnon:	   68712 kB
RssFile:	   72536 kB
RssShmem:	     896 kB
VmData:	 1175152 kB
VmStk:	    8192 kB
VmExe:	       4 kB
VmLib:	  138188 kB
VmPTE:	    1228 kB
VmSwap:	       0 kB
CoreDumping:	0
THP_enabled:	1
Threads:	20
SigQ:	0/10649
SigPnd:	0000000000000000
ShdPnd:	0000000000000000
SigBlk:	0000000080001204
SigIgn:	0000000000000001
SigCgt:	0000006e400084f8
CapInh:	0000000000000000
CapPrm:	0000000000000000
CapEff:	0000000000000000
CapBnd:	0000000000000000
CapAmb:	0000000000000000
NoNewPrivs:	0
Seccomp:	2
Seccomp_filters:	1
Speculation_Store_Bypass:	thread vulnerable
SpeculationIndirectBranch:	unknown
Cpus_allowed:	f
Cpus_allowed_list:	0-3
Mems_allowed:	1
Mems_allowed_list:	0
voluntary_ctxt_switches:	242
nonvoluntary_ctxt_switches:	166

通过上面 ps 命令获得 pid 后, 可通过 /proc/[pid]/status 查看进程的详情。

注:由于系统版本更新和权限限制, 高版本的 Android 手机可能无法使用, 需要 root 权限。

packages 查看(需要 root 权限)

packages.list
emu64a:/ # cat /data/system/packages.list
com.android.cts.priv.ctsshim 10134 0 /data/user/0/com.android.cts.priv.ctsshim default:privapp:targetSdkVersion=28 none 0 34 1 @system
com.android.uwb.resources 10138 0 /data/user_de/0/com.android.uwb.resources default:privapp:targetSdkVersion=34 none 0 1 1 @system
com.uso6 10152 1 /data/user/0/com.uso6.demo default:targetSdkVersion=34 3003 0 1 1 @null
packages.xml
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<packages><version sdkVersion="34" databaseVersion="3" buildFingerprint="Android/sdk_phone64_arm64/emu64a:14/UE1A.230829.036.A1/11228894:userdebug/test-keys" fingerprint="ac03ec39cece4d351ed92707ae7910bc44efa072" /><version volumeUuid="primary_physical" sdkVersion="34" databaseVersion="3" buildFingerprint="Android/sdk_phone64_arm64/emu64a:14/UE1A.230829.036.A1/11228894:userdebug/test-keys" fingerprint="ac03ec39cece4d351ed92707ae7910bc44efa072" /><permission-trees /><permissions><item name="android.permission.health.READ_RESTING_HEART_RATE" package="com.android.healthconnect.controller" protection="1" /></permissions><package name="com.uso6" codePath="/data/app/~~VHH5JNYgi_enAqDDyv2vSg==/com.uso6-QXk3EBHXw_vxWJvDNQESbQ==" nativeLibraryPath="/data/app/~~VHH5JNYgi_enAqDDyv2vSg==/com.uso6-QXk3EBHXw_vxWJvDNQESbQ==/lib" publicFlags="541638470" privateFlags="-1946152960" ft="18ed4dc3d47" ut="18ed4dc3e6e" version="1" userId="10152" packageSource="1" installInitiator="com.android.shell" loadingProgress="1.0" loadingCompletedTime="0" domainSetId="85f08e26-383b-4a57-8695-ce18e4c7f003"><sigs count="1" schemeVersion="2"><cert index="7" key="308202E4308201CC020101300D06092A864886F70D010105050030373116301406035504030C0D416E64726F69642044656275673110300E060355040A0C07416E64726F6964310B30090603550406130255533020170D3234303330343039323132375A180F32303534303232353039323132375A30373116301406035504030C0D416E64726F69642044656275673110300E060355040A0C07416E64726F6964310B300906035504061302555330820122300D06092A864886F70D01010105000382010F003082010A0282010100A24ABFB31D15E167F6B9E6676358310AAA7642C0AB443BF2FFDBE0F80875C02459EBABC115556CAC33B7679DE71CFB51C1C89FE8E11C4A8818D0F1DB52FCF066E007E9D08390842F66D776817CE96A9E29CF10EDC20FF52FB64482E9602D0F8F0C809660864BB3DCF91F377A0329F8B571B47E6F128400CFA835CEC6A089A64613727C35A01463B83BF9A9D84C003DDC8277A1627A549E9C5BFB428D0AC15F870A31FCF5FE8A3DE772B12838DDA53F128511E440F9D0F41218155A34D5D1FDD36B5F795BA5066F8E2FE7D4D15850D02C42CE3333114B363B1EC25C9D4AA7FD0A4ABFCC23BA5C5AF897E874785626A8D0A1CD002CCA0152B7B12B5F45A44B970B0203010001300D06092A864886F70D010105050003820101003208931DD2B67C4A3B1BF111D0F80A04E9A5D7476B217ADCFB50F4DD7703862A9EDE92C35AF7E3176F854A0B6F2016021820927082715B6BDE3DB48E2C4344627B34EB5C20B5CBFA4E3F0491A68A3F2BFECB1B95B699505E2B3D3FD3A16C4829DB7CE72C5B74F6BB83271C8D8C55899A547D4D7E91DC8D1C037CF25624667FB19D674A62F92DE793E93040A7017E81665C78CAA2D4F5CD80F58798CF5F5EB5AA1736F248163541E776BCE770D9B8C6FF1512D5C7A64BF13C5985F4FC4BDCC6DA5E6895796E5411674A0B6F77E477172DF4AD50BEF099D456D258E640F30F085602A4DE58F86EC2FEDC750769F847AC2B0528FD389AF92FB2F54485E97C465B24" /></sigs><proper-signing-keyset identifier="30" /></package><shared-user name="android.media" userId="10059"><sigs count="1" schemeVersion="3"><cert index="5" /></sigs></shared-user><domain-verifications><active><package-state packageName="com.uso6" id="85f08e26-383b-4a57-8695-ce18e4c7f003" /></active><restored /></domain-verifications><domain-verifications-legacy><user-states packageName="com.android.cts.priv.ctsshim"><user-state userId="0" state="0" /></user-states></domain-verifications-legacy><keyset-settings version="1"><keys><public-key identifier="1" value="MIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEA1pMZBN7GCySx7cdi4NnYJT4+zWzrHeL/Boyo6LyozWvTeG6nCqds5g67D5k1Wf/ZPnepQ+foPUtkuOT+otPmVvHiZ6gbv7IwtXjCBEO+THIYuEb1IRWG8DihTonCvjh/jr7Pj8rD2h7jMMnqk9Cnw9xK81AiDVAIBzLggJcX7moFM1nmppTsLLPyhKCkZsh6lNg7MQk6ZzcuL2QSwG5tQvFYGN/+A4HMDNRE2mzdw7gkWBlIAbMlZBNPv96YySh3SNv1Z2pUDYFUyLvKB7niR1UzEcRrmvdv3uzMjmnnyKLQjngmIJQ/mXJ9PAT+cpkdmd+brjigshd/ox1bav7pHwIBAw==" /></keys><keysets><keyset identifier="1"><key-id identifier="1" /></keyset></keysets><lastIssuedKeyId value="30" /><lastIssuedKeySetId value="30" /></keyset-settings>
</packages>

注意:packages.xml 默认被设置为二进制xml格式, 直接打开是乱码, 需要使用 adb 修改配置将其修改为普通的 xml 格式。

adb shell setprop persist.sys.binary_xml false

修改完成后, 需要重启手机, 可通过 adb boot now 进行快速重启, 重启完后再次获取就是普通的 xml 格式。

三、系统预设的 uid

android.os.Process

public static final int INVALID_UID = -1;
public static final int SYSTEM_UID = 1000;
public static final int PHONE_UID = 1001;
public static final int SHELL_UID = 2000;
public static final int LOG_UID = 1007;
public static final int WIFI_UID = 1010;
public static final int MEDIA_UID = 1013;
public static final int DRM_UID = 1019;
public static final int VPN_UID = 1016;
public static final int KEYSTORE_UID = 1017;
public static final int CREDSTORE_UID = 1076;
public static final int NFC_UID = 1027;
public static final int CLAT_UID = 1029;
public static final int BLUETOOTH_UID = 1002;
public static final int SHARED_RELRO_UID = 1037;
public static final int AUDIOSERVER_UID = 1041;
public static final int CAMERASERVER_UID = 1047;
public static final int DNS_TETHER_UID = 1052;
public static final int WEBVIEW_ZYGOTE_UID = 1053;
public static final int OTA_UPDATE_UID = 1061;
public static final int STATSD_UID = 1066;
public static final int INCIDENTD_UID = 1067;
public static final int SE_UID = 1068;
public static final int NETWORK_STACK_UID = 1073;
public static final int FSVERITY_CERT_UID = 1075;
public static final int UWB_UID = 1083;
public static final int SDK_SANDBOX_VIRTUAL_UID = 1090;
public static final int NOBODY_UID = 9999;
public static final int FIRST_APPLICATION_UID = 10000;
public static final int LAST_APPLICATION_UID = 19999;
public static final int FIRST_SDK_SANDBOX_UID = 20000;
public static final int LAST_SDK_SANDBOX_UID = 29999;
public static final int FIRST_APP_ZYGOTE_ISOLATED_UID = 90000;
public static final int LAST_APP_ZYGOTE_ISOLATED_UID = 98999;
public static final int FIRST_ISOLATED_UID = 99000;
public static final int LAST_ISOLATED_UID = 99999;

里面大部分都是 @hide 不能在应用中使用。

这篇关于Android 获取 uid的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/900762

相关文章

Android实现任意版本设置默认的锁屏壁纸和桌面壁纸(两张壁纸可不一致)

客户有些需求需要设置默认壁纸和锁屏壁纸  在默认情况下 这两个壁纸是相同的  如果需要默认的锁屏壁纸和桌面壁纸不一样 需要额外修改 Android13实现 替换默认桌面壁纸: 将图片文件替换frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.*  (注意不能是bmp格式) 替换默认锁屏壁纸: 将图片资源放入vendo

Android平台播放RTSP流的几种方案探究(VLC VS ExoPlayer VS SmartPlayer)

技术背景 好多开发者需要遴选Android平台RTSP直播播放器的时候,不知道如何选的好,本文针对常用的方案,做个大概的说明: 1. 使用VLC for Android VLC Media Player(VLC多媒体播放器),最初命名为VideoLAN客户端,是VideoLAN品牌产品,是VideoLAN计划的多媒体播放器。它支持众多音频与视频解码器及文件格式,并支持DVD影音光盘,VCD影

android-opencv-jni

//------------------start opencv--------------------@Override public void onResume(){ super.onResume(); //通过OpenCV引擎服务加载并初始化OpenCV类库,所谓OpenCV引擎服务即是 //OpenCV_2.4.3.2_Manager_2.4_*.apk程序包,存

从状态管理到性能优化:全面解析 Android Compose

文章目录 引言一、Android Compose基本概念1.1 什么是Android Compose?1.2 Compose的优势1.3 如何在项目中使用Compose 二、Compose中的状态管理2.1 状态管理的重要性2.2 Compose中的状态和数据流2.3 使用State和MutableState处理状态2.4 通过ViewModel进行状态管理 三、Compose中的列表和滚动

Android 10.0 mtk平板camera2横屏预览旋转90度横屏拍照图片旋转90度功能实现

1.前言 在10.0的系统rom定制化开发中,在进行一些平板等默认横屏的设备开发的过程中,需要在进入camera2的 时候,默认预览图像也是需要横屏显示的,在上一篇已经实现了横屏预览功能,然后发现横屏预览后,拍照保存的图片 依然是竖屏的,所以说同样需要将图片也保存为横屏图标了,所以就需要看下mtk的camera2的相关横屏保存图片功能, 如何实现实现横屏保存图片功能 如图所示: 2.mtk

android应用中res目录说明

Android应用的res目录是一个特殊的项目,该项目里存放了Android应用所用的全部资源,包括图片、字符串、颜色、尺寸、样式等,类似于web开发中的public目录,js、css、image、style。。。。 Android按照约定,将不同的资源放在不同的文件夹中,这样可以方便的让AAPT(即Android Asset Packaging Tool , 在SDK的build-tools目

Android fill_parent、match_parent、wrap_content三者的作用及区别

这三个属性都是用来适应视图的水平或者垂直大小,以视图的内容或尺寸为基础的布局,比精确的指定视图的范围更加方便。 1、fill_parent 设置一个视图的布局为fill_parent将强制性的使视图扩展至它父元素的大小 2、match_parent 和fill_parent一样,从字面上的意思match_parent更贴切一些,于是从2.2开始,两个属性都可以使用,但2.3版本以后的建议使

Android Environment 获取的路径问题

1. 以获取 /System 路径为例 /*** Return root of the "system" partition holding the core Android OS.* Always present and mounted read-only.*/public static @NonNull File getRootDirectory() {return DIR_ANDR

Android逆向(反调,脱壳,过ssl证书脚本)

文章目录 总结 基础Android基础工具 定位关键代码页面activity定位数据包参数定位堆栈追踪 编写反调脱壳好用的脚本过ssl证书校验抓包反调的脚本打印堆栈bilibili反调的脚本 总结 暑假做了两个月的Android逆向,记录一下自己学到的东西。对于app渗透有了一些思路。 这两个月主要做的是代码分析,对于分析完后的持久化等没有学习。主要是如何反编译源码,如何找到

android系统源码12 修改默认桌面壁纸--SRO方式

1、aosp12修改默认桌面壁纸 代码路径 :frameworks\base\core\res\res\drawable-nodpi 替换成自己的图片即可,不过需要覆盖所有目录下的图片。 由于是静态修改,则需要make一下,重新编译。 2、方法二Overlay方式 由于上述方法有很大缺点,修改多了之后容易遗忘自己修改哪些文件,为此我们采用另外一种方法,使用Overlay方式。