發表文章

[原创]聊聊大厂设备指纹其三&如何在风控对抗这场“猫鼠游戏”中转换角色

这篇文章是大厂设备指纹其三,可能是最终一篇,也可能不是(主要看后续有没有更好的代替) 看这篇文章之前需要准备一下前奏知识,之前文章叙述过的,这里面不就一一叙述了。 风控对抗基础随笔https://bbs.kanxue.com/thread-277637.htm 设备指纹第一篇: 聊聊大厂设备指纹获取和对抗&设备指纹看着一篇就够了! 设备指纹第二篇: 聊聊大厂设备指纹其二&Hunter环境检测思路详解! 这篇文章会详细叙述客户端风控对抗的“边界值”在哪里,如果你是在做风控对抗 ,不管你是这场游戏中在演“猫”的角色还是“老鼠”的角色 。 这篇文章将站在上帝视角去讲解对应的“规则” 和“玩法”,以及如何实现角色转换。 通过之前的文章,配合这篇文章希望每个小白玩家都能知道大厂是怎么玩的,如何设置游戏规则,我们应该如何进行解谜。 在第一篇文章中介绍了一个细节点,就是IPC代理 ,但是现在在讲这篇文章的时候,需要更详细的叙述一下 。 第一篇文章里面介绍了Android是基础的CS架构,客户端和服务端架构 。安卓为什么要这么设计呢?当时问了GTP,他给出的回答是稳定性。如果服务端和客户端在一个进程内,客户端崩溃了,服务端也会一起崩溃,导致整个系统不稳定 。 安卓和Java相比多个一个Context,这个Context是调用安卓本身提供api的桥梁 ,里面有各种安卓系统提供的各种基础API , 这些API可以直接操作Android系统 ,安卓本身通过各种各样的Manager去提供对应的Api去获取和修改 。比如PackageManager,ActivityManager等,这些Manager里面都会持有一个代理人 。当我们去调用这个Manager里面的一些Api的时候,一些简单的Api他会尝试去自己在本进程Native或者Java去实现,如果一些复杂的字段,比如查询系统的一些信息,或者调用一些系统关键函数,这种时候他会去调用“IPC代理人 ”,这个IPC代理人就是像服务端通讯的关键 。他相当于是向服务端的传话得人 ,代理设计模式 。对不同的Manager提供不一样的功能 ,而他传的话就是对应的IPC协议 。这个协议如何传递的,就是通过底层的共享内存Binder去实现的 。 而这个协议里面具体发送的内容,就是IPC协议装的“包裹”就是用的P...

隐藏应用程序中的IMEI/设备标识符

Sep 29, 2023已编辑 如果您希望确保 IMEI 不与您本人关联,那么: 你需要完全匿名地购买这部手机,而且不能通过亚马逊购买。 绝对不要插入任何可能直接或间接与您有关联的SIM卡。 手机不需要SIM卡就能连接网络基站。SIM卡仅用于计费。只要手机的无线网卡开启,网络就能读取你的IMEI码并确定你的位置。 要将手机用作电话,您必须连接到网络,它将知道您的位置、IMEI 和 IMSI(如果有)。 将 IMEI 与您的身份关联起来,只需要您本人办理一次身份证即可。就是这样。因此,即使只插入一次与您关联的 SIM 卡,也会永久留下记录并建立关联。 将 IMEI 通过 SIM 卡关联到您是最简便的方法。但还有其他方法。如果需要调查一个没有身份信息的 IMEI 或 IMSI,可以搜索其位置历史记录,找出它经常出入的地点,从而找到机主的住所或工作地点。还可以对其进行实时追踪,以抓捕嫌疑人。可以调查 SIM 卡付款地点的视频录像等。还可以查看 IMEI/IMSI 经过地点的街道监控录像。但这些都需要相关机构的专门关注。 如果您完全不想将 IMEI 暴露给网络,那么您就永远不应该打开无线电(飞行模式)。 购买时关联了您的 IMEI 号码,并不一定意味着亚马逊会将其提供给“第三方”。关键在于我们无法确定。但极有可能的是,如果有人盯上您的 IMEI 号码,他们很可能会追踪到亚马逊,进而找到您。此外,这些大型卖家极有可能保留此类信息的记录。 请记住,保持 IMEI 匿名化非常困难,需要付出很多努力,因此,如果不是真的需要,就不要走这条路;如果你一定要这样做,请确保将来不会因为错误而导致信息泄露。 目前无法更改IMEI码。 。IMEI 号码与您的设备关联,无法更改。它与您作为用户没有任何特定关系。真正识别您的是存储在您 SIM 卡上的 IMSI 号码。” 欢迎来到许多欧盟国家……在这里,您的设备与您本人关联非常迅速。您的 SIM 卡必须与您的身份证件关联……然后您的 SIM 卡再与 IMEI 关联……因此,对于任何公司或政府机构来说,基本上可以很容易地说: 这个 IMEI 号码很可能就是这个人。 因此,至少应该询问一下是否有可能更改或伪造。 我也不希望我的手机发送真实的唯一标识符。我不想被识别。我尤其不希望我的唯一标识符被关联起来

GrapheneOS刷机教程

https://www.bilibili.com/read/cv34989305/?opus_fallback=1 1.首先准备好pixel手机和一台电脑。我这里以pixel 8 pro和windows11 系统为例。 电脑端先安装谷歌浏览器(要官方正版的)。Edge应该也可以。 2.启用OEM解锁。在设置中找到关于本机,然后多次快速点最下面的版本号,直到进入开发者模式。然后在设置——系统——开发者选项,进入开发者模式,下拉找到OEM解锁和usb调试,都打开。 3.把手机关机,先不连接电脑,同时按住电源和音量减弱按钮几秒钟,启动Bootloader界面。然后手机连接电脑。 4.电脑端下载驱动程序。下载链接 https://developer.android.com/studio/run/win-usb 点击“Download the Google USB Driver ZIP file (ZIP)”,下载到桌面即可,然后解压到桌面。 5.右键点击“此电脑”,选择“显示更多选项”,找到管理,再点击设备管理器,在右侧找到你的手机(点开小三角仔细找,名字一般是手机型号),找到后右键点它,进到属性找到安装驱动程序的按钮。选择本地安装,安装源路径选择桌面。 6.回到浏览器。打开https://grapheneos.org/install/web#prerequisites 点击Unlock bootloader解锁引导程序。然后在手机上按音量+或者-接受,再点电源键确认。手机屏幕显示Bootloader is already unlocked. 7.在浏览器刚才的网页点击Download release,下载系统。 8.下载完成后,网页点击Flash release,等待刷机结束。期间不要拔数据线!要选择接触良好的数据线。 9.结束后手机又回到开始的那个界面,在bootloader界面,需要将其设置为锁定,网页端点击Lock bootloader,然后在手机上按音量+或者-接受,再点电源键确认。手机屏幕显示Bootloader locked. 10.手机按电源键启动手机。首次设置时,屏幕将包含一个与 OEM 解锁相关的切换开关,默认情况下会选中。建议禁用此设置,以后要开启的话还是按第二步方法打开即可。 作者:诀往 https://www.bilib...

Android安全-某大厂风控引擎SDK设备指纹和环境检测分析

前言: http://www.yxfzedu.com/article/8724 闲来无事,花了亿点时间将某大厂的风控引擎sdk看了一遍,主要分析对象是sdk里面的libNetHTProtect.so。 通过初步分析,请求网址/v4/c是初始化的步骤,请求网址/v4/a/up就是关键的设备参数的上传。 每次登录的操作都会发送这个请求,看来这个包应该就是数据上传的点了,不过很可惜,数据加密了,先到so里去定位吧。 不过当我进到so里的时候,发现so中的字符串都被加密了,运行时才会解密并且是在栈空间里面储存。 不过好在算法很简单,就是异或或者其他的运算,写个脚本批量解就好了,这里大约有5000多行: 即使如此,还是有部分算法没解出来,不过不要灰心,由于解密之后会放到一个栈空间中,之后这块内存将被回收,hook下free函数,也能打印出不少东西: 这些数据就成为线索了,解密出一部分数据之后,找到上面的/v4/a/up的链接,很快就能分析出对应的请求函数了。 这里它是反射java层的函数去请求的,在请求之前就将数据加密了。 请求的数据在收集完成之后,使用protobuf序列化方便传输,然后就被送进加密函数里加密了,数据在请求前放到sub_2CD2A8中去加密,加密算法简单看了下是AES,并且key是随机生成的 这里就不逆加密算法了,直接上frida,把原始protobuf数据拿到手。由于网络请求基本上都会走这里,所以在hook这个函数的同时,hook他的上一跳函数,把请求的URL也打印出来,代码很简单: function hook_2CD2A8() { var so_name = "libNetHTProtect.so"; // hook的so名称 var so_base = Module.findBaseAddress(so_name); var offset__exit = 0x2CD2A8; var true_add = so_base.add(offset__exit); var flag_ptr_exit = new NativePointer(true_add); Interceptor.attach(flag_ptr_exit, { ...

[原创]自动化采集Android系统级设备指纹对抗&如何四两拨千斤?

这篇文章主要是针对设备指纹层面的一个整体的对抗思路 ,可能网上会有相似的文章,但是都不适用于现在的环境 ,想着简单梳理一下,之前是二次打包,只能在客户端去修改,所以需要去hook binder的这些方法,实现hook的拦截 ,但是留的痕迹也很多,很难做到不修改客户端,但是现在我们是在Root的环境下 ,很多东西玩法就变了 。最早是Magisk可以在系统层做一些文件替换,现在的Apatch出来以后,很多对抗都放在了内核里面,直接从应用层修改直接跳转到内核 (说好的不进入内核呢?),最早之前很多可能还是通过编译自定义ROM或者自定义内核之类的去实现对抗 ,现在看起来有点鸡肋 。 https://bbs.kanxue.com/thread-281889-1.htm 下面的内容也只是我个人所感所想,如果有更好的思路,或者文中有什么地方没有讲述清除,讲述错误的地方也可以随时回复。 基础知识: 风控对抗基础随笔 设备指纹第一篇: 聊聊大厂设备指纹获取和对抗&设备指纹看着一篇就够了! 设备指纹第二篇: 聊聊大厂设备指纹其二&Hunter环境检测思路详解! 设备指纹第三篇: 聊聊大厂设备指纹其三&如何在风控对抗这场“猫鼠游戏”中转换角色! 这篇文章是第四篇 ,主要是针对架构的事情进行演练和梳理,通过“推演”的方式去模拟一场战斗。而我们 站在“玩家”视角去推断这场战斗胜负。 其实在第三篇文章里面结论: 我们只需要让客户端安全SDK检测“失效”即可做到黑产的自动化爬取 。 这个失效并不是说让他不上报,而是检测不到 ,但是在客户端还要实现那么多对抗 ,比如一键新机,包括各种复杂的环境检测都需要绕过 ,也不是一件简单的事情 。 我之前写过一个软件叫Hunter,它主要就是检测客户端的风险项,在不断和黑产对抗测试的过程中发现,很多攻击者的攻击方式很有趣,有硬件断点逃逸内存CRC检测,有内核注入的,有直接在服务端修改直接修改客户端返回值的。发现绕过的办法千奇百怪 ,但是他们核心的思路就是 。 客户端不注入不修改一丁点代码,但是可以实现一键新机 。 下来我们就聊一下,客户端应该怎么做才能实现这个功能的 ?中间有哪些坑?为什么要这么做? 原理&细节这几个角度去综合分析一下。 假设我们的对手是目前国内Apk风控的天花板...

[原创]聊聊大厂设备指纹其二&Hunter环境检测思路详解!

昨天发现自己有点发烧,今天测一下果然阳了,大早上起来睡不着 。 https://bbs.kanxue.com/thread-277402.htm 请假以后正好闲着没事,完善一下之前文章 https://bbs.kanxue.com/thread-273759.htm 。 之前一直想写来着,但是一直没时间 。之前这篇文章介绍了。设备指纹基础对抗思路和原理 。很多都是基础部分 。这一篇将更详细的介绍一些常见的检测思路和方法,还有一些主流对抗手段 。 其中包括很多大厂头疼的一些事情,如何手机恢复出厂设置也能保证设备指纹不发生变化,保证稳定性 。这篇文章里面也都会详细介绍 。 如果没看过我之前的这篇文章,所以没看过的同学可以先看看这个文章 。之前有的这篇文章里面就不多二次介绍了 。 还有就是一个设备指纹大厂会使用多种方式去获取,那么我们应该如何进行对抗 ,我也会在文章里面说一下我自己的见解和方案,如何在一个“最佳”点去解决问题 ,当然如果你有更好的方案,也可以私聊我。 聊到设备指纹最经典的一个字段就是Android id,就我目前所知,他的获取方式不下5种 。分别介绍一下 。 最基础的Android id获取方式 ,这个不多说,直接Hook就行 。 第一种获取以后,系统会把Android id 保存起来,保存到一个HashMap里面,防止多次IPC初始化 ,所以为了验证第一种方法的准确性,可以二次获取cache , 和上面的Android id进行对比 。9.0以上需要绕过Android id 的反射限制 。具体获取方法如下: 方法3也是很基础的Api ,主要通过ContentResolver 进行间接获取 。很多大厂也都在使用 。 通过query命令去查询,获取Android id ,这种方式底层走的也是ContentResolver 方法4的代码反射实现,我自己测试在高版本总是有问题 ,不是很稳定 ,所以这里面就不发了 。 在设备指纹里面,如果想回复出厂设置也能保证原有的设备信息 ,这个字段可以在服务端的相似度算法里面占比很重 ,可以以型号进行分类。,我之前测试过,回复出厂设置指纹也不发生变化的设备指纹核心的设备指纹就几个 。 比如硬盘大小,ipv6 ,还有一个就是MAC地址,这几个设备指纹也是很核心的设备指纹 。首先先介绍硬盘字节大小。 也...