Android设备信息攻略之硬件信息build
来源:互联网 发布:unity3d 地图制作 编辑:程序博客网 时间:2024/06/06 21:44
最近又懒又忙,所以很久没写博客了~
因为项目需要,我把某社交软件稍微破解了下,重打包后实现了一机多开。本以为一劳永逸,没想到一周多之后,多开的那几个APP副本被告知“非法客户端”,账户都被强退,冻结了,这就有点尴尬了。
不过,从它没有立即处理,而是过了一周才处理,可以推测并不是本地检测,而是服务器检测。
那么,服务器是怎么把这些账户给毙了呢?实际上,不管它是用大数据分析检测,人工检测或者其他什么检测方式,它都少不了一个行为:数据收集。
通过逆向分析,从客户端的网络请求接口Hook到的数据可以分析出,里面包含了大量的Android设备信息,这无疑为服务器提供了检测的材料。
So,伪造数据,欺骗服务器呗~
后来,通过Hook技术一顿修改设备信息,现在的多开已基本稳定,总算解决了问题。
这里,先对设备的硬件信息进行研究,随笔一下~
-----------------------------知己知彼-------------------------------
build.prop文件
这个文件在手机的system目录下,可以通过adb shell把它copy到sdcard,再pull命令拉出来:
这里以ZTE手机为例,将build.prop文件打开,看看里面的信息。
因为文件内重要的信息就在前面,也就是一堆键值对,这里就不全弄出来了:
# begin build properties# autogenerated by buildinfo.shro.build.id=LMY47Vro.build.display.id=N928Dt_CNMobileB_1.18ro.build.sw_internal_version=N928Dt_Z78_CN_MSXPH1C500J118ro.build.sw_outer_version=N928Dt_CNMobileB_1.18ro.build.version.incremental=eng.jiangxiaojun.20150829.170221ro.build.version.sdk=22ro.build.version.codename=RELro.build.version.all_codenames=RELro.build.version.release=5.1.1ro.build.date=Sat Aug 29 17:03:44 CST 2015ro.build.date.utc=1440839024ro.build.type=userro.build.user=jiangxiaojunro.build.host=hipad25ro.build.tags=release-keysro.build.flavor=N928Dt-userro.product.model=ZTE N928Dtro.product.brand=ZTEro.product.name=N928Dtro.product.device=N928Dtro.product.board=msm8909# ro.product.cpu.abi and ro.product.cpu.abi2 are obsolete,# use ro.product.cpu.abilist instead.ro.product.cpu.abi=armeabi-v7aro.build.display.dcc.version=N928Dt.user.V1.18.Rev14539.20150829ro.build.display.software.id=N928Dt_Z78_CN_MSXPH1C500J118ro.build.display.hardware.id=P1ro.build.display.hardware=P1ro.product.svn.info=14539ro.product.cpu.abi2=armeabiro.product.cpu.abilist=armeabi-v7a,armeabiro.product.cpu.abilist32=armeabi-v7a,armeabiro.product.cpu.abilist64=ro.product.manufacturer=ZTEro.product.locale.language=zhro.product.locale.region=CNro.wifi.channels=ro.board.platform=msm8909# ro.build.product is obsolete; use ro.product.devicero.build.product=N928Dt# Do not try to parse description, fingerprint, or thumbprintro.build.description=N928Dt-user 5.1.1 LMY47V eng.jiangxiaojun.20150829.170221 release-keysro.build.fingerprint=ZTE/N928Dt/N928Dt:5.1.1/LMY47V/jiangxiaojun08291703:user/release-keysro.build.characteristics=default# end build properties## from device/qcom/N928Dt/system.prop### system.prop for msm8909#在文件中,我们可以看到了许多与设备硬件信息相关的参数。
当然,你可以通过修改build.prop文件后,再push回去覆盖源文件也是可以修改手机信息的,不过听说一不小心会变砖哦,不建议~
Build类获取参数
可以直接在工具里输入Build类后加个“.”,可以显示出Build类能获取到的所有参数,下面列举出来,其中注释的是比较重要的,也就是服务器喜欢校验的数据:
public void printDeviceHardwareInfo(){ Log.d("zz", "---------------Build------------"); Log.d("zz", "Build.BOARD: "+Build.BOARD); Log.d("zz", "Build.BOOTLOADER: "+Build.BOOTLOADER); Log.d("zz", "Build.BRAND: "+Build.BRAND);//设备牌子 Log.d("zz", "Build.DEVICE: "+Build.DEVICE);//设备名 Log.d("zz", "Build.DISPLAY: "+Build.DISPLAY);//显示设备号 Log.d("zz", "Build.FINGERPRINT: "+Build.FINGERPRINT);//设备指纹 Log.d("zz", "Build.HARDWARE: "+Build.HARDWARE); Log.d("zz", "Build.HOST: "+Build.HOST); Log.d("zz", "Build.ID: "+Build.ID);//设备硬件id Log.d("zz", "Build.MANUFACTURER: "+Build.MANUFACTURER);//厂商 Log.d("zz", "Build.MODEL: "+Build.MODEL);//设备型号 Log.d("zz", "Build.PRODUCT: "+Build.PRODUCT);//产品名,和DEVICE一样 Log.d("zz", "Build.SERIAL: "+Build.SERIAL);//设备序列号 Log.d("zz", "Build.TAGS: "+Build.TAGS); Log.d("zz", "Build.TYPE: "+Build.TYPE); Log.d("zz", "Build.UNKNOWN: "+Build.UNKNOWN); Log.d("zz", "Build.USER: "+Build.USER); Log.d("zz", "Build.CPU_ABI: "+Build.CPU_ABI); Log.d("zz", "Build.CPU_ABI2: "+Build.CPU_ABI2); Log.d("zz", "Build.RADIO: "+Build.RADIO); Log.d("zz", "Build.TIME: "+Build.TIME);//出厂时间 Log.d("zz", "Build.VERSION.CODENAME: "+Build.VERSION.CODENAME); Log.d("zz", "Build.VERSION.INCREMENTAL: "+Build.VERSION.INCREMENTAL);//不详,重要 Log.d("zz", "Build.VERSION.RELEASE: "+Build.VERSION.RELEASE);//系统版本号 Log.d("zz", "Build.VERSION.SDK: "+Build.VERSION.SDK);//api级数 Log.d("zz", "Build.VERSION.SDK_INT: "+Build.VERSION.SDK_INT);//api级数,int型返回 }结果就不打印了,基本上上面的信息都能在build.prop文件里找到,也非常好找。
当然,服务器一般不会单独的校验某一项,有可能会把一堆信息拼接起来,然后做个MD5编码出来进行校验。
SystemProperties类获取Build参数
SystemProperties这个类是不对上层开放的,所以要通过反射机制获取到该类的“get”方法,然后通过该方法获取手机Build.prop文件中的参数。
P.S.有一些客户端就是那么阴险,喜欢绕过Build类,通过下层接口来获取硬件信息~
就拿Build.FINGERPRINT这个参数来举个栗子吧,这个参数在build.prop文件里对应的key为“ro.build.fingerprint”,那么:
try{Class systemProperties=Class.forName("android.os.SystemProperties");Method get=systemProperties.getDeclaredMethod("get", String.class);String fingerprint=(String)get.invoke(null, "ro.build.fingerprint");Log.d("zz", "Fingerprint:"+fingerprint);}catch (Exception e){}结果我就不打印了,基本也就这样,很简单。
SystemProperties类还能获取到Build类获取不到的信息,有兴趣的可自行研究一下或者百度一下,这里就不多说了。
----------------------------攻---------------------------
下面的内容业内人士一看就懂,我就不多说了。关于Xposed使用,可以自行百度,我也写过相关博客。
对于Build类:
直接修改Build类的static变量
XposedHelpers.setStaticObjectField(className, fieldName, object);
对于SystemProperties类:
hook其get方法,直接setResult修改返回值
XposedHelpers.findAndHookMethod("android.os.SystemProperties", lpparam.classLoader, "get", String.class, new XC_MethodHook() { @Override protected void afterHookedMethod(MethodHookParam param) throws Throwable { //param.setResult(value); } });
把build.prop里面的参数都修改一遍,基本上就把硬件都换了一遍,这样一来,可以防止服务器对硬件信息的检测了。
然而,build里的硬件信息作为服务器检测数据也只能是冰山一角而已,更多的如唯一标识,sim卡信息,网络信息,位置信息会在后面博客继续随笔~
- Android设备信息攻略之硬件信息build
- Android手机硬件信息Build
- android 获取设备硬件信息
- 获取Android设备硬件信息
- Android获取硬件设备信息
- Android获取硬件设备信息
- Android获取硬件设备信息
- android 通过Build获取手机硬件信息
- Android开发获取设备硬件相关信息
- Android ADB工具-管理设备/取设备硬件信息(一)
- Android ADB工具-管理设备/取设备硬件信息(一)
- 遍历系统硬件设备信息
- linux查看硬件设备信息
- linux查看硬件设备信息
- linux查看硬件设备信息
- linux查看硬件设备信息
- linux查看硬件设备信息
- linux查看硬件设备信息
- nginx集群使用session粘连Tomcat故障后的会话转移解决策略
- java 中的break语句和continue语句
- django 快速实现完整登录系统
- iOS开发- 以图搜图功能实现 (demo+解析)
- android6.0 power按键深入分析
- Android设备信息攻略之硬件信息build
- 如何快速消除行迁移-oracle
- Qt 全局变量
- 爱普生机器人学习笔记01
- 【USACO09 OCT】灌溉牧场
- 你拍片的时候考虑过“35mm等效”吗?
- Unity插件--PlayerMaker笔记
- 文章标题
- iOS系统架构层次