Tại sao các ứng dụng bị vô hiệu hóa vẫn chạy?


8

Tôi đã nhận thấy rằng các ứng dụng (như Google Sync Sync) đã bị vô hiệu hóa bằng trình quản lý ứng dụng Android (KitKat) vẫn hiển thị như đang chạy khi sử dụng các công cụ quan sát quá trình. Điều này đúng ngay cả sau khi thiết bị đã được khởi động lại.

Tại sao các ứng dụng bị vô hiệu hóa vẫn chạy? Có cách nào hiệu quả (và an toàn) để thực sự vô hiệu hóa chúng không?

Các giải pháp yêu cầu quyền root được chấp nhận.

(Lưu ý rằng đối với ví dụ cụ thể ở trên, bạn có thể yêu cầu Android không đồng bộ hóa danh bạ của mình, nhưng nó vẫn chạy quy trình Đồng bộ hóa danh bạ của Google. Nhưng chúng ta đừng tập trung vào ví dụ đó ... đó chỉ là một ví dụ.)


Ngay bên cạnh nút "Vô hiệu hóa" là nút "Buộc dừng". Nhấn nó và quá trình sẽ chấm dứt và không bắt đầu nữa.
GiantTree

@GiantTree Cảm ơn. Sau khi khởi động lại, nó sẽ không bắt đầu lại chứ?
RockPaperLizard

4
Trong trường hợp của bạn, bởi vì một ứng dụng hệ thống đã gọi một cách rõ ràng một dịch vụ xuất khẩu của gói đó và cách duy nhất để giết chết quá trình đó (và bất kỳ cách nào khác) là bằng cách chủ động giết nó bằng Greenify, Amplify (yêu cầu Xposed) hoặc các ứng dụng tương tự. Lưu ý: rằng điều này không nên xảy ra và nên được coi là một lỗi, bởi vì Trình quản lý gói có nhiệm vụ không cho phép ứng dụng bị vô hiệu hóa chạy.
GiantTree

1
Về vấn đề đó, tôi đã vô hiệu hóa tất cả các dịch vụ, người nhận, hoạt động và nhà cung cấp nội dung cũng như vô hiệu hóa ứng dụng SystemUI. Khởi động lại thiết bị và đoán xem ứng dụng vẫn được tải vào bộ nhớ (không phải là trường hợp với pm block/hide) khiến tôi tự hỏi điều gì khiến ứng dụng được tải bây giờ. Một vấn đề khác là trong khi nó được tải vào bộ nhớ, bạn có thể quan sát sự vắng mặt hời hợt của nó bằng cách thiếu nền, chủ đề, thanh trạng thái và hơn thế nữa. Có lẽ, một câu hỏi mới có thể được đưa ra từ đây.
Firelord

1
@Firelord Tôi đoán đó là những gì tôi đã chỉ ra ở trên: nếu bạn tắt một ứng dụng thì nó chỉ bị "đánh dấu bị vô hiệu hóa" (và không hiển thị trong launcher, v.v.) - nhưng nó vẫn được đăng ký với hệ thống (trình quản lý gói), vì vậy các ứng dụng khác có thể tìm thấy nó và gọi ý định của nó. Có vẻ như ẩn / chặn khá giống với "gỡ bỏ cài đặt .apkvà dữ liệu phía sau" - vì vậy ứng dụng này "hoàn toàn không được đăng ký và vô hình với mọi thứ trừ trình quản lý tệp", vì vậy các ứng dụng khác không còn có thể gọi ý định của nó vì chúng có thể Không tìm thấy chúng.
Izzy

Câu trả lời:


7

Android của bạn không cần phải có quyền truy cập root để thực sự vô hiệu hóa một ứng dụng, nếu bạn đã có phiên bản 4.4.x trở lên. Tất cả những gì bạn cần là thiết lập trong PC và gỡ lỗi USB được bật trong thiết bị chưa root hoặc ứng dụng giả lập thiết bị đầu cuối cho thiết bị đã root (bạn cũng có thể sử dụng adb).

Nếu bạn kiểm tra pmsử dụng Gói Manger's ( ), bạn sẽ thấy

chặn chiều [--user USER_ID] PACKAGE_OR_COMPONENT ")
chiều bỏ chặn [--user USER_ID] PACKAGE_OR_COMPONENT ")

Đối với Lollipop, nó sẽ là

pm ẩn [--user USER_ID] PACKAGE_OR_COMPONENT ")
pm bỏ ẩn [--user USER_ID] PACKAGE_OR_COMPONENT ")

Để chặn hoặc ẩn gói (an toàn), chỉ cần làm

pm block PACKAGE # for KitKat
pm hide PACKAGE  # for Lollipop

Để bỏ chặn hoặc bỏ ẩn gói, làm

pm unblock PACKAGE #for KitKat 
pm unhide PACKAGE  # for Lollipop

PACKAGE→ tên gói của một ứng dụng. Để biết tên gói của ứng dụng:

Nối adb shelltrước lệnh để thực thi chúng từ PC.

Hàm ẩn đằng sau có nhận xét sau bên trong mã nguồn

Đặt gói ở trạng thái ẩn, gần giống như trạng thái được gỡ cài đặt, làm cho gói không khả dụng, nhưng nó không xóa dữ liệu hoặc tệp gói thực tế. Ứng dụng có thể được mở bằng cách đặt lại trạng thái ẩn hoặc cài đặt nó

Nhận xét tương tự được thực hiện cho khối ở đây .

Để xác minh khiếu nại, bạn có thể sử dụng một số dịch vụ hệ thống như meminfo, procstatsactivitysử dụng dumpsys công cụ hoặc thậm chí liệt kê tất cả các quá trình sử dụng ps. Bạn sẽ không tìm thấy sự hiện diện tích cực của ứng dụng bị chặn / ẩn.

Điều tương tự cũng xảy ra với rất nhiều ứng dụng hệ thống bị vô hiệu hóa bằng GUI hoặc pm disablenhưng không phải cho mọi ứng dụng vì ngay cả một ứng dụng bị vô hiệu hóa cũng có thể nhận được các chương trình phát sóng mà nó đã đăng ký, chỉ có thể được thực hiện nếu được tải vào bộ nhớ 1 . Tuy nhiên, một ứng dụng bị vô hiệu hóa không thể tự hoạt động, ứng dụng này cũng không thể được thực thi.

Tôi đã tranh luận một số khác biệt giữa ẩn / chặnvô hiệu hóa trong câu hỏi chiều của tôi, ẩn VS pm vô hiệu hóa - cuộc khủng hoảng danh tính . Nó chỉ cung cấp thông tin bổ sung cho câu trả lời này để bạn có thể bỏ qua nó.

BIÊN TẬP:

Có vẻ như kỹ thuật này không hoạt động đối với tất cả các ứng dụng trên Android KitKat. Trong trường hợp đó, chỉ cần thu hồi quyền đọc từ APK của ứng dụng hoặc xóa phần mở rộng .APK khỏi tên tệp của ứng dụng (sau này được đề xuất bởi Jaskaranbir một lần), sau đó là khởi động lại mềm / đầy đủ. Điều này giống như xóa một ứng dụng khỏi hệ thống, chỉ khác là tất cả các tệp sẽ vẫn ở vị trí của chúng.

Cả hai bước có thể được thực thi bằng bất kỳ ứng dụng quản lý tập tin gốc nào. Cách dòng lệnh là:

adb shell su -c 'chmod 000 /data/app/PACKAGE*'             # 000 means no read-write-executable permission to user,group and others. 
adb shell su -c 'mv /data/app/PACKAGE* /data/app/PACKAGE'  # doing renaming by moving the file
adb reboot

1: Thiếu bằng chứng kỹ thuật để hỗ trợ thực tế


Câu trả lời chính xác! Cảm ơn bạn! Trước tiên, tốt nhất là tắt ứng dụng bằng trình quản lý ứng dụng Android gốc hay tốt nhất để đảm bảo ứng dụng không bị tắt ở đó?
RockPaperLizard

Không cần phải tắt ứng dụng nếu bạn đang chọn pm block/hideđể không bị ảnh hưởng.
Firelord

Nếu nó đã bị vô hiệu hóa, tốt nhất là kích hoạt lại nó?
RockPaperLizard

1
Điều này thật kỳ quái. Tôi đã thử nghiệm chặn systemui trên Kitkat của tôi và thật ngạc nhiên, khối đang hoạt động giống như vô hiệu hóa, ứng dụng này vẫn nằm trong bộ nhớ. Quá trình SystemUI bị rẽ nhánh ngay cả khi tôi giết nó. Không biết đó là lỗi hay hành vi mong muốn, nhưng trong mọi trường hợp, nó trái ngược với kết quả liên quan đến Lollipop của tôi được nêu trong câu trả lời. Tôi đoán bây giờ câu trả lời là khá vô dụng.
Firelord

1
@RockPaperLizard, tôi quên nói với bạn một mẹo rất đơn giản. Thu hồi quyền đọc của tệp gói (hoặc thư mục cơ sở, trong trường hợp Lollipop), khởi động lại và thực hiện cho tốt. Ví dụ: với quyền root, bạn có thể dừng SystemUI theo cách này , adb shell su -c "chmod 111 /system/app/SystemUI.apk". 111 có nghĩa là chỉ đặt quyền thực thi cho chủ sở hữu, nhóm và những người khác. Khởi động lại và ứng dụng sẽ bị thiếu cho hệ thống. Bạn có thể thiết lập nó 000là tốt.
Firelord
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.