AI手机网,短视频直播 硬改改机 一键新机 群控软件 刷机定制

 找回密码
 立即注册
搜索
查看: 5415|回复: 1

android 改机,抹机工具开发 记录文档

[复制链接]
发表于 2018-9-4 11:39:15 | 显示全部楼层 |阅读模式

一 :先贴出项目结构图,以便有个大概印象。

libs 目录:   

              存放第三方jar包

              XposedBridgeApi-52.jar 使用xposed框架所必须的,是应用与xposed框架之前的桥梁。

             AMap_Location_V3.5.0_20170731.jar 是第三方地图服务包,用来检测模拟定位功能是否正确。

hook 目录:  

            xposed 模块的hook 函数,通过这里的hook函数实现改机。

xpose目录:

             主要是实现IXposedHookLoadPackage接口

DevicesActivity.java :设备信息的显示与修改页面。

GPSActivity.java :  gps 模拟定位修改与显示页面。

TelephoneActivity.java  : 电话卡,运营商信息的显示与修改页面

WifiActivity.java  :  wifi 相关信息,蓝牙相关信息的显示与修改。


二  环境搭建

   1,root安卓手机

   2,Xposed 框架安装器。

    相关资源:

    Xposed 官网:http://repo.xposed.info/
    Xposed 项目 github 地址:https://github.com/rovo89
    Xposed 官方教程 :https://github.com/rovo89/XposedBridge/wiki/Development-tutorial

    Xposed Api 之XposedBridge.jar 下载:https://jcenter.bintray.com/de/robv/android/xposed/api/

    Xposed Installer官方下载:http://repo.xposed.info/module/de.robv.android.xposed.installer

   Xposed 框架安装器和其他安卓软件一样,将安装包安装到手机。安装完成后显示如图所示图标:

由于Android系统5.0以上默认采用了ART模式,Android系统5.0 以下默认采用Davik模式。所以目前Xposed框架主要有两个版本:一个是Android 4.0.3 to Android 4.4版本,一个是Android 5.0 以上版本, 根据自己手机型号,选择合适的版本安装。

点击进入Xposed installer:

选择 框架,开始安装框架,然后重启。重启后再次打开Xposed Installer,点击框架,

表示框架安装成功。

三,项目配置

1.下载 XposedBridgeApi jar包,并放在libs目录下。

        本项目使用的是XposedBridgeApi-52.jar

2,修改AndroidManifest.xml文件



  •          <meta-data


  •             android:name="xposedmodule"


  •             android:value="true" />


  •         <meta-data


  •             android:name="xposeddescription"


  •             android:value="varxposed" />


  •         <meta-data


  •             android:name="xposedminversion"


  •             android:value="52+" />

    xposedmodule代表的是Android程序作为Xposed中的一个模块,值为true;

    xposeddescription代表的是对本模块的功能的描述,可以自己简单叙述下就可以了;

   xposedminversion代表的是本模块开发时用到的xposed的jar包的最低版本号,这里是52,本项目使用的是XposedBridgeApi-52.jar包。

3,实现继承IXposedHookLoadPackage的子类。

   代码片段如下:



  • public class XposedMod implements  IXposedHookLoadPackage {


  •         @Override


  •         public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {

覆写handleLoadPackage方法,xposed的该方法在任何应用启动时都会被调用,故可以进入任何应用程序的进程,对某个特定的应用,启用相应的hook函数, 如果对某个应用不需要hook,直接从handleLoadPackage返回。


4,指定模块的入口

   继承IXposedHookLoadPackage的子类都可以作为xposed的入口,一个项目中可以有多个继承IXposedHookLoadPackage的子类,因此需要指定xposed的入口。方法如下:

    1)、在assets目录下新建一个名为xposed_init的文件。

    2)、在xposed_init中写入某个IXposedHookLoadPackage子类的完整类名,本项目xposed_init文件内容如下:


com.wutong.var.xpose.XposedMod

XposedMod 类目录结构如下

  

XposedMod 是继承IXposedHookLoadPackage的子类

XposedMod implements  IXposedHookLoadPackage

经过以上几步,XposedMod 的配置基本完成。

以上的配置操作相当于实现了一个没有任何hook功能的XposedMod 模块,后续就是根据具体的业务场景,实现hook。

最后,为了让XposedMod 模块生效, 需要进入Xposed installer ,选择“模块”,可以看到已经有了本模块,勾选本模块后,重启手机生效。


 楼主| 发表于 2018-9-4 11:40:48 | 显示全部楼层

本章介绍设备信息,对于改机工具,需最大可能修改所有信息。本章节只是大致记录,后续会继续丰富。

一,手机基本信息:   1,ANDROID_ID:

                     Android系统第一次启动时产生的一个64bit(16BYTES)数,如果设备被wipe还原后,该ID将被重置。

                         需要注意:对于CDMA设备,ANDROID_ID和TelephonyManager.getDeviceId() 可能返回相同的值。

   2,当前手机的系统语言,语言列表。   二,android.os.build类信息:
Build系列
android.os.Build

系统版本RELEASE获取系统版本字符串。如4.1.2 或2.2 或2.3等4.4.4
系统版本值SDK系统的API级别 一般使用下面大的SDK_INT 来查看19
品牌BRAND获取设备品牌Huawei
型号MODEL获取手机的型号HUAWEI G750-T01
IDID设备版本号HUAWEITAG-TLOO
DISPLAYDISPLAY获取设备显示的版本包(在系统设置中显示为版本号)和ID一样TAG-TLOOCO1B166
产品名PRODUCT整个产品的名称G750-T01
制造商MANUFACTURER获取设备制造商HUAWEI
设备名DEVICE获取设备驱动名称hwG750-T01
硬件HARDWARE设备硬件名称,一般和基板名称一样(BOARD)mt6592
指纹FINGERPRINT设备的唯一标识。由设备的多个信息拼接合成Huawei/G750-T01/hwG750-T01:4.2.2/HuaweiG750-T01/C00B152:user/ota-rel-keys,release-keys
串口序列号SERIAL返回串口序列号YGKBBBB5C1711949
设备版本类型TYPE主要为user 或eng.user
描述build的标签TAGS设备标签。如release-keys 或测试的 test-keysrelease-keys
设备主机地址HOST设备主机地址scmbuild
设备用户名USER基本上都为android-buildqueen
固件开发版本代号codename设备当前的系统开发代号,一般使用REL代替REL
源码控制版本号build_incremental系统源代码控制值,一个数字或者git hash值C01B166
主板board获取设备基板名称TAG-TL00
主板引导程序bootloader获取设备引导程序版本号unkonwn
Build时间timeBuild时间1476084456000
系统的API级别SDK_INT数字表示19
cpu指令集1CPU_ABI获取设备指令集名称(CPU的类型)arm64-v8a
cpu指令集2CPU_ABI2 三,MODEL 信息主要通过TelephonyManager类获取 1,手机设备相关的信息      IMEI,MEID

   IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码。其总长为15位,每位数字仅使用0~9的数字.IMEI俗称“串号”,由TAC + FAC + SNR + SP构成, 其中TAC码(IMEI的前六位数字)前三位在不同的时期会发生变化,而且即使同一部手机在不同的时期也会有不同的TAC码. IMEI码由[url=]GSM[/url](全球移动通信协会)统一分配

  MEID移动设备识别码(Mobile Equipment Identifier)是CDMA手机的身份识别码,也是每台CDMA手机或通讯平板唯一的识别码.

所以,MEID是CDMA手机的识别码,IMEI是GSM、WCDMA手机的识别码,对应到国内的运营商如下:

移动:2G使用 GSM, 3G使用 TD-SCDMA 4G使用TD-LTE联通:2G使用 GSM, 3G使用 WCDMA 4G使用TD-LTE、FDD-LTE电信:2G使用 CDMA,3G使用 CDMA2000 4G使用TD-LTE、FDD-LTE

     IMEI,MEID 是与手机绑定的,对于支持多卡的手机,或者是全网通手机,有多个IMEI和MEID号。需要留意


2,SIM卡相关的信息(每张卡有各自的相关信息)
  1)SIM卡状态

    getSimState()获取

2)ICCID

  SIM卡序列号,共有20位数字组成,不同运营商编码格式不一样。前六位数字为运营商代码:比如中国移动的为:898600;中国联通的为:898601,中国电信的为:898603。这个是唯一标识一张卡片的物理号码

  对于多卡的手机,或者是全网通手机,有多个ICCID.

  3)IMSI

国际移动用户识别码,存储在SIM卡中,是与SIM卡绑定的。IMSI由MCC、MNC、MSIN组成。 对于多卡,有多个IMSI.

  4)SIM卡运营商国家代码与网络代码(MCC+MNC)

    getSimOperator()获取

5) SIM运营商名字

getSimOperatorName()获取。

6)SIM卡提供商的国家代码

getSimCountryIso()获取

7)注册的网络运营商国家代码和网络代码

  getNetworkOperator()获取(仅当在网络中注册了有效)

8)注册的网络运营商的名字

getNetworkOperatorName()获取(仅当在网络中注册了有效)

8)注册的网络运营商的国家代码

getNetworkCountryIso()获取(仅当在网络中注册了有效)

9) 手机号

getLine1Number()获取。

3,imei/sv的软件版本号

   getDeviceSoftwareVersion()获取

4,网络类型

    getNetworkType()获取。

    联通的3G为UMTS或HSDPA,移动和联通的2G为GPRS或EGDE,电信的2G为CDMA,电信的3G为EVDO

5,手机制式

  getPhoneType() 获取

6,相邻小区的信息

getNeighboringCellInfo() 获取

7,单元格位置的装置

   getCellLocation() 获取

8,其它

语音邮件相关的标签 getVoiceMailAlphaTag()

语音邮件号码 getVoiceMailNumber()

ICC卡是否存在 hasIccCard()

四,其它硬件信息 1,屏幕参数
Display
屏幕相关

屏幕密度density屏幕密度(像素比例:0.75/1.0/1.5/2.0)2.0
屏幕密度densityDpi屏幕密度(每寸像素:120/160/240/320)480
手机内置分辨率getWidth内置好的不准确已废弃API720
手机内置分辨率getHeight 1184
x像素xdpi屏幕x方向每英寸像素点数422.03
Y像素ydpi屏幕y方向每英寸像素点数424.069
字体缩放比例scaledDensity 2.0 2,wifi 信息

  1)  本机MAC地址。

  2)WifiInfo 信息(连接上的WIFI信息)


ssidgetSSID()网络名 (路由器)
bssidgetBSSID()路由器MAC地址
networkidgetNetworkId()网络ID
网关(路由器)ipDhcpInfo来获取或其他方式
本机IPgetIpAddress()
信号强度getRssi()

3)WiFi 扫描信息,

ssidscanResult.SSID()网络名 (路由器)
bssidscanResult.BSSID()路由器MAC地址
信号强度scanResult.level()
  3,BT信息

    1)本机bt MAC

    2)已绑定的Bt 设备信息


已绑定设备名称BluetoothAdapter.getBondedDevices().bluetoothDevice.getName()
已绑定设备mac地址BluetoothAdapter.getBondedDevices().bluetoothDevice.getAddress()

   3) 搜索的BT设备信息。

   一般应用不会使用到蓝牙。查看应用蓝牙相关权限,如果没有申请,可以不模拟蓝牙相关信息。

4,cpu 信息

      一般也是通过sys 或proc 文件系统获取,如

       cat /proc/cpuinfo  某手机部分截图如下:

Processor       : AArch64 Processor rev 4 (aarch64)

processor       : 0

model name      : AArch64 Processor rev 4 (aarch64)

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd03

CPU revision    : 4



processor       : 1

model name      : AArch64 Processor rev 4 (aarch64)

Features        : fp asimd evtstrm aes pmull sha1 sha2 crc32

CPU implementer : 0x41

CPU architecture: 8

CPU variant     : 0x0

CPU part        : 0xd03

CPU revision    : 4


5 ,gpu 信息

1)gpu 的基本信息

渲染器信息: gl.glGetString(GL10.GL_RENDERER);

供应商信息 gl_vendor = gl.glGetString(GL10.GL_VENDOR);

gpu 版本信息 gl_version = gl.glGetString(GL10.GL_VERSION);

gpu 扩展信息 gl_extensions = gl.glGetString(GL10.GL_EXTENSIONS);

2)通过gpu获取到的显示屏幕信息,需要与Display类获取的信息保持一致。

3) 在/proc, /sys 目录下的GPU信息。

6,存储信息

   1)ram 信息:

    存放在系统的/proc/meminfo文件里面,可以通过读取这个文件来获取这些信息。

    部分信息如下:

cat proc/meminfo
MemTotal:        3639468 kB
MemFree:           73792 kB
MemAvailable:    1893180 kB
Buffers:          426304 kB
Cached:           737160 kB
SwapCached:        13456 kB
Active:           974856 kB
Inactive:         943720 kB
Active(anon):     403344 kB
Inactive(anon):   372204 kB

Active(file):     571512 kB

通过java层 ActivityManager.MemoryInfo(); 也可以获取。

2)rom 信息

    手机内部存储大小,手机剩余存储空间大小。

3)sdcard信息

   sdcard的存储大小等。

8,camera 信息9 ,sensor 相关信息10, 电池信息

11  /proc  ,/sys , /d目录,dmesg

      目录/sys 与/proc 下面有很多设备相关的硬件信息,而且 /sys, /proc不受系统权限控制,普通应用程序也能访问,这两个文件目录下的信息都需要伪装。部分手机有dubug文件系统信息,安装在/d 目录下,里面也有很多设备信息。

     dmesg 内核命令,应用不需要权限也是可以查看的,里面有很多系统相关信息。

五,property 信息

property中的信息与其它信息有重复的,但也有一些是独有的,这部分信息也需要修改。

  property 中信息非常多,如下截图了少部分,

[ril.official_cscver]: [C7000CHC2AQD3]
[ril.otasp_state]: [3]
[ril.prl_ver_1]: [501]
[ril.product_code]: [SM-C7000ZDECHC]
[ril.radiostate]: [10]
[ril.read.done]: [1]
[ril.rfcal_date]: [2016.07.08]
[ril.rildreset]: [768]
[ril.serialnumber]: [RV8H70EGHJX]
[ril.servicestate]: [0,1]
[ril.sib16.last.systemTime]: [1529498144025]
[ril.simillegal]: []
[ril.ss.routing]: [0,0]
[ril.subinfo]: [0:1,1:2147483644]
[ril.sw_ver]: [C7000ZCU2AQD3]
[ril.timezoneID]: [Asia/Shanghai]
[ril.wbamrstatus]: [0]
[rild.libpath]: [/system/lib64/libsec-ril.so]
[rild.libpath2]: [/system/lib64/libsec-ril-dsds.so]
[ro.adb.secure]: [1]
[ro.alarm_boot]: [false]
[ro.allow.mock.location]: [0]
[ro.am.reschedule_service]: [true]
[ro.astcenc.astcsupport]: [1]
[ro.baseband]: [msm]
[ro.bluetooth.dun]: [true]
[ro.bluetooth.hfp.ver]: [1.7]
[ro.bluetooth.sap]: [true]
[ro.board.platform]: [msm8953]
[ro.boot.baseband]: [msm]
[ro.boot.boot_recovery]: [0]
[ro.boot.bootdevice]: [7824900.sdhci]

[ro.boot.bootloader]: [C7000ZCU2AQD3]

property中的很多信息都是比设备相关的,对于检测工具来说,都可以作为判断设备的依据,需要改机软件修改。

六,各厂商定义的参数七,应用相关信息

  1,已安装的应用

  2,联系人信息

  3,开机时间

    八,位置信息

   1,当前移动终端附近移动终端的信息

  2,基站定位信息

  3,GPS定位信息

  4,wifi 定位信息(与wifi项目重叠)

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术交流售后群

QQ|小黑屋|手机版|站点找错-建议|AI手机网 |Sitemap



GMT+8, 2024-3-29 19:02 , Processed in 0.171422 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表