激情文学

偷拍自拍 亚洲色图

欧美色情 [原创]聊聊大厂开发指纹获得和起义&开发指纹看着一篇就够了!-Android安全-看雪-安全社区|安全招聘|kanxue.com

发布日期:2024-10-31 14:43    点击次数:148

欧美色情 [原创]聊聊大厂开发指纹获得和起义&开发指纹看着一篇就够了!-Android安全-看雪-安全社区|安全招聘|kanxue.com

面前大厂的开发指纹层出叠现欧美色情,然则想要确保沉稳性和独一性高精确其实也挺难的一件事,有的是通过开发信息比重进行的开发ID独一值说明。比如A开发信息占比10%,B开发信息占比20%,当比重卓越60%以上,开发指纹才会发生变化。这样的平正即是当你只修改某一个字段的时候,开发指纹不发生变化。还有的干脆找一个祛除的况且独一的开发信息,看成缓存,每次读取缓存的阵势去判断,开发信息是独一,比如常见的有Native获得DRM,popen cat  /sys/devices/soc0/serial_number  ,svc读取bootid况且保存到文献,netlinker获得网卡。都是很常见况且祛除的的开发指纹。这篇著述主要先容了各式指纹的获得情况,若何修改,站在天主视角去俯看,报复者和被报复者遭遇的问题 。

看完这篇著述主要你能学到如下:

1,常用的指纹检测有哪些?

2,若何修改开发指纹,难点在那里,会有哪些坑需要踩?

3,面前的国内的指纹濒临哪些问题?

Android自己是CS架构,客户端(client)职业端(server),咱们常用的通过context高下文调用的API都是径直调用代理东说念主的阵势去调用的,而着实的职业端是ActivityManagerServer 简称,AMS, 他有许多代理,比如PackageManager,ActivityManager 等,这些都是AMS的代理东说念主。而AMS即是被代理东说念主。代理模式是一种蓄意模式,代理东说念主不错提供被代理东说念主的部分概略一起功能,终结代码封装,作念鉴权,代码安全的角度,代理模式很常用的蓄意模式。

AMS和代理们通过Binder进行通信,Binder是什么,有什么平正这里就不祥备伸开了,安卓口试八股文,不错暴露成程度间通信的东西,底层终结是通过分享内存,数据传输,读取速率更快。当咱们调用代理东说念主的API得时候,实践上是通过Binder去发送一些数据包,和AMS通信,当AMS收到音书以后把成果在传输给对应的代理东说念主。然后复返给调用方。在每个Manager里面都有一个代理东说念主 。

之前很久之前有一种动态代理的时刻,旨趣即是替换了里面的代理东说念主,因为代理是一个接口,然后咱们我方通过Proxy这个类创建一个代理,然后反射set且归,就不错终结常用的API箝制和Hook。访佛VA的沙盒,对多开的App提供一份我方终结的代理,然后范畴这些代理的复返值,以此终结沙盒有关操作。还有一种相比好的过APK签名的步调即是径直Hook"水管" 也即是hook binder的通信的步调,当收受到指定事件以后,径直修改具体的成果,以此对Java层进行全量Hook(binder的通信步调被Hook以后,调用者和代理东说念主只可拿到被修改以后的成果,以此终结Java层的全量Hook,背面再讲签名考据的时候我在详备说。)

因为在获得概略分析的时候,需要绕过反射9.0放弃,这里给与的是Lsp作家的AndroidHiddenApiBypass进行荫藏API的调用 ,

在手机装了EDXP概略Magisk,以后一般荫藏API的放弃都是默许去除的。因为在Edxp和Magisk里面也需要进运用用一些荫藏API。

开发指纹主要分为三部分,Java层开发指纹,Native开发指纹,popen引申一些号令获得开发信息,包括一些中枢的开发指纹。

这篇著述也主要围绕这三部分进行伸开斟酌。比如一些内核文献等信息,我也会放在Native层进行斟酌。

扫数的每个开发指纹我都分为两部分

天水在线

Get(若何获得,站在开发者角度) Mock (若何进行修改测试,站在报复者角度)

扫数的指纹我都分为三种类型,平凡指纹,次要指纹,进军指纹。

在setting里面民众常常遭遇的可能即是android id的获得的

API如下:

然则其实Setting里面还有许多别的功能东西,常见的即是Settings.Secure 和 Settings.Global

在Settings.Global 里面其实还有一些别的字段,具体API如下。这些都是一些相比祛除的开发指纹。

步调Hook

Global和Secure 都是终结的NameValueTable接口。

底层调用的是getStringForUser(resolver, name, resolver.getUserId()) 三个参数,如果Hook的话不错对这个步调进行动手。

Settings.Secure->getStringForUser & Settings.Global ->getStringForUser

内存反射:

许多开发者会给与内存反射的阵势去获得变量,是以只是是通过mock步调的阵势不够,如果进行Mock需要将Settings.Secure 和 Settings.Global 里面的内存变量进行建造,Settings.Global是放了一些全局变量,Settings.Secure放一些安全有关,

Settings.Secure->getStringForUser Settings.Global ->getStringForUser 和 具体步调如下。

不错看到,举座的cache都是放在sNameValueCache变量和MOVED_TO_GLOBAL变量里面进行存储 。

咱们不错径直反射MOVED_TO_GLOBAL这个HashSet概略去sNameValueCache 这个变量然后去获得这个值的话,亦然很容易不错拿到最真实的值的。是以光mock是不够的。

比如许多大厂即是Android高版块绕过了反射放弃以后,概略判断面前手机莫得API反射放弃以后径直通过反射变量的阵势去获得。

sNameValueCache在高版块是一个对象,低版块安卓他是一个ArrayMap 这块需要注视。

sNameValueCache修改的话不错调用API putStringForUser  往里面强制赋值 。这样一来下次对方在通过API去调用的时候就会拿到你也曾进行过Mock的值。是以你修改的时候需要进行判断,面前获得的值是否是你也曾Mock过的。

蓝牙的网卡不是平凡的网卡,背面会先容netlinker获得真实的网卡。

主要步调即是通过BluetoothAdapter->getAddress

不错看到这个步调主若是通过IPC的代理类阵势去获得的。是以Hook的话尽可能先Hook代理的IPC类。先尝试反射 android.bluetooth.IBluetooth$Stub$Proxy然后Hook IPC里面的getAddress 而不是径直HookBluetoothAdapter->getAddress

因为许多大厂获得开发的指纹的时候会检测这个步调是否被Hook,检测也很浅薄,只需要获得这个artmethod结构体以后

判断这个步调进口是否被替换,比如Sandhook之类的常用的Hook框架,低版块给与的是inlinehook体式,在高版块里面给与的是进口替换欧美色情,不错径直获得到步调的进口的函数地址,判断一下函数所在的so即可。是以尽可能HookIPC的步调。如果用XPosed去修改的话,还需要注视魔改,不然大厂见解过XposedHelpers->sHookedMethodCallbacks变量把你Hook的步调进行上报。

小手段:这个变量是一个静态变量,是以咱们只需要拿到XposedHelpers这个class即可。想要拿到class必须先拿到这个类的classloader,浅薄的Xposed是通过系统的classloader看成父类classloader,然则edxp这种,是一个步调里面的成员变量,莫得任何方位援用这个classloader,是以想拿到这个classloader需要用到内存漫游。把内存一起的classloader都从内存抠出来,然后挨个去反射获得XposedHelpers 即可。代码可参考如下:

https://bbs.pediy.com/thread-269094.htm

sHookedMethodCallbacks里面保存了XPosed一起的Hook步调信息,用于石锤面前步调是否被Hook。获得被Hook步调具体如下:

XposedHelpers->methodCache 不提倡使用,如果报复者使用了XposedBridge->HookAllmethod 的话,可能会导致Hook步调上报的遗漏。

这个变量在高版块里面基本也曾拿不到,实时拿到了亦然一个unknow,然则也需要兼容低版块的Android 。

如果复返的不是空,况且不是 unknow 概略UNKNOWN,随即一份原始长度的字符串即可。另外该字段同上,也不错径直对IPC类进行束缚,径直Hook IPC对象getSerialForPackage 步调即可 ,的终结步调具体如下 。

这些基础的Java开发指纹字段没啥好说的,百度一下就能找到具体的获得步调,然则修改的时候需要注视,不要径直Hook,尝试优先Hook ipc即可 。

Build里面如故有许多有效的东西,比如手机是否开启adb ,usb接口的景况之类的。咱们主要将Build里面分为两部分 。指纹有关又分为两部分,单一字段 /复合字段。

1,确立有关

2,指纹有关

单一字段(惟有一个开发信息)

复合字段(多个单一字段复合而成)

这个单独通过Java层去修改是鼓胀不够的,底层走的是system_property_get 这个步调(在native指纹部分会详备先容)。

还有要驻扎popen getprop 这种步调去扫描一起的Build有关参数(popen getprop 在popen有关会详备先容,这里只先容Java应该若何束缚),这个Build有关需要要点和蔼,他在Android底层终结访佛树状结构。也即是说许多树枝都会有疏浚的内容。面前扫数的作用域一共有七种。

举个例子,比如常见的fingerprint复合字段系列 ,就分为如下七种作用域。

ro.build.fingerprint/

ro.build.build.fingerprint/

ro.bootimage.build.fingerprint/

ro.odm.build.fingerprint/

ro.product.build.fingerprint/

ro.system_ext.build.fingerprint/

ro.system.build.fingerprint/

ro.vendor.build.fingerprint/

作用域远离如下

这里面的值组成礼貌也都是相似,是以Hook的话也需要一起进行hook,只束缚单一是没用的。因为许多大厂作念采集,不会只麇集一项。

会七个作用域都进行麇集。

常见确凿立如下,这些字段其实修改不修改不进军,因为许多大厂如果手机开了开发者选项概略debug模式之类的。

会加多面前手机的风险值。是以尝试进行Mock 和修改 。

在不修改机型的前提下,底下这些应该都是需要束缚的 。大厂扫描频率很高的Build参数 ,随即的话,在原有的基础上来源概略扫尾,随即几位数即可。

复合字段是多个单一字段拼成的字段,常用的有ro.build.description 还有之前说的7个fingerprint 有关。 这些Mock以后的值要和之前单一字段Mock的值平等。比如某个单一字段值被mock成A 以后,复合字段里面的内也应该是A 。

android.os.SystemProperties->get 底层调用的是native_get ,一个native步调,是以Hook的时候优先束缚 native_get

Java hook罢了以后 还需要反射将Build里面的成员变量进行set。驻扎采集通过反射的阵势去获得

许多大厂会把这个字段也看成指纹的一部分,是以这个步调也需要束缚。

优先Hook ipc

优先Hook ipc

这个函数不需要太多束缚,每个手机类型基本都差未几,每次打乱一下复返成果排序礼貌即可。

优先Hook ipc

这个DRM是水印有关,主要为了束缚不同手机加水印的独一ID 中枢的是一个叫deviceUniqueId 的东西,这玩意是一个随即的32位字节数组。许多大厂用这个看成中枢的开发指纹,不仅在Java层进行获得,还有在Native层进行获得,在背面Native开发指纹会再次先容到。

Hook的话很浅薄,这个步调莫得IPC底层有我方的终结,径直Hook get的步调即可 。java层Hook是远远不够的,还需要束缚native层。

每次随即32位字节数组即可。

大厂应该不会信任Java层的mac,底层都是通过netlinker径直获得网卡,概略径直popen引申 ip a 进行网卡信息的全量获得(详备参考背面popen有关先容)。我径直在底层束缚的netlinker  socket通信的时候,是以Java层不进行束缚。任何获得网卡的步调,底层最终走的都是netlinker去获得的网卡

径直通过netlinker获得网卡,这种阵势在安卓10上神态似也曾失效了,然则手机Root以后是莫得放弃的(亲测android 13 开发板获得告捷),这种阵势还不错用来检测面前手机是否Root。

然则当引申ip a这种号令的时候,概略调用Java层原始API的时候,底层如故走的netlinker,径直在底层通过ptrace在函数调用引申罢了以后,对寄存器进行Mock 和 Set即可 。详备获得阵势不错参考我之前的帖子 。Android netlink&svc 获得 Mac步调长远分析

许多大厂会麇集/sdcard/ 概略相册目次的一些创建时候,看成开发指纹,然则许多文献都是默许的1970时候戳,有的少数文献夹创建时候亦然很进军的开发标记 。Java里面File对象有文献的创建时候。

聊了挺多Java有关的开发指纹,其实Java层采集的指纹,并不是要津成分,中枢的指纹基本都在native层进行束缚的。Native部分会详备先容包括内核文献,还有一些获得指纹的骚操作 。

之前在Java层先容了,Java获得最终总的是native_get,而native_get底层走的即是这个system_property_get 。

在先容之前咱们需要先望望这个函数的源码,android 9以上和9以下终结的阵势是不同的。

android 9:

android 9以下 :

安卓9以下是径直终结的这个步调,是以这块又有个细节,android 9 以上 hook __system_property_get 不单是需要Hook

进口步调,还需要Hook system_properties.Get 这个步调。

许多大厂在android 9以上会径直调用system_properties.Get ,先领悟So获得到system_properties.Get 非导出函数的函数指针,强转成函数指针以后,径直去调用system_properties.Get ,而非径直调用system_property_get ,如果只Hook system_property_get的话可能就会导致指纹裸露。是以在android 9以上需要尽头束缚 system_properties.Get(name, value); 这个步调。

如果径直Hook __system_property_get 可能会存在短教唆问题。因为这个步调就一个BL教唆,平凡的inlinehook 可能会失效。

这块需要用到十分Hook 。虽然也不错径直判断安卓版块号在9.0以上径直Hook system_properties.Get 即可。这个system_properties.Get 是一个非导出函数,需要领悟So获得到非导出函数的地址。不错参考sandhook的ELFUtils.cpp 。

同理read步调亦然如斯,也需要这样束缚 ,在9.0以上需要额外束缚。

Hook的时候需要注视一件事即是Mock的值长度不行大于原始长度。当 system_property_get 引申罢了以后memcpy 将Mock的value拷贝进去即可 。束缚的经由函数如下 。终结也很浅薄。

这块有个细节问题:

因为get和read底层走的都是find函数,为什么不径直在find函数束缚呢,find函数复返的是prop_info*

这个指针指向的是系统内存的变量,径直写入会径直sign11 如果使用mprotect如果径直对内存变量强制写入可能会导致系统的不沉稳,导致出现问题。之前踩过这个坑。是以就只束缚了get和find这两个函数 。

使用的话很浅薄,径直导入头文献就好。

这个指纹亦然许多大厂用作独一ID的中枢指纹。束缚的话也需要注视,很中枢的一个开发指纹ID。

使用的话很浅薄,径直导入头文献就好。代码不卓越10行 。

导入的头文献终结这个So在mediandk.so里面 ,是以cmake->target_link_libraries引入的时候别健忘添加mediandk 引入依赖。

这个值不同App 读取的内容都不相似,这块需要注视。

Hook的话也很浅薄,径直Hook这个函数地址就行,然则这个步调亦然一个短教唆,需要用到十分Hook。

束缚逻辑如下,因为咱们只需要和蔼description 即可。其他内容不束缚。这块无意候径直写入可能会导致问题,需要先mprotect,不行径直用mprotect需要预想一下扇叶大小,是否内存对王人。

因为之前说过,Linux底层不论什么样的获得网卡,最终底层径直会走Netlinker去获得网卡。在android 10以下不错绕过系统权限从而获得网卡信息,高版块也曾失效了 。底层都是svc径直调用recvfrom概略recvmsg去收受socket的音书 。是以不束缚svc的话,无法作念到全量修改的。

我用的是ptrace 在recvfrom 引申罢了以后,读取参数寄存器,将数据修改以后在重新掩盖寄存器即可 。束缚经由如下。

细节点:

socket主要收受音书的函数主要就三个,recvfrom,recvmsg,recv   ,netlinker通信即是通过这三个函数束缚的,recv底层调用的是recvfrom ,是以咱们只需要束缚recvfrom,和 recvmsg 即可。recvfrom引申罢了以后参数是个数组,咱们只需要把这个数组buff的值进行掩盖即可,然则recvmsg的话不行这样束缚,他的参数是iovec 指针,这个东西民众不错暴露成一个箱子。里面装了具体的内容,长度和运转位置 。是以修改的时候需要读取这个运转位置的指针才不错进行set。

netlinker获得的Mac阵势详备看我之前的这篇帖子,这里未几重迭先容了 。

Android netlink&svc 获得 Mac步调长远分析

若何使用使用ptrace修改svc不错参考我的另一篇著述。

SVC的TraceHook沙箱的终结&无痕Hook终结想路

上述步调束缚罢了以后,哪怕即是引申系统的ip -a号令,拿到的亦然被修改以后的值。

[培训]内核驱动高档班,冲击BAT一流互联网大厂职责欧美色情,每周日13:00-18:00直播讲课





Powered by 激情文学 @2013-2022 RSS地图 HTML地图

Copyright Powered by站群 © 2013-2024