-
Notifications
You must be signed in to change notification settings - Fork 0
Android code search (framework, system api, hidden api)
- 참고용: https://www.programmersought.com/ <-- 온갖 프로그램 관련 세부적인 low 지식들이 포함된 블로그
예시 )
- 디바이스 내부 path : /system/framework-res.apk 를 분석해보면 AndroidManifest.xml 에서 com.android.internal.app.ShutdownActivity 를 사용함을 알 수 있다.
- 해당 Activity, Service, API 등을 https://cs.android.com/ 찾아서 확인한 뒤, App 단에서 reflection 으로 구현한다.
//android.os.ServiceManager is hide class, we can not invoke them from SDK. So we have to use reflect to invoke these classes.
val getService = Class.forName("android.os.ServiceManager").getMethod("getService", String::class.java)
val binder = getService.invoke(Object(), Context.POWER_SERVICE) as IBinder
val mService = IPowerManager.Stub.asInterface(binder)
// reboot 시도 (PowerManager.reboot 와 동일)
// mService.reboot(false, null, false)
// PowerManager.SHUTDOWN_USER_REQUESTED = "userrequested"
mService.shutdown(false, "userrequested", false)
-
ref. Settings app : https://android.googlesource.com/platform/packages/apps/Settings.git
-
ref. Wifi framework : https://android.googlesource.com/platform/packages/modules/Wifi
-
ref. ShutdownActivity : https://android.googlesource.com/platform/frameworks/base/+/HEAD/core/java/com/android/internal/app/ShutdownActivity.java
-
ref. ServiceManager : https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/ServiceManager.java
-
ref. PowerManager : https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/os/PowerManager.java
-
ref. PowerManagerService : https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/power/PowerManagerService.java
-
ref. IPowerManager : https://android.googlesource.com/platform/frameworks/base/+/master/core/java/android/os/IPowerManager.aidl