2012-08-14 35 views
6

Tôi không muốn quảng cáo nhưng ứng dụng mẫu cho hành vi ứng dụng của tôi là chống vi-rút ESET.điều khiển di động android

Một tính năng được yêu cầu trong đơn đăng ký của tôi là mật khẩu cần gỡ cài đặt là cần thiết. Tôi thêm ứng dụng của mình vào danh sách quản trị thiết bị và không thể gỡ cài đặt ứng dụng ngay bây giờ. Nhưng bạn có thể ứng dụng Deactive làm thiết bị quản trị. Bạn hãy vào Cài đặt> Vị trí & bảo mật> Chọn quản trị viên thiết bị và bạn cố gắng bảo mật ESET Security nó bắt đầu hoạt động (tôi đoán từ DeviceAdminReceiver.onDisableRequested()) đang chờ mật khẩu và điện thoại của bạn bị khóa. Nút Home, nút quay lại và thậm chí nút SwitchOff không phản ứng =>

Nút Home, Back, SwitchOff và Camera có thể phản ứng như thế nào?

EDIT - Câu hỏi thứ hai loại bỏ (Sau khi tôi lấy ra pin từ điện thoại của tôi - ESET đã không quản trị thiết bị quá)

Cảm ơn bạn đã ý tưởng.

+1

Cảm ơn bạn đã chỉ ra những vấn đề bảo mật này trong Android. Thông thường, bạn sẽ làm điều này bằng cách gửi email đến [email protected] thay vì bằng cách đăng nó ở những nơi như StackOverflow. Các ứng dụng SDK thông thường sẽ không thể thực hiện những gì bạn trích dẫn ở đây và tôi sẽ dành một chút thời gian để xác định điều này xảy ra như thế nào để đảm bảo rằng nó đã được sửa. – CommonsWare

Trả lời

2

Ok, xin lỗi ESET nhưng tính năng này trông rất thú vị nên tôi đã xem xét các nguồn dịch ngược :)

Các công việc cơ bản như sau:

  • com.eset.ems.antitheft.receiver.AdminReceiver lớp con của DeviceAdminReceiver được đăng ký hoạt động phát sóng DEVICE_ADMIN_ENABLEDDEVICE_ADMIN_DISABLED
  • Khi quản trị thiết bị bị vô hiệu hóa com.eset.ems.antitheft.receiver.AdminReceiver.onDisabled() được gọi
  • com.eset.ems.antitheft.LockActivity được bắt đầu từ AdminReceiver.onDisabled()
  • LockActivity lãm com.eset.ems.antitheft.LockingDialog nơi chặn kỳ diệu nhất xảy ra

Đối với Trang chủ và nút chặn chống virus khác làm các trick sau - nó sử dụng ActivityManagerNative từ internals Android. Để giữ LockActivity ở đầu tất cả các hoạt động khác, nó bắt đầu một chuỗi liên tục gọi ActivityManagerNative.moveTaskToFront() với LockActivity ID nhiệm vụ. Trước khi phản ánh mức API 10 được sử dụng để truy cập ẩn moveTaskToFront() từ lớp ActivityManager và sau API 10, nó chỉ sử dụng mã số ActivityManagerNative từ cơ sở mã Android để truy cập nó. Đồng thời cả hai phương thức LockActivityLockingDialog gọi ActivityManagerNative.closeSystemDialogs(). Có lẽ điều này được thực hiện để hủy bỏ hộp thoại hệ thống phát sinh sau khi nhấn và giữ nút nguồn.

Đối với việc ngừng thực hiện DeviceAdminReceiver.onDisableRequested thực sự tôi đã không nhận thấy bất kỳ điều gì đặc biệt về nó trong mã. Nó chỉ bắt đầu hoạt động sau khi quản trị viên thiết bị bị vô hiệu hóa và đó là tất cả. Và trên quản trị thiết bị điện thoại của tôi đã bị tắt sau khi tôi tháo pin ra.

+0

Tôi rất vui được cung cấp cho bạn các điểm của tôi. Cảm ơn bạn. Câu trả lời duy nhất và hữu ích sau 7 tháng. Bây giờ tôi sẽ cố gắng đạt được điều này với những phát hiện của bạn. Làm thế nào bạn tìm ra cách nó hoạt động? Tôi có thể hỏi bạn sau này để biết thêm thông tin không? – vlkpo

+3

Cảm ơn bạn về câu hỏi hay. Tôi đã sử dụng công cụ dex2jar (https://code.google.com/p/dex2jar/) để chuyển đổi các tệp classes.dex được trích xuất từ ​​gói chống vi-rút ESET.Nó tạo ra tệp jar thông thường có thể được xem với bất kỳ trình dịch ngược nào (đặc biệt là tôi sử dụng JD từ http://java.decompiler.free.fr/, có lẽ là trình giải mã Java miễn phí tốt nhất). Trên thực tế đó là tất cả, sau đó tôi đã có các tập tin mã nguồn và có thể thấy nó hoạt động như thế nào. Tôi chỉ nhận thấy từ logcat rằng LockActivity đang được khởi chạy khi tôi vô hiệu hóa quản trị thiết bị cho ESET antivirus và lấy nó như là một điểm khởi đầu. –

+0

@AndreiMankevich Bạn có thể xem xét http://stackoverflow.com/questions/40282857/device-admin-confirm-before-deactivate và đề xuất cho tôi suy nghĩ của bạn về nó không? – Smeet

Các vấn đề liên quan