mirror of
https://github.com/mvt-project/mvt.git
synced 2024-07-01 00:19:02 +00:00
Merge pull request #297 from mvt-project/feature/dumpsys-packages-parsing
Improves Android dumpsys package parsing
This commit is contained in:
commit
134581c000
|
@ -11,6 +11,7 @@ from rich.progress import track
|
||||||
from rich.table import Table
|
from rich.table import Table
|
||||||
from rich.text import Text
|
from rich.text import Text
|
||||||
|
|
||||||
|
from mvt.android.parsers.dumpsys import parse_dumpsys_package_for_details
|
||||||
from mvt.common.virustotal import VTNoKey, VTQuotaExceeded, virustotal_lookup
|
from mvt.common.virustotal import VTNoKey, VTQuotaExceeded, virustotal_lookup
|
||||||
|
|
||||||
from .base import AndroidExtraction
|
from .base import AndroidExtraction
|
||||||
|
@ -191,43 +192,18 @@ class Packages(AndroidExtraction):
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def parse_package_for_details(output: str) -> dict:
|
def parse_package_for_details(output: str) -> dict:
|
||||||
details = {
|
# Get only the package information
|
||||||
"uid": "",
|
lines = []
|
||||||
"version_name": "",
|
in_packages = False
|
||||||
"version_code": "",
|
|
||||||
"timestamp": "",
|
|
||||||
"first_install_time": "",
|
|
||||||
"last_update_time": "",
|
|
||||||
"requested_permissions": [],
|
|
||||||
}
|
|
||||||
|
|
||||||
in_permissions = False
|
|
||||||
for line in output.splitlines():
|
for line in output.splitlines():
|
||||||
if in_permissions:
|
if in_packages:
|
||||||
if line.startswith(" " * 4) and not line.startswith(" " * 6):
|
if line.strip() == "":
|
||||||
in_permissions = False
|
break
|
||||||
continue
|
lines.append(line)
|
||||||
|
if line.strip() == "Packages:":
|
||||||
|
in_packages = True
|
||||||
|
|
||||||
permission = line.strip().split(":")[0]
|
return parse_dumpsys_package_for_details("\n".join(lines))
|
||||||
details["requested_permissions"].append(permission)
|
|
||||||
|
|
||||||
if line.strip().startswith("userId="):
|
|
||||||
details["uid"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("versionName="):
|
|
||||||
details["version_name"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("versionCode="):
|
|
||||||
details["version_code"] = line.split("=", 1)[1].strip()
|
|
||||||
elif line.strip().startswith("timeStamp="):
|
|
||||||
details["timestamp"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("firstInstallTime="):
|
|
||||||
details["first_install_time"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("lastUpdateTime="):
|
|
||||||
details["last_update_time"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip() == "requested permissions:":
|
|
||||||
in_permissions = True
|
|
||||||
continue
|
|
||||||
|
|
||||||
return details
|
|
||||||
|
|
||||||
def _get_files_for_package(self, package_name: str) -> list:
|
def _get_files_for_package(self, package_name: str) -> list:
|
||||||
output = self._adb_command(f"pm path {package_name}")
|
output = self._adb_command(f"pm path {package_name}")
|
||||||
|
|
|
@ -4,9 +4,9 @@
|
||||||
# https://license.mvt.re/1.1/
|
# https://license.mvt.re/1.1/
|
||||||
|
|
||||||
import logging
|
import logging
|
||||||
import re
|
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union
|
||||||
|
|
||||||
|
from mvt.android.parsers.dumpsys import parse_dumpsys_packages
|
||||||
from mvt.android.modules.adb.packages import (DANGEROUS_PERMISSIONS,
|
from mvt.android.modules.adb.packages import (DANGEROUS_PERMISSIONS,
|
||||||
DANGEROUS_PERMISSIONS_THRESHOLD,
|
DANGEROUS_PERMISSIONS_THRESHOLD,
|
||||||
ROOT_PACKAGES)
|
ROOT_PACKAGES)
|
||||||
|
@ -76,89 +76,6 @@ class Packages(BugReportModule):
|
||||||
self.detected.append(result)
|
self.detected.append(result)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def parse_package_for_details(output: str) -> dict:
|
|
||||||
details = {
|
|
||||||
"uid": "",
|
|
||||||
"version_name": "",
|
|
||||||
"version_code": "",
|
|
||||||
"timestamp": "",
|
|
||||||
"first_install_time": "",
|
|
||||||
"last_update_time": "",
|
|
||||||
"requested_permissions": [],
|
|
||||||
}
|
|
||||||
|
|
||||||
in_install_permissions = False
|
|
||||||
in_runtime_permissions = False
|
|
||||||
for line in output.splitlines():
|
|
||||||
if in_install_permissions:
|
|
||||||
if line.startswith(" " * 4) and not line.startswith(" " * 6):
|
|
||||||
in_install_permissions = False
|
|
||||||
continue
|
|
||||||
|
|
||||||
permission = line.strip().split(":")[0]
|
|
||||||
if permission not in details["requested_permissions"]:
|
|
||||||
details["requested_permissions"].append(permission)
|
|
||||||
|
|
||||||
if in_runtime_permissions:
|
|
||||||
if not line.startswith(" " * 8):
|
|
||||||
in_runtime_permissions = False
|
|
||||||
continue
|
|
||||||
|
|
||||||
permission = line.strip().split(":")[0]
|
|
||||||
if permission not in details["requested_permissions"]:
|
|
||||||
details["requested_permissions"].append(permission)
|
|
||||||
|
|
||||||
if line.strip().startswith("userId="):
|
|
||||||
details["uid"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("versionName="):
|
|
||||||
details["version_name"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("versionCode="):
|
|
||||||
details["version_code"] = line.split("=", 1)[1].strip()
|
|
||||||
elif line.strip().startswith("timeStamp="):
|
|
||||||
details["timestamp"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("firstInstallTime="):
|
|
||||||
details["first_install_time"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip().startswith("lastUpdateTime="):
|
|
||||||
details["last_update_time"] = line.split("=")[1].strip()
|
|
||||||
elif line.strip() == "install permissions:":
|
|
||||||
in_install_permissions = True
|
|
||||||
elif line.strip() == "runtime permissions:":
|
|
||||||
in_runtime_permissions = True
|
|
||||||
|
|
||||||
return details
|
|
||||||
|
|
||||||
def parse_packages_list(self, output: str) -> list:
|
|
||||||
pkg_rxp = re.compile(r" Package \[(.+?)\].*")
|
|
||||||
|
|
||||||
results = []
|
|
||||||
package_name = None
|
|
||||||
package = {}
|
|
||||||
lines = []
|
|
||||||
for line in output.splitlines():
|
|
||||||
if line.startswith(" Package ["):
|
|
||||||
if len(lines) > 0:
|
|
||||||
details = self.parse_package_for_details("\n".join(lines))
|
|
||||||
package.update(details)
|
|
||||||
results.append(package)
|
|
||||||
lines = []
|
|
||||||
package = {}
|
|
||||||
|
|
||||||
matches = pkg_rxp.findall(line)
|
|
||||||
if not matches:
|
|
||||||
continue
|
|
||||||
|
|
||||||
package_name = matches[0]
|
|
||||||
package["package_name"] = package_name
|
|
||||||
continue
|
|
||||||
|
|
||||||
if not package_name:
|
|
||||||
continue
|
|
||||||
|
|
||||||
lines.append(line)
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
def run(self) -> None:
|
def run(self) -> None:
|
||||||
content = self._get_dumpstate_file()
|
content = self._get_dumpstate_file()
|
||||||
if not content:
|
if not content:
|
||||||
|
@ -189,12 +106,12 @@ class Packages(BugReportModule):
|
||||||
|
|
||||||
lines.append(line)
|
lines.append(line)
|
||||||
|
|
||||||
self.results = self.parse_packages_list("\n".join(lines))
|
self.results = parse_dumpsys_packages("\n".join(lines))
|
||||||
|
|
||||||
for result in self.results:
|
for result in self.results:
|
||||||
dangerous_permissions_count = 0
|
dangerous_permissions_count = 0
|
||||||
for perm in result["requested_permissions"]:
|
for perm in result["permissions"]:
|
||||||
if perm in DANGEROUS_PERMISSIONS:
|
if perm["name"] in DANGEROUS_PERMISSIONS:
|
||||||
dangerous_permissions_count += 1
|
dangerous_permissions_count += 1
|
||||||
|
|
||||||
if dangerous_permissions_count >= DANGEROUS_PERMISSIONS_THRESHOLD:
|
if dangerous_permissions_count >= DANGEROUS_PERMISSIONS_THRESHOLD:
|
||||||
|
|
|
@ -387,3 +387,134 @@ def parse_dumpsys_appops(output: str) -> list:
|
||||||
results.append(package)
|
results.append(package)
|
||||||
|
|
||||||
return results
|
return results
|
||||||
|
|
||||||
|
|
||||||
|
def parse_dumpsys_package_for_details(output: str) -> dict:
|
||||||
|
"""
|
||||||
|
Parse one entry of a dumpsys package information
|
||||||
|
"""
|
||||||
|
details = {
|
||||||
|
"uid": "",
|
||||||
|
"version_name": "",
|
||||||
|
"version_code": "",
|
||||||
|
"timestamp": "",
|
||||||
|
"first_install_time": "",
|
||||||
|
"last_update_time": "",
|
||||||
|
"permissions": [],
|
||||||
|
"requested_permissions": [],
|
||||||
|
}
|
||||||
|
|
||||||
|
in_install_permissions = False
|
||||||
|
in_runtime_permissions = False
|
||||||
|
in_declared_permissions = False
|
||||||
|
in_requested_permissions = True
|
||||||
|
for line in output.splitlines():
|
||||||
|
if in_install_permissions:
|
||||||
|
if line.startswith(" " * 4) and not line.startswith(" " * 6):
|
||||||
|
in_install_permissions = False
|
||||||
|
else:
|
||||||
|
lineinfo = line.strip().split(":")
|
||||||
|
permission = lineinfo[0]
|
||||||
|
granted = None
|
||||||
|
if "granted=" in lineinfo[1]:
|
||||||
|
granted = ("granted=true" in lineinfo[1])
|
||||||
|
|
||||||
|
details["permissions"].append({
|
||||||
|
"name": permission,
|
||||||
|
"granted": granted,
|
||||||
|
"type": "install"
|
||||||
|
})
|
||||||
|
|
||||||
|
if in_runtime_permissions:
|
||||||
|
if not line.startswith(" " * 8):
|
||||||
|
in_runtime_permissions = False
|
||||||
|
else:
|
||||||
|
lineinfo = line.strip().split(":")
|
||||||
|
permission = lineinfo[0]
|
||||||
|
granted = None
|
||||||
|
if "granted=" in lineinfo[1]:
|
||||||
|
granted = ("granted=true" in lineinfo[1])
|
||||||
|
|
||||||
|
details["permissions"].append({
|
||||||
|
"name": permission,
|
||||||
|
"granted": granted,
|
||||||
|
"type": "runtime"
|
||||||
|
})
|
||||||
|
|
||||||
|
if in_declared_permissions:
|
||||||
|
if not line.startswith(" " * 6):
|
||||||
|
in_declared_permissions = False
|
||||||
|
else:
|
||||||
|
permission = line.strip().split(":")[0]
|
||||||
|
details["permissions"].append({
|
||||||
|
"name": permission,
|
||||||
|
"type": "declared"
|
||||||
|
})
|
||||||
|
if in_requested_permissions:
|
||||||
|
if not line.startswith(" " * 6):
|
||||||
|
in_requested_permissions = False
|
||||||
|
else:
|
||||||
|
details["requested_permissions"].append(line.strip())
|
||||||
|
|
||||||
|
if line.strip().startswith("userId="):
|
||||||
|
details["uid"] = line.split("=")[1].strip()
|
||||||
|
elif line.strip().startswith("versionName="):
|
||||||
|
details["version_name"] = line.split("=")[1].strip()
|
||||||
|
elif line.strip().startswith("versionCode="):
|
||||||
|
details["version_code"] = line.split("=", 1)[1].strip()
|
||||||
|
elif line.strip().startswith("timeStamp="):
|
||||||
|
details["timestamp"] = line.split("=")[1].strip()
|
||||||
|
elif line.strip().startswith("firstInstallTime="):
|
||||||
|
details["first_install_time"] = line.split("=")[1].strip()
|
||||||
|
elif line.strip().startswith("lastUpdateTime="):
|
||||||
|
details["last_update_time"] = line.split("=")[1].strip()
|
||||||
|
elif line.strip() == "install permissions:":
|
||||||
|
in_install_permissions = True
|
||||||
|
elif line.strip() == "runtime permissions:":
|
||||||
|
in_runtime_permissions = True
|
||||||
|
elif line.strip() == "declared permissions:":
|
||||||
|
in_declared_permissions = True
|
||||||
|
elif line.strip() == "requested permissions:":
|
||||||
|
in_requested_permissions = True
|
||||||
|
|
||||||
|
return details
|
||||||
|
|
||||||
|
|
||||||
|
def parse_dumpsys_packages(output: str) -> list:
|
||||||
|
"""
|
||||||
|
Parse the dumpsys package service data
|
||||||
|
"""
|
||||||
|
pkg_rxp = re.compile(r" Package \[(.+?)\].*")
|
||||||
|
|
||||||
|
results = []
|
||||||
|
package_name = None
|
||||||
|
package = {}
|
||||||
|
lines = []
|
||||||
|
for line in output.splitlines():
|
||||||
|
if line.startswith(" Package ["):
|
||||||
|
if len(lines) > 0:
|
||||||
|
details = parse_dumpsys_package_for_details("\n".join(lines))
|
||||||
|
package.update(details)
|
||||||
|
results.append(package)
|
||||||
|
lines = []
|
||||||
|
package = {}
|
||||||
|
|
||||||
|
matches = pkg_rxp.findall(line)
|
||||||
|
if not matches:
|
||||||
|
continue
|
||||||
|
|
||||||
|
package_name = matches[0]
|
||||||
|
package["package_name"] = package_name
|
||||||
|
continue
|
||||||
|
|
||||||
|
if not package_name:
|
||||||
|
continue
|
||||||
|
|
||||||
|
lines.append(line)
|
||||||
|
|
||||||
|
if len(lines) > 0:
|
||||||
|
details = parse_dumpsys_package_for_details("\n".join(lines))
|
||||||
|
package.update(details)
|
||||||
|
results.append(package)
|
||||||
|
|
||||||
|
return results
|
||||||
|
|
|
@ -7,24 +7,36 @@ import os
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
|
|
||||||
from mvt.android.modules.bugreport.appops import Appops
|
from mvt.android.modules.bugreport.appops import Appops
|
||||||
|
from mvt.android.modules.bugreport.packages import Packages
|
||||||
from mvt.common.module import run_module
|
from mvt.common.module import run_module
|
||||||
|
|
||||||
from ..utils import get_artifact_folder
|
from ..utils import get_artifact_folder
|
||||||
|
|
||||||
|
|
||||||
class TestAppopsModule:
|
class TestBugreportAnalysis:
|
||||||
|
|
||||||
def test_appops_parsing(self):
|
def launch_bug_report_module(self, module):
|
||||||
fpath = os.path.join(get_artifact_folder(), "android_data/bugreport/")
|
fpath = os.path.join(get_artifact_folder(), "android_data/bugreport/")
|
||||||
m = Appops(target_path=fpath)
|
m = module(target_path=fpath)
|
||||||
folder_files = []
|
folder_files = []
|
||||||
parent_path = Path(fpath).absolute().as_posix()
|
parent_path = Path(fpath).absolute().as_posix()
|
||||||
for root, subdirs, subfiles in os.walk(os.path.abspath(fpath)):
|
for root, subdirs, subfiles in os.walk(os.path.abspath(fpath)):
|
||||||
for file_name in subfiles:
|
for file_name in subfiles:
|
||||||
folder_files.append(os.path.relpath(os.path.join(root, file_name), parent_path))
|
folder_files.append(os.path.relpath(os.path.join(root, file_name), parent_path))
|
||||||
m.from_folder(fpath, folder_files)
|
m.from_folder(fpath, folder_files)
|
||||||
|
|
||||||
run_module(m)
|
run_module(m)
|
||||||
|
return m
|
||||||
|
|
||||||
|
def test_appops_module(self):
|
||||||
|
m = self.launch_bug_report_module(Appops)
|
||||||
assert len(m.results) == 12
|
assert len(m.results) == 12
|
||||||
assert len(m.timeline) == 16
|
assert len(m.timeline) == 16
|
||||||
assert len(m.detected) == 0
|
assert len(m.detected) == 0
|
||||||
|
|
||||||
|
def test_packages_module(self):
|
||||||
|
m = self.launch_bug_report_module(Packages)
|
||||||
|
assert len(m.results) == 2
|
||||||
|
assert m.results[0]["package_name"] == "com.samsung.android.provider.filterprovider"
|
||||||
|
assert m.results[1]["package_name"] == "com.instagram.android"
|
||||||
|
assert len(m.results[0]["permissions"]) == 4
|
||||||
|
assert len(m.results[1]["permissions"]) == 32
|
|
@ -4,7 +4,8 @@
|
||||||
# https://license.mvt.re/1.1/
|
# https://license.mvt.re/1.1/
|
||||||
|
|
||||||
from mvt.android.parsers.dumpsys import (parse_dumpsys_appops,
|
from mvt.android.parsers.dumpsys import (parse_dumpsys_appops,
|
||||||
parse_dumpsys_battery_history)
|
parse_dumpsys_battery_history,
|
||||||
|
parse_dumpsys_packages)
|
||||||
|
|
||||||
from ..utils import get_artifact
|
from ..utils import get_artifact
|
||||||
|
|
||||||
|
@ -43,3 +44,18 @@ class TestDumpsysParsing:
|
||||||
assert res[2]["package_name"] == "com.whatsapp"
|
assert res[2]["package_name"] == "com.whatsapp"
|
||||||
assert res[3]["event"] == "end_top"
|
assert res[3]["event"] == "end_top"
|
||||||
assert res[4]["package_name"] == "com.sec.android.app.launcher"
|
assert res[4]["package_name"] == "com.sec.android.app.launcher"
|
||||||
|
|
||||||
|
def test_packages_parsing(self):
|
||||||
|
file = get_artifact("android_data/dumpsys_packages.txt")
|
||||||
|
with open(file) as f:
|
||||||
|
data = f.read()
|
||||||
|
|
||||||
|
res = parse_dumpsys_packages(data)
|
||||||
|
|
||||||
|
assert len(res) == 2
|
||||||
|
assert res[0]["package_name"] == "com.samsung.android.provider.filterprovider"
|
||||||
|
assert res[1]["package_name"] == "com.sec.android.app.DataCreate"
|
||||||
|
assert len(res[0]["permissions"]) == 4
|
||||||
|
assert len(res[0]["requested_permissions"]) == 0
|
||||||
|
assert len(res[1]["permissions"]) == 34
|
||||||
|
assert len(res[1]["requested_permissions"]) == 11
|
||||||
|
|
|
@ -124,3 +124,128 @@ DUMP OF SERVICE appwidget:
|
||||||
Providers:
|
Providers:
|
||||||
[0] provider ProviderId{user:0, app:10107, cmp:ComponentInfo{com.sec.android.app.clockpackage/com.sec.android.app.clockpackage.alarmwidget.ClockAlarmWidgetProvider}}
|
[0] provider ProviderId{user:0, app:10107, cmp:ComponentInfo{com.sec.android.app.clockpackage/com.sec.android.app.clockpackage.alarmwidget.ClockAlarmWidgetProvider}}
|
||||||
|
|
||||||
|
--------- 0.002s was the duration of dumpsys overlay, ending at: 2022-08-17 15:31:55
|
||||||
|
-------------------------------------------------------------------------------
|
||||||
|
DUMP OF SERVICE package:
|
||||||
|
Database versions:
|
||||||
|
Internal:
|
||||||
|
sdkVersion=29 databaseVersion=3
|
||||||
|
External:
|
||||||
|
sdkVersion=28 databaseVersion=3
|
||||||
|
|
||||||
|
Verifiers:
|
||||||
|
Required: com.android.vending (uid=10019)
|
||||||
|
|
||||||
|
Intent Filter Verifier:
|
||||||
|
Using: com.google.android.gms (uid=10012)
|
||||||
|
|
||||||
|
Packages:
|
||||||
|
Package [com.samsung.android.provider.filterprovider] (d64f8e0):
|
||||||
|
userId=1000
|
||||||
|
sharedUser=SharedUserSetting{cb92b86 android.uid.system/1000}
|
||||||
|
pkg=Package{5be8c47 com.samsung.android.provider.filterprovider}
|
||||||
|
codePath=/system/app/FilterProvider
|
||||||
|
resourcePath=/system/app/FilterProvider
|
||||||
|
legacyNativeLibraryDir=/system/app/FilterProvider/lib
|
||||||
|
primaryCpuAbi=armeabi-v7a
|
||||||
|
secondaryCpuAbi=null
|
||||||
|
versionCode=500700000 minSdk=28 targetSdk=28
|
||||||
|
versionName=5.0.07
|
||||||
|
splits=[base]
|
||||||
|
apkSigningVersion=2
|
||||||
|
applicationInfo=ApplicationInfo{acc0439 com.samsung.android.provider.filterprovider}
|
||||||
|
flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
|
||||||
|
privateFlags=[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE ]
|
||||||
|
dataDir=/data/user/0/com.samsung.android.provider.filterprovider
|
||||||
|
supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
|
||||||
|
usesLibraries:
|
||||||
|
android.hidl.manager-V1.0-java
|
||||||
|
android.hidl.base-V1.0-java
|
||||||
|
usesLibraryFiles:
|
||||||
|
/system/framework/android.hidl.manager-V1.0-java.jar
|
||||||
|
/system/framework/android.hidl.base-V1.0-java.jar
|
||||||
|
timeStamp=2008-12-31 16:00:00
|
||||||
|
firstInstallTime=2008-12-31 16:00:00
|
||||||
|
lastUpdateTime=2008-12-31 16:00:00
|
||||||
|
signatures=PackageSignatures{6c98c74 version:2, signatures:[b378e95c], past signatures:[]}
|
||||||
|
installPermissionsFixed=true
|
||||||
|
pkgFlags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
|
||||||
|
declared permissions:
|
||||||
|
com.samsung.android.provider.filterprovider.permission.READ_FILTER: prot=normal, INSTALLED
|
||||||
|
com.samsung.android.provider.filterprovider.permission.WRITE_FILTER: prot=signature, INSTALLED
|
||||||
|
com.samsung.android.provider.filterprovider.permission.RECEIVE_UPDATE: prot=signature, INSTALLED
|
||||||
|
com.sec.android.camera.permission.USE_EFFECT_FILTER: prot=signature, INSTALLED
|
||||||
|
User 0: ceDataInode=-4294835840 installed=true hidden=false suspended=false stopped=false notLaunched=false enabled=0 instant=false virtual=false
|
||||||
|
Package [com.instagram.android] (c716d35):
|
||||||
|
userId=10164
|
||||||
|
pkg=Package{a61df24 com.instagram.android}
|
||||||
|
codePath=/data/app/com.instagram.android-0mrt4tCf3oHIUTc_FFSStA==
|
||||||
|
resourcePath=/data/app/com.instagram.android-0mrt4tCf3oHIUTc_FFSStA==
|
||||||
|
legacyNativeLibraryDir=/data/app/com.instagram.android-0mrt4tCf3oHIUTc_FFSStA==/lib
|
||||||
|
primaryCpuAbi=armeabi-v7a
|
||||||
|
secondaryCpuAbi=null
|
||||||
|
versionCode=364105349 minSdk=21 targetSdk=31
|
||||||
|
versionName=241.1.0.18.114
|
||||||
|
splits=[base]
|
||||||
|
apkSigningVersion=2
|
||||||
|
applicationInfo=ApplicationInfo{80b0d30 com.instagram.android}
|
||||||
|
flags=[ HAS_CODE ALLOW_TASK_REPARENTING ALLOW_CLEAR_USER_DATA ALLOW_BACKUP KILL_AFTER_RESTORE LARGE_HEAP ]
|
||||||
|
privateFlags=[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_UNRESIZEABLE ALLOW_AUDIO_PLAYBACK_CAPTURE PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE HAS_DOMAIN_URLS PARTIALLY_DIRECT_BOOT_AWARE ]
|
||||||
|
dataDir=/data/user/0/com.instagram.android
|
||||||
|
supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
|
||||||
|
timeStamp=2022-06-29 23:28:46
|
||||||
|
firstInstallTime=2020-06-12 00:41:34
|
||||||
|
lastUpdateTime=2022-06-29 23:28:51
|
||||||
|
installerPackageName=com.android.vending
|
||||||
|
signatures=PackageSignatures{7812a8d version:2, signatures:[43c4b509], past signatures:[]}
|
||||||
|
installPermissionsFixed=true
|
||||||
|
pkgFlags=[ HAS_CODE ALLOW_TASK_REPARENTING ALLOW_CLEAR_USER_DATA ALLOW_BACKUP KILL_AFTER_RESTORE LARGE_HEAP ]
|
||||||
|
declared permissions:
|
||||||
|
com.instagram.android.permission.SYSTEM_ONLY: prot=signature|privileged, INSTALLED
|
||||||
|
com.instagram.android.permission.RECEIVE_ADM_MESSAGE: prot=signature, INSTALLED
|
||||||
|
com.instagram.android.permission.CROSS_PROCESS_BROADCAST_MANAGER: prot=signature, INSTALLED
|
||||||
|
install permissions:
|
||||||
|
com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE: granted=true
|
||||||
|
com.google.android.c2dm.permission.RECEIVE: granted=true
|
||||||
|
android.permission.USE_CREDENTIALS: granted=true
|
||||||
|
android.permission.MODIFY_AUDIO_SETTINGS: granted=true
|
||||||
|
android.permission.FOREGROUND_SERVICE: granted=true
|
||||||
|
android.permission.RECEIVE_BOOT_COMPLETED: granted=true
|
||||||
|
com.instagram.android.permission.CROSS_PROCESS_BROADCAST_MANAGER: granted=true
|
||||||
|
com.android.launcher.permission.UNINSTALL_SHORTCUT: granted=true
|
||||||
|
android.permission.READ_PROFILE: granted=true
|
||||||
|
android.permission.BLUETOOTH: granted=true
|
||||||
|
com.facebook.services.identity.FEO2: granted=true
|
||||||
|
android.permission.INTERNET: granted=true
|
||||||
|
android.permission.REORDER_TASKS: granted=true
|
||||||
|
com.android.vending.BILLING: granted=true
|
||||||
|
android.permission.BLUETOOTH_ADMIN: granted=true
|
||||||
|
android.permission.USE_FULL_SCREEN_INTENT: granted=true
|
||||||
|
android.permission.BROADCAST_STICKY: granted=true
|
||||||
|
User 0: ceDataInode=-4294835341 installed=true hidden=false suspended=false stopped=false notLaunched=false enabled=4 instant=false virtual=false
|
||||||
|
lastDisabledCaller: auto_disabler
|
||||||
|
gids=[3002, 3003, 3001]
|
||||||
|
runtime permissions:
|
||||||
|
android.permission.ACCESS_FINE_LOCATION: granted=false, flags=[ USER_SET|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.READ_PHONE_NUMBERS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.READ_EXTERNAL_STORAGE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.ACCESS_COARSE_LOCATION: granted=false, flags=[ USER_SET|REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.READ_PHONE_STATE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.CALL_PHONE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.CAMERA: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.GET_ACCOUNTS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.WRITE_EXTERNAL_STORAGE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED|RESTRICTION_INSTALLER_EXEMPT|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.RECORD_AUDIO: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.READ_CONTACTS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
android.permission.ACCESS_MEDIA_LOCATION: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|USER_SENSITIVE_WHEN_DENIED]
|
||||||
|
disabledComponents:
|
||||||
|
com.instagram.direct.share.handler.DirectExternalMediaShareActivityVideoInterop
|
||||||
|
com.instagram.direct.share.handler.DirectShareHandlerActivityInterop
|
||||||
|
com.instagram.direct.share.handler.DirectExternalPhotoShareActivityInterop
|
||||||
|
com.facebook.rti.push.service.FbnsService
|
||||||
|
com.instagram.direct.share.handler.DirectMultipleExternalMediaShareActivity
|
||||||
|
com.instagram.share.handleractivity.ClipsShareHandlerActivity
|
||||||
|
com.instagram.direct.share.handler.DirectMultipleExternalMediaShareActivityInterop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
126
tests/artifacts/android_data/dumpsys_packages.txt
Normal file
126
tests/artifacts/android_data/dumpsys_packages.txt
Normal file
|
@ -0,0 +1,126 @@
|
||||||
|
Verifiers:
|
||||||
|
Required: com.android.vending (uid=10019)
|
||||||
|
|
||||||
|
Intent Filter Verifier:
|
||||||
|
Using: com.google.android.gms (uid=10012)
|
||||||
|
|
||||||
|
Libraries:
|
||||||
|
android.test.base -> (jar) /system/framework/android.test.base.jar
|
||||||
|
android.test.mock -> (jar) /system/framework/android.test.mock.jar
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Packages:
|
||||||
|
Package [com.samsung.android.provider.filterprovider] (d64f8e0):
|
||||||
|
userId=1000
|
||||||
|
sharedUser=SharedUserSetting{cb92b86 android.uid.system/1000}
|
||||||
|
pkg=Package{5be8c47 com.samsung.android.provider.filterprovider}
|
||||||
|
codePath=/system/app/FilterProvider
|
||||||
|
resourcePath=/system/app/FilterProvider
|
||||||
|
legacyNativeLibraryDir=/system/app/FilterProvider/lib
|
||||||
|
primaryCpuAbi=armeabi-v7a
|
||||||
|
secondaryCpuAbi=null
|
||||||
|
versionCode=500700000 minSdk=28 targetSdk=28
|
||||||
|
versionName=5.0.07
|
||||||
|
splits=[base]
|
||||||
|
apkSigningVersion=2
|
||||||
|
applicationInfo=ApplicationInfo{acc0439 com.samsung.android.provider.filterprovider}
|
||||||
|
flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
|
||||||
|
privateFlags=[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION PRIVATE_FLAG_REQUEST_LEGACY_EXTERNAL_STORAGE ]
|
||||||
|
dataDir=/data/user/0/com.samsung.android.provider.filterprovider
|
||||||
|
supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
|
||||||
|
usesLibraries:
|
||||||
|
android.hidl.manager-V1.0-java
|
||||||
|
android.hidl.base-V1.0-java
|
||||||
|
usesLibraryFiles:
|
||||||
|
/system/framework/android.hidl.manager-V1.0-java.jar
|
||||||
|
/system/framework/android.hidl.base-V1.0-java.jar
|
||||||
|
timeStamp=2008-12-31 16:00:00
|
||||||
|
firstInstallTime=2008-12-31 16:00:00
|
||||||
|
lastUpdateTime=2008-12-31 16:00:00
|
||||||
|
signatures=PackageSignatures{6c98c74 version:2, signatures:[b378e95c], past signatures:[]}
|
||||||
|
installPermissionsFixed=true
|
||||||
|
pkgFlags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ]
|
||||||
|
declared permissions:
|
||||||
|
com.samsung.android.provider.filterprovider.permission.READ_FILTER: prot=normal, INSTALLED
|
||||||
|
com.samsung.android.provider.filterprovider.permission.WRITE_FILTER: prot=signature, INSTALLED
|
||||||
|
com.samsung.android.provider.filterprovider.permission.RECEIVE_UPDATE: prot=signature, INSTALLED
|
||||||
|
com.sec.android.camera.permission.USE_EFFECT_FILTER: prot=signature, INSTALLED
|
||||||
|
User 0: ceDataInode=-4294835840 installed=true hidden=false suspended=false stopped=false notLaunched=false enabled=0 instant=false virtual=false
|
||||||
|
Package [com.sec.android.app.DataCreate] (d151a2):
|
||||||
|
userId=10143
|
||||||
|
pkg=Package{254559d com.sec.android.app.DataCreate}
|
||||||
|
codePath=/system/app/AutomationTest_FB
|
||||||
|
resourcePath=/system/app/AutomationTest_FB
|
||||||
|
legacyNativeLibraryDir=/system/app/AutomationTest_FB/lib
|
||||||
|
primaryCpuAbi=null
|
||||||
|
secondaryCpuAbi=null
|
||||||
|
versionCode=1 minSdk=29 targetSdk=29
|
||||||
|
versionName=1.0
|
||||||
|
splits=[base]
|
||||||
|
apkSigningVersion=2
|
||||||
|
applicationInfo=ApplicationInfo{46c7a12 com.sec.android.app.DataCreate}
|
||||||
|
flags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
|
||||||
|
privateFlags=[ PRIVATE_FLAG_ACTIVITIES_RESIZE_MODE_RESIZEABLE_VIA_SDK_VERSION ALLOW_AUDIO_PLAYBACK_CAPTURE ]
|
||||||
|
dataDir=/data/user/0/com.sec.android.app.DataCreate
|
||||||
|
supportsScreens=[small, medium, large, xlarge, resizeable, anyDensity]
|
||||||
|
timeStamp=2008-12-31 16:00:00
|
||||||
|
firstInstallTime=2008-12-31 16:00:00
|
||||||
|
lastUpdateTime=2008-12-31 16:00:00
|
||||||
|
signatures=PackageSignatures{b4da5e3 version:2, signatures:[b378e95c], past signatures:[]}
|
||||||
|
installPermissionsFixed=true
|
||||||
|
pkgFlags=[ SYSTEM HAS_CODE ALLOW_CLEAR_USER_DATA ALLOW_BACKUP ]
|
||||||
|
declared permissions:
|
||||||
|
com.sec.android.app.DataCreate.permission.KEYSTRING: prot=signature|privileged, INSTALLED
|
||||||
|
requested permissions:
|
||||||
|
android.permission.ACCESS_WIFI_STATE
|
||||||
|
android.permission.INTERNET
|
||||||
|
android.permission.ACCESS_NETWORK_STATE
|
||||||
|
android.permission.WAKE_LOCK
|
||||||
|
android.permission.GET_ACCOUNTS
|
||||||
|
android.permission.USE_CREDENTIALS
|
||||||
|
android.permission.RECEIVE_BOOT_COMPLETED
|
||||||
|
android.permission.VIBRATE
|
||||||
|
android.permission.FOREGROUND_SERVICE
|
||||||
|
android.permission.USE_FULL_SCREEN_INTENT
|
||||||
|
com.google.android.c2dm.permission.RECEIVE
|
||||||
|
install permissions:
|
||||||
|
android.permission.WRITE_SETTINGS: granted=true
|
||||||
|
com.samsung.android.launcher.permission.WRITE_SETTINGS: granted=true
|
||||||
|
android.permission.RESTART_PACKAGES: granted=true
|
||||||
|
android.permission.ACCESS_CHECKIN_PROPERTIES: granted=true
|
||||||
|
com.sec.android.app.clockpackage.permission.READ_WCCONTENT: granted=true
|
||||||
|
android.permission.BLUETOOTH: granted=true
|
||||||
|
android.permission.WRITE_MEDIA_STORAGE: granted=true
|
||||||
|
com.sec.android.app.DataCreate.permission.KEYSTRING: granted=true
|
||||||
|
android.permission.INTERNET: granted=true
|
||||||
|
com.android.browser.permission.READ_HISTORY_BOOKMARKS: granted=true
|
||||||
|
android.permission.WRITE_SECURE_SETTINGS: granted=true
|
||||||
|
android.permission.READ_PRIVILEGED_PHONE_STATE: granted=true
|
||||||
|
android.permission.WRITE_SMS: granted=true
|
||||||
|
com.sec.android.app.clockpackage.permission.WRITE_WCCONTENT: granted=true
|
||||||
|
android.permission.sec.RECEIVE_BLOCKED_SMS_MMS: granted=true
|
||||||
|
android.permission.START_ACTIVITIES_FROM_BACKGROUND: granted=true
|
||||||
|
com.android.browser.permission.WRITE_HISTORY_BOOKMARKS: granted=true
|
||||||
|
com.sec.android.app.phoneutil.permission.KEYSTRING: granted=true
|
||||||
|
android.permission.ACCESS_WIFI_STATE: granted=true
|
||||||
|
android.permission.MANAGE_APP_OPS_MODES: granted=true
|
||||||
|
User 0: ceDataInode=-4294835694 installed=true hidden=false suspended=false stopped=false notLaunched=false enabled=0 instant=false virtual=false
|
||||||
|
gids=[3002, 1023, 3003]
|
||||||
|
runtime permissions:
|
||||||
|
android.permission.READ_SMS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.READ_CALENDAR: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED]
|
||||||
|
android.permission.READ_CALL_LOG: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.RECEIVE_MMS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.READ_EXTERNAL_STORAGE: granted=false, flags=[ REVOKE_WHEN_REQUESTED|USER_SENSITIVE_WHEN_GRANTED|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.SEND_SMS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.WRITE_CONTACTS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED]
|
||||||
|
android.permission.CAMERA: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED]
|
||||||
|
android.permission.WRITE_CALENDAR: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED]
|
||||||
|
android.permission.WRITE_CALL_LOG: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.GET_ACCOUNTS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED]
|
||||||
|
android.permission.WRITE_EXTERNAL_STORAGE: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED|RESTRICTION_UPGRADE_EXEMPT]
|
||||||
|
android.permission.READ_CONTACTS: granted=false, flags=[ USER_SENSITIVE_WHEN_GRANTED]
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user