某SDK注册风控逆向 原文标题:[原创]某SDK注册风控逆向
内容概要总结
本文逆向某 APP 注册环节的风控。作者发现注册口风控严格:必须携带后台下发的设备 id(该下发协议必须请求成功才能继续注册),相关逻辑定位在 libdu.so 中。借助 AI 辅助,作者找到加密前的关键函数,其明文是一段包含大量混淆键名的 JSON 设备指纹(如 ubF 为设备 id,还有机型、网络、adb._tcp、WIFI、IP 等字段)。
核心结论:注册风控以「后台下发设备 id」为门槛,SDK 在 native 层把设备指纹序列化为 JSON 后加密上报。评论区有人指出这是某盟的 SDK,加密方式为 xor(zlib(设备指纹)),每个请求的 xor 秘钥不同但对同一请求固定,返回数据也用相同秘钥 xor;字段加密采用换位形式,并根据设备指纹中某数据的后三位 / 100 选择具体加密形式。
原文内容(原文即中文)
32295
[[原创]某SDK注册风控逆向](https://bbs.kanxue.com/thread-290710.htm)
最近分析某个 app时,发现注册口的风控特别严格。
- google注册必须是 @gmail.com后缀
注册时,携带了一个后台下发的设备 id,这个设备 id必须带上。也就是这个下发设备 id的协议必须请求成功,才能进行后续的注册。
直接搜索相关字符串,最后定位在了这个 sdk的代码中:

没错,就是 libdu.so. 至于这是哪个 sdk,懂的都懂。
现在 AI 这么先进了,我就直接让 AI 告诉我,最终加密前的函数是哪个:


很明显这是一个 json字符串,也就是加密前请求的关键参数,字符串形式如下:
{
"nAt": "2",
"ubF": "这里是设备 id",
"AYk": "CA305B:D678CB:120F1C",
"P1J": "CA305B:D678CB:120F1C",
"R37": "Xiaomi",
"R3d": "XXXX",
"DUv": "xxxx.xxxx.xxx",
"SAN": 30,
"Zrs": 341,
"EV2": "app版本字符串",
"AAA": "v1.0",
"BBB": "v1.0",
"3mS": "v8.8.0",
"2cO": "时间戳",
"GVp": "Organic",
"mIS": "<n?1>B9pm==8nn?CD;>oaAp;?k8o?m<8<?#!",
"sfOo": "ED71279",
"foO": ";O@Ao?m;Bq=l;m>",
"4VP": 5,
"bf7": "41007",
"JPd": "41007",
"J7w": 0,
"NoH": 1,
"wSK": "IP",
"DVp": "?=B<A0B@9>8<=>",
"9N2": ";;7",
"Bn2": "BD!=ABB@=<?7=@<",
"IPz": "agMgzXYY5A==",
"sj5K": "61EF187",
"jK5": ";Q!!;E;=;;AA;;Q;",
"JYD": 4,
"02P": "86,-1",
"7S2": {
"0": {
"txo": ".k#yy",
"Zne": "h!A9>9<=<7ABOE=qqCEOoECq?:?A<D!B+?:lo@pEBBp;E<pf",
"MCN": "i889<fBBC;:"
}
},
"iYB": {
"txo": ".k#yy",
"Zne": "h!A9>9<=<7ABOE=qqCEOoECq?:?A<D!B+?:lo@pEBBp;E<pf",
"MCN": "i889<fBBC;:",
"mch": "TTQb",
"AWo": ";;;;;<;;;;",
"8tS": 63959,
"Hsz": 63959
},
"z4e": 3,
"zpA": "WIFI",
"QQW": 1,
"2Lp": 0,
"B7G": {
},
"vuS": "A@n@o?8nm>m8n;mB!o?=AQ<?pp8@?>@8Bm@n",
"9be": 14,
"6yY": "1c0c42eda039a179b3b619b671b0c0c83a43b6d44d26a8951c167aa76e6fe7af",
"vG9": 0,
"gaR": ";",
"Nue": "=9DC=CBD9?9@",
"T5u": {
"_adb._tcp.": {
"0": "adb-ba20125,f:3",
"1": "adb-ba20125,IP:PORT"
},
"wrs": "-2",
"i": "0,58.248.99.72;"
},
"Kvk": "73D2D0E56AC213AC2731AF49C328769C",
"NAB": 1,
"UOv": ">B@A0D@;A<?<!=A=<@B",
"sCc": 1,
"uCM": {
"pnb": 2,
"I2Y": 1,
"LzC": 54,
"nF5": 100,
"fgm": 4003,
"YXM": 330
},
"Db2": -1,
"box": {
},
"h6Z": "APP名",
"cxX": 1
}
这个协议的返回内容包含设备 id,同样问了大模型后,我知道了解密后的数据:
最后于 2026-4-8 20:07
被CCTV果冻爽编辑
,原因:
赞赏
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV12,RANK:550 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV3,RANK:20 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV4,RANK:40 )
在线值:
能力值:
( LV7,RANK:110 )
在线值:
能力值:
( LV1,RANK:0 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
能力值:
( LV2,RANK:10 )
在线值:
这个是某盟的SDK,我搞过,加密方式很简单的,xor加密(zlib压缩(设备指纹)),每个请求的xor秘钥都是不一样的,但是对应请求是固定的,返回的数据也是xor加密的,使用的xor秘钥是跟加密时一样的,至于设备指纹中的字段加密也很简单,好像是某种换位形式的不太记得了,不过字段加密有很多种形式,根据设备指纹中某个数据的后三位 / 100 来判断使用的字段加密形式
能力值:
( LV2,RANK:10 )
在线值:
- [[原创]通过抢茅台学习 IOS 逆向分析](https://bbs.kanxue.com/thread-289881.htm)
26860
- [[原创]某SDK搜集设备信息的快速逆向分析](https://bbs.kanxue.com/thread-289356.htm)
13468
- [[原创]某APP设备风控分析及绕过](https://bbs.kanxue.com/thread-288034.htm)
38107
专注于PC、移动、智能设备安全研究及逆向工程的开发者社区
赞赏



我已同意
《看雪服务条款》
《看雪课程免责声明》


首次使用微信验证码登录,请绑定已有帐号。绑定后可一键登录,无需手机号和密码。


首次使用微信验证码登录,请绑定已有帐号。绑定后可一键登录,无需手机号和密码。
求助问答申诉
举报此帖
申请推荐此帖
游客下载提示
文中图片(共 7 张)






