Merge pull request #297 from mvt-project/feature/dumpsys-packages-parsing

Improves Android dumpsys package parsing
This commit is contained in:
Nex 2022-08-18 13:58:59 +02:00 committed by GitHub
commit 134581c000
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 430 additions and 127 deletions

View File

@ -11,6 +11,7 @@ from rich.progress import track
from rich.table import Table
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 .base import AndroidExtraction
@ -191,43 +192,18 @@ class Packages(AndroidExtraction):
@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_permissions = False
# Get only the package information
lines = []
in_packages = False
for line in output.splitlines():
if in_permissions:
if line.startswith(" " * 4) and not line.startswith(" " * 6):
in_permissions = False
continue
if in_packages:
if line.strip() == "":
break
lines.append(line)
if line.strip() == "Packages:":
in_packages = True
permission = line.strip().split(":")[0]
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
return parse_dumpsys_package_for_details("\n".join(lines))
def _get_files_for_package(self, package_name: str) -> list:
output = self._adb_command(f"pm path {package_name}")

View File

@ -4,9 +4,9 @@
# https://license.mvt.re/1.1/
import logging
import re
from typing import Optional, Union
from mvt.android.parsers.dumpsys import parse_dumpsys_packages
from mvt.android.modules.adb.packages import (DANGEROUS_PERMISSIONS,
DANGEROUS_PERMISSIONS_THRESHOLD,
ROOT_PACKAGES)
@ -76,89 +76,6 @@ class Packages(BugReportModule):
self.detected.append(result)
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:
content = self._get_dumpstate_file()
if not content:
@ -189,12 +106,12 @@ class Packages(BugReportModule):
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:
dangerous_permissions_count = 0
for perm in result["requested_permissions"]:
if perm in DANGEROUS_PERMISSIONS:
for perm in result["permissions"]:
if perm["name"] in DANGEROUS_PERMISSIONS:
dangerous_permissions_count += 1
if dangerous_permissions_count >= DANGEROUS_PERMISSIONS_THRESHOLD:

View File

@ -387,3 +387,134 @@ def parse_dumpsys_appops(output: str) -> list:
results.append(package)
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

View File

@ -7,24 +7,36 @@ import os
from pathlib import Path
from mvt.android.modules.bugreport.appops import Appops
from mvt.android.modules.bugreport.packages import Packages
from mvt.common.module import run_module
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/")
m = Appops(target_path=fpath)
m = module(target_path=fpath)
folder_files = []
parent_path = Path(fpath).absolute().as_posix()
for root, subdirs, subfiles in os.walk(os.path.abspath(fpath)):
for file_name in subfiles:
folder_files.append(os.path.relpath(os.path.join(root, file_name), parent_path))
m.from_folder(fpath, folder_files)
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.timeline) == 16
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

View File

@ -4,7 +4,8 @@
# https://license.mvt.re/1.1/
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
@ -43,3 +44,18 @@ class TestDumpsysParsing:
assert res[2]["package_name"] == "com.whatsapp"
assert res[3]["event"] == "end_top"
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

View File

@ -124,3 +124,128 @@ DUMP OF SERVICE appwidget:
Providers:
[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

View 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]