-
-
[讨论]关于android中APN设置的拦截方式
-
发表于: 2013-12-11 11:31 4642
-
实现了这样一个功能:不允许修改APN设置,APN设置只能使用我设置的
思路如下:
1. 本地层注入。
2. java注入。
3. 找到activityThread对象。
4. 找到activityThread的app对象(应用程序对象,名字可能不准确。
5. loadclass("PhoneApp")
6. 找到PhoneApp->phone对象,该对象时PhoneProxy类。
7. loadclass("PhoneProxy");
8. 找到PhoneProxy->activityPhone,该对象是PhoneBase类(实际上是GSMPhone或者CDMAPhone等)。
9. loadclass("DataConnectionTracker");
10 找到PhoneBase->dataconnectionTracker(实际上该对象时GSMDataConnectionTacker等)。
11. 修改DataConnectionTracker->mAllApns和mPerr...Apn(名字忘记了)。
至此,apn配置修改完毕。
binder rpc拦截,拦截ContentObserver的TRANS_onChange远程调用(该调用在Apn Setting数据库发生改变时被调用)。
简而言之,就是自己吧APN设置修改掉,并且不让Phone进程知道apn发生改变。
抛砖引玉,希望各位大神“抛玉”。
思路如下:
1. 本地层注入。
2. java注入。
3. 找到activityThread对象。
4. 找到activityThread的app对象(应用程序对象,名字可能不准确。
5. loadclass("PhoneApp")
6. 找到PhoneApp->phone对象,该对象时PhoneProxy类。
7. loadclass("PhoneProxy");
8. 找到PhoneProxy->activityPhone,该对象是PhoneBase类(实际上是GSMPhone或者CDMAPhone等)。
9. loadclass("DataConnectionTracker");
10 找到PhoneBase->dataconnectionTracker(实际上该对象时GSMDataConnectionTacker等)。
11. 修改DataConnectionTracker->mAllApns和mPerr...Apn(名字忘记了)。
至此,apn配置修改完毕。
binder rpc拦截,拦截ContentObserver的TRANS_onChange远程调用(该调用在Apn Setting数据库发生改变时被调用)。
简而言之,就是自己吧APN设置修改掉,并且不让Phone进程知道apn发生改变。
抛砖引玉,希望各位大神“抛玉”。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: