Android 장치 관리자 구멍
12178 단어 android
현재 '역대 최 강 안 드 로 이 드 목마' 로 불 리 는 바이러스 Backdoor. AndroidOS. Obad. a 는 안 드 로 이 드 기기 관리자 구멍 을 이용 해 사용자 가 정상 적 인 방식 으로 마 운 트 를 해제 할 수 없 도록 하고 있다.사실 이 구멍 은 이미 작년 말 에 발견 되 었 다.( http://www.anguanjia.com/?c=news_view&id=435 )
'장치 관리자' 로 등 록 된 응용 프로그램 은 직접 마 운 트 해제 할 수 없습니다.'장치 관리자' 활성 화 를 취소 한 후에 야 바로 마 운 트 해제 할 수 있 습 니 다.
목 마 는 안 드 로 이 드 기기 관리자 구멍 을 이용 해 기기 관리자 목록 에 '은신' 효 과 를 낼 수 있다.이렇게 하면 사용 자 는 '활성화 취소' 페이지 에 들 어가 서 마 운 트 해제 할 수 없 는 목적 을 달성 할 수 없습니다.
영향 버 전 android 2.2 이상
3. 구멍 원리
우선 Settings app 이 장치 관리자 목록 을 어떻게 만 드 는 지 살 펴 보 겠 습 니 다.
관련 클래스:
packages\apps\settings\src\com\android\settings\DeviceAdminSettings.java
1 public class DeviceAdminSettings extends ListFragment {
2
3 DevicePolicyManager mDPM;
4 final HashSet<ComponentName> mActiveAdmins = new HashSet<ComponentName>();
5 final ArrayList<DeviceAdminInfo> mAvailableAdmins = new ArrayList<DeviceAdminInfo>();
6
7 @Override
8 public void onResume() {
9 super.onResume();
10 updateList();
11 }
12
13 void updateList() {
14 mActiveAdmins.clear();
15 List<ComponentName> cur = mDPM.getActiveAdmins();
16 if (cur != null) {
17 for (int i=0; i<cur.size(); i++) {
18 mActiveAdmins.add(cur.get(i));
19 }
20 }
21
22 mAvailableAdmins.clear();
23 List<ResolveInfo> avail = getActivity().getPackageManager().queryBroadcastReceivers(
24 new Intent(DeviceAdminReceiver.ACTION_DEVICE_ADMIN_ENABLED),
25 PackageManager.GET_META_DATA);// Intent Filter ”android.app.action.DEVICE_ADMIN_ENABLED“
26 int count = avail == null ? 0 : avail.size();
27 for (int i=0; i<count; i++) {
28 ResolveInfo ri = avail.get(i);
29 try {
30 DeviceAdminInfo dpi = new DeviceAdminInfo(getActivity(), ri);
31 if (dpi.isVisible() || mActiveAdmins.contains(dpi.getComponent())) {
32 mAvailableAdmins.add(dpi);
33 }
34 // && Intent Filter ”android.app.action.DEVICE_ADMIN_ENABLED“
35 } catch (XmlPullParserException e) {
36 Log.w(TAG, "Skipping " + ri.activityInfo, e);
37 } catch (IOException e) {
38 Log.w(TAG, "Skipping " + ri.activityInfo, e);
39 }
40 }
41
42 getListView().setAdapter(new PolicyListAdapter());
43 }
44
45 .......
46
47 class PolicyListAdapter extends BaseAdapter {
48 .......
49
50 public void bindView(View view, int position) {
51 final Activity activity = getActivity();
52 ViewHolder vh = (ViewHolder) view.getTag();
53 DeviceAdminInfo item = mAvailableAdmins.get(position);// mAvailableAdmins
54 vh.icon.setImageDrawable(item.loadIcon(activity.getPackageManager()));
55 vh.name.setText(item.loadLabel(activity.getPackageManager()));
56 vh.checkbox.setChecked(mActiveAdmins.contains(item.getComponent()));
57 try {
58 vh.description.setText(item.loadDescription(activity.getPackageManager()));
59 } catch (Resources.NotFoundException e) {
60 }
61 }
62 }
63
64 }
Android Settings App 소스 코드 를 통 해 알 수 있 듯 이 장치 관리자 목록 에 사용 가능 한 장치 관리자 프로그램 이 검색 을 통 해 표 시 됩 니 다. "IntentFilter 동작 은 android. app. action. DEVICE ADMIN ENABLED" 이 며 "< meta - data android: name =" android. app. device admin "android: resource =" @ xml / xxx "/ >" 의 Receiver 를 갖 추고 있 습 니 다.
등록 장치 관리자 에 대해 서 는 Intent Filter 가 필요 하지 않 고 meta - data 만 있 으 면 됩 니 다.
장치 관리자 목록 에 '은신' 을 하려 면 Intent Filter 를 가지 고 장치 관리 자 를 등록 하지 않 으 면 사용자 가 장치 관리자 의 활성 화 를 취소 할 수 없고 이 앱 을 마 운 트 해제 할 수 없습니다.
POC 코드 AndroidMainfest. xml 파일 등록 구성 요소:
1 <receiver Android:name=".deviceAdminReceiver" android:label="@string/app_name"
2 Android:description="@string/description" android:permission="android.permission.BIND_DEVICE_ADMIN">
3
4 <meta-data Android:name="android.app.device_admin"
5 Android:resource="@xml/device_admin" />
6
7 </receiver>
자바 코드 등록 활성화 장치 관리자:
1 Intent intent = new Intent(DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN);
2 ComponentName mDeviceComponentName = new ComponentName("packagename","packagename.deviceAdminReceiver");
3 intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN,
4 mDeviceComponentName);
5 this.startActivity(intent,0);
관련 링크 http://www.anguanjia.com/?c=news_view&id=435 http://blog.csdn.net/jiazhijun/article/details/9045773
본문
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.