Xposed 프레임워크 Inspeckage 플러그인crash 분석

17739 단어 이동 안전
예외 정보:
E/AndroidRuntime(10336): Process: mobi.acpm.inspeckage, PID: 10336
E/AndroidRuntime(10336): java.lang.RuntimeException: Package manager has died
E/AndroidRuntime(10336):        at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:111)
E/AndroidRuntime(10336):        at mobi.acpm.inspeckage.util.PackageDetail.<init>(PackageDetail.java:44)
E/AndroidRuntime(10336):        at mobi.acpm.inspeckage.ui.MainFragment.loadSelectedApp(MainFragment.java:308)
E/AndroidRuntime(10336):        at mobi.acpm.inspeckage.ui.MainFragment.access$000(MainFragment.java:44)
E/AndroidRuntime(10336):        at mobi.acpm.inspeckage.ui.MainFragment$1.onChildClick(MainFragment.java:111)
E/AndroidRuntime(10336):        at android.widget.ExpandableListView.handleItemClick(ExpandableListView.java:716)
E/AndroidRuntime(10336):        at android.widget.ExpandableListView.performItemClick(ExpandableListView.java:655)
E/AndroidRuntime(10336):        at android.widget.AbsListView$PerformClick.run(AbsListView.java:3053)
E/AndroidRuntime(10336):        at android.widget.AbsListView$3.run(AbsListView.java:3860)
E/AndroidRuntime(10336):        at android.os.Handler.handleCallback(Handler.java:739)
E/AndroidRuntime(10336):        at android.os.Handler.dispatchMessage(Handler.java:95)
E/AndroidRuntime(10336):        at android.os.Looper.loop(Looper.java:135)
E/AndroidRuntime(10336):        at android.app.ActivityThread.main(ActivityThread.java:5305)
E/AndroidRuntime(10336):        at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(10336):        at java.lang.reflect.Method.invoke(Method.java:372)
E/AndroidRuntime(10336):        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
E/AndroidRuntime(10336):        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
E/AndroidRuntime(10336):        at de.robv.android.xposed.XposedBridge.main(XposedBridge.java:107)
E/AndroidRuntime(10336): Caused by: android.os.TransactionTooLargeException
E/AndroidRuntime(10336):        at android.os.BinderProxy.transactNative(Native Method)
E/AndroidRuntime(10336):        at android.os.BinderProxy.transact(Binder.java:496)
E/AndroidRuntime(10336):        at android.content.pm.IPackageManager$Stub$Proxy.getPackageInfo(IPackageManager.java:1786)
E/AndroidRuntime(10336):        at android.app.ApplicationPackageManager.getPackageInfo(ApplicationPackageManager.java:106)
E/AndroidRuntime(10336):        ... 17 more

문제 코드:
가방 이름:mobi.acpm.inspeckage.Module 클래스 이름: PackageDetail
mPInfo.activities = pm.getPackageInfo(app, PackageManager.GET_ACTIVITIES).activities;

분석 결과:
Binder crash가 Runtime Exception을 던진 것은 응용 프로그램 Package Info에서 데이터를 너무 많이 가져와 Binder가 전달할 수 있는 최대 용량을 초과하여 Package Manager가 붕괴되었기 때문이다.
솔루션:
  • 앱의 존재 여부를 판단하는 데 사용될 경우 정보를 적게 얻는 경우(크기<1m) 이상 없음
  • activitys(타오바오, 위챗)를 직접 획득할 수 있습니다. 현재는 안드로이드 매니페스트를 분석할 수 있습니다.xml 수령(또는 후속 Binder 메커니즘 업데이트를 기대하세요)
  • 좋은 웹페이지 즐겨찾기