앱에서 네트워크 위치 및 gps 위치가 아닌 모의 위치를 사용하는 것을 탐지하려면 아래와 같이 작성 하면 됩니다.
1. 현재 기기에 MockSetting 옵션이 ON 인지를 검사하여 탐지 하는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 | public static boolean isMockSettingsON(Context context){ boolean isMockLocation=false; try{ if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.M){ AppOpsManager opsManager=(AppOpsManager)context.getSystemService(Context.APP_OPS_SERVICE); isMockLocation=(opsManager.checkOp(AppOpsManager.OPSTR_MOCK_LOCATION,android.os.Process.myUid(), BuildConfig.APPLICATION_ID)==AppOpsManager.MODE_ALLOWED); }else{ isMockLocation=!Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ALLOW_MOCK_LOCATION).equals("0"); } }catch (Exception e){ return isMockLocation; } return isMockLocation; | cs |
2. 설치 된 앱 중에서 모의위치 활용 권한을 가지는 앱이 있는지 탐지
모의 위치 권한이 있는 앱이 있다는 것은 모의 위치를 활용할 가능성이 있기 때문에 이러한 탐지를 활용하는 것도 괜찮은 방법이라고 생각 합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public static boolean areThereMockPermissionApps(Context context){
boolean isMockLocation=false;
PackageManager packageManager=context.getPackageManager();
// 설치된 어플리케이션 목록을 가져옴.
List<ApplicationInfo> packages=packageManager.getInstalledApplications(PackageManager.GET_META_DATA);
for(ApplicationInfo applicationInfo:packages){
try {
// 해당 패키지의 권한을 가져옴.
PackageInfo packageInfo=packageManager.getPackageInfo(applicationInfo.packageName,
PackageManager.GET_PERMISSIONS);
String[] requestedPermissions=packageInfo.requestedPermissions;
if(requestedPermissions!=null){
for(int i=0;i<requestedPermissions.length;i++){
if(requestedPermissions[i].equals("android.permission.ACCESS_MOCK_LOCATION")){
isMockLocation=true;
break;
}
}
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
}
return isMockLocation;
}
|
**uid : app을 설치하면 안드로이드는 package를 base로 unique한 default UID를 생성합니다.
이 UID를 통해서 개인의 resource를 접근할 수 있고, storage space에 대한 권한도 획득 할 수 있습니다.
어떤 package가 그 UID를 더 이상 사용하지않는다면 삭제됩니다.
<manifest> tag의 android:shareUserId 속성을 통해, 그리고 같은 sign key로 서명되어 있다면 어러개의 app에서 UID를 공유할 수 있지만 단점이 있습니다.
같은 UID를 공유한다는 것은 서로의 private data나 resource에 접근할 수 있다는 것을 의미하며, 같은 process에서 run될 수 도 있습니다.
내용이 도움이 되셨거나 초보 블로거를 응원하고 싶으신 분은 아래 하트♥공감 버튼을 꾹 눌러주세요!
내용의 수정이 있거나 도움이 필요하신 분은 댓글을 남겨주세요!
'Android' 카테고리의 다른 글
Dagger란? -dagger 시작 (1) | 2020.04.21 |
---|---|
안드로이드Q 개인정보 보호정책 변경사항 (0) | 2020.01.06 |
[Android]Retrofit을 이용한 apk 파일 다운로드 및 설치 (20) | 2019.06.26 |
FileUriExposedException 오류 File Provider 로 해결 (0) | 2019.06.25 |
안드로이드 4대 컴포넌트란 무엇인가? -Service (0) | 2019.03.30 |