IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android系统反编译FrameWork层虚拟定位方法 -> 正文阅读

[移动开发]Android系统反编译FrameWork层虚拟定位方法

首次发帖,如有不规范的地方还望多多包涵
起因是因为需要做模拟定位的功能,最终是过金融类app的定位 ,root、框架分分钟被砍死
迫于无奈,直接从操作系统入手,反正hook也不过是hook那几个系统里的类,直接改系统的类和函数应该一样的效果吧
在android6.0下已经过三大地图、过短视频平台
在android7.0下目前只过了自己的测试app,也能扰乱三大地图的精准定位,但是不能像6.0一样模拟自己的位置信息
所以感觉是7.0对比6.0 谷歌开放了一些获取gps底层数据的地方 如若有知道的 还望赐教

先总体说一下都改了什么吧,筛选wifi列表(除了白名单的app,其他一律返回null),自定义上次连接的wifi网卡地址,WIFI模拟成流量、禁止返回wifi任何信息、wifi配置信息返回null、GSM基站信息写入、CDMA基站信息写入、GPS修改、有效卫星修改

一共改了这些地方,

众所周知目前依靠wifi和你附近wifi列表就可以给你精准定位了,比如我在未做修改的时候,wifi列表有附近周围的wifi,导航就直接精准定位我在哪栋楼了,而我屏蔽周围wifi以后,导航只能定位到小区门口去了

所以从framework层禁止向app返回相关wifi信息是必须要做得,然后就是其他相关类进行反编译和修改 然后push到手机就可以了

说些准备工作,首先你要知道android系统在5.0起就用了art来把代码提前优化,所以需要在system/framework下 找到对应手机架构的oat文件,查看手机架构的命令是shell 下 getprop ro.product.cpu.abi

如果你手机是arm64架构 就去arm64文件夹下找oat文件,如果是arm就去arm下把oat文件找到

在android6.0下, 这个文件是boot.oat,在这里文件里就可以提取出所有安卓的系统代码(java层的)也就是framework层

在android7.0下,不同的包被拆分成不同的oat文件,所以在这个文件夹下会有许多的oat文件

这里是EMUI系统的oat文件, 我们只需要解包这些oat就可以,目录下的art文件我们用不到

用oat2dex.jar工具来解包这些oat文件 java -jar oat2dex.jar -h

解包后就拿到了包含源代码的dex文件,dex直接拖进jadx-gui就看到了友商的系统源码,当然只是framework层

修改java代码自然是用smali了 smali-2.5.2和baksmali-2.5.2分别负责把dex文件输出为smali文件和回编成dex文件

但是需要注意framework-boot.oat解包后 你会发现一般这个oat下包含两个dex文件 classes.dex和classes2.dex

而其他oat下一般只包含一个,这个原因是因为一个dex文件内最多包含65535个函数,超过这个函数,就需要classes2.dex了

所以我们在添加自己的类时,需要把类放在classes2.dex里面,比如我把读取配置文件的类,写在了classes2里,这个类主要是负责读取/sdcard/下的一个文本文档,这里面写的就是各种gps坐标、虚拟wifi信息等

以修改location举例,我们知道,在framework层,获取到的经纬度坐标,最终来自于一个Location对象,这个类在classes.dex里,路径是android.location.location;


有人可能会问,你怎么知道是来自这个对象呢,比如我们知道在app代码里如果要获取一个地理位置,通常我们调用mLocationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);


那么好,我们打开系统源码,可以看到这个location管理类调用的方法,调来调去,最终是到达了这个地方

.

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-10 22:41:17  更:2022-03-10 22:42:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 16:58:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码