某app,看了一些大佬写了相关的纯算文章,深感工作量的庞大,作为采集菜鸡,本着能采一点是一点,实在不行就人工爬取的态度,琢磨了一下frida hook注册配合改机软件注册设备的方式,跑了一段时间,最近疑似平台改版,又得东改西改的,这里浅浅分享一下。
抓包使用的Reqable,在设备初次登陆的时候,会触发call接口的第一次,生成关键设备参数sk,后续重新进入app,也会触发call接口,但就不是第一次了(你懂的)

这个call接口的逻辑,就是通过携带了如图这个一长串加密了的请求体进行设备的注册,使用平台的data解密的算法解密一下大致如下(敏感数据已作处理)
上述已经解密出来的众多参数,我咋知道这些玩意儿啥用呢,作为没经验的ios初学者,就只能一个一个去hook分析。这里要分析的所有参数都来自这么一个字典形式body,所以一开始,我们只能猜测并进行模糊的hook,hook一下字典添加元素的操作,- setObject:forKeyedSubscript:方法,并加一个判断,判断这个添加进去的元素是xxx,这样就能针对性去分析某一个参数了。
hook结果如下

解压ipa文件获取内部Mach-O可执行文件,将可执行文件拖入ida,跟到第一个位置0x9d5602c,对应着sub_10ADD98E0,这里对应的就是将参数设置到字典中的逻辑。v592代指的字典,v537代指就是被设进去的参数了。

基于刚才的逻辑,对body里面每一个参数进行hook跟栈找到位置,ida中看逻辑,如上图所示,每一个设置到字典中的v537,找到上方离它最近的位置,追进去就是它的生成逻辑

比如这里就是对sharedInstance发送一个a1参数,这个函数对象具体咋实现的呢?在旁边ctrl+F搜索一下就完事儿了。
比如解密data中的ljbmc参数,使用我提供的模糊hook脚本hook一下,跟栈,在ida中找到逻辑如下,在左侧搜索点击setDuNorNYJInfo查看具体逻辑


这里的sub_10AD65F00的逻辑看不明白啥意思,可以尝试hook一下,比如这里传入的字符串是什么意思,hook的时候先看看汇编视图

如上图所示,可以hook 0x9CEA1FC,函数sub_10AD65F00的调用打印一下x2寄存器的值。
打印值如下

咱也看不明白,直接问一手AI吧


哟西,这逻辑不就是看你小子有没有越狱吗?接下来干嘛呢,像我这样的菜鸟就老老实实进去一点点看逻辑,打注释,如果是检测,就思考能不能hook绕过,或者伪装自己的参数,如果是随机值,就自己构造替换,是别的什么算法生成的字段,就去分析看看算法逻辑,总而言之,hook这个call接口的参数,挨着挨着去分析和修改参数,直到注册出来的设备能用,就ok了
里面还有与设备相关的参数,smid和bssm值就由fcuuid字段生成,这里我就是直接用ios中的改机软件改掉的。这一套就可以实现hook注册设备,并使用设备去注册账号请求平台登陆数据了
当然,风控一直再改,前两周方案一跑,意气风发,这两周就只能两眼一瞪,我干xx
{'skData': {'tlapp': '1753714535994', 'bcn': 'dewu', 'do2': '15', 'tvlc': '', 'dhdsi': 'Darwin,21.6.0,iPhone', 'nifct': '1', 'dbg': '0', 'dmc': '0778ca838aeb915xxxxxd040ccc3cf1', 'dcai': '-', 'bdn': '嘿嘿嘿', 'tnt': '1', 'dadr': '0x183be7f30|0x198dcd280|0x183c228f4|0x1843a027c', 'bstdr': 'd2802a50|d4001001|540000e3|a9bf7bfd', 'dsst': '2024-07-16 02:56:32 +0000,2024-07-16 02:56:32 +0000', 'iksour': '0', 'tkuid': '88cea24c5dc2b6fa', 'bav': '5.65.2', 'bmkd': '0', 'tfedtk': '0', 'bid': '嘿嘿嘿', 'dme': 'iPhone9,1', 'bssm': '20250727103330b9e50c069149fa1嘿嘿嘿e4010063231b0ddba74e33892', 'lacjb': '0', 'tot': '1753714543785', 'lftk': '0', 'skst': '0', 'dfdlp': '', 'ladf': '0', 'ljdb': '0', 'dsd2bt': '1753613048', 'ldjb': '0', 'tcst': '250', 'oidv': '3DCEDCB0-7FBE-42A3-AB71-F8F567F8D6D6', 'bacdr': 'd2800430|d4001001|540000e3|a9bf7bfd', 'idv': '3DCEDCB0-7FBE-42A3-AB71-F8F567F8D6D6', 'dcpu': 'arm64_v8,2', 'norcst': '14', 'idfs': 'da82cc8c261c12bb4b53f7b24bb8a3bb', 'lrtcai': '', 'lrsf': '', 'bcv': '1.9.3.250402', 'diud': 'UUIDac247e7093e542b3b10e9a1e609111ac', 'lfjbl': '1152921500311909827,0,0', 'dat2': '2025-07-27 10:26:55', 'lfd': '0', 'mntd2': '2B6A9A424CAE41D1E6BD373E0D8115BA06FC18CC980871FFE32118CDDA264F5D6E5264408016FEF6D0C967172BC2E761', 'lspf': '', 'smid': '20250727103330b9e50c069149fa17b8ebd17e4010063231b0ddba74e33892', 'dcm': 'e97ff888f3e25a1f1fda881db47f4fe7', 'lnfrt': '0', 'lrtkt': '0', 'iaid': 'UUIDac247e7093e542b3b10e9a1e609111ac', 'src': 'ios', 'dat3': '1970-01-01 08:00:00', 'dtms': '31968497664', 'dss': '750,1334,2', 'ifa': '', 'dsimc': '0', 'dln': 'zh-Hans-CN', 'idfni': '8abc5649728bfa574ee08df4ff31ad24', 'idv2': '3DCEDCB0-7FBE-42A3-AB71-F8F567F8D6D6', 'dust': '1', 'sk': '9RW3A2fK0GI1wBlAnh1XOcWhI57exliJ8eJvqM0oC4NHlBGnB9WT8OZl4m7CLeizKtvfnyDyrln4lB1VY0xHrpXhcH1v', 'ltwi': '-', 'sksour': '2', 'lrev': '0', 'dat': '2025-07-28 22:53:52', 'itm': '7GPZR297Z9', 'dtiz': '28800', 'lism': '0', 'datmt': '1753714432398', 'dbs': '1,78', 'dvo': '0.00', 'ldjbc': '0,0', 'ikfa': '', 'dpms': '2097807360', 'tfetk': '0', 'dbt': '1753696073860', 'dint': '1745742242.944226818', 'dm': 'iPhone', 'did': 'com.siwuai.duapp', 'dsb': '51', 'dtu': 'App Store', 'dn': 'iPhone', 'dcm2': 'b2ffaf1cebcb07776bec74c0d5cc7d1e', 'dmpn': '中国电信', 'do': '15.8.3', 'ljbmc': '0', 'lnrsf': '', 'ljb': '0', 'dme2': 'D10AP', 'dpxy': '1', 'datpt': '0', 'ds': '14132,30487', 'incuf': 'vs2|0EH|vs2|0|0^E3|0EH|E3|0|0^pWa|0EH|pWa|0|0^wYa|0EH|wYa|0|0^-^-^96|0EH|96|0|0^V3|0EH|V3|0|0^JEj|0EH|JEj|0|0^Mj7|0EH|Mj7|0|0^iPhone9,1kwarm64_v8,2', 'dms': '2000.62,68.75,710.38,649.69,1674.20,314.14,3.34', 'lsimu': '0', 'cicst': '28', 'dpid': '6155', 'dmcc2': 'CN', 'lsd': 'fac37083aacff02337c3fb8797b1f3bd', 'lrspt': '0', 'mntd': '2B6A9A424CAE41D1E6BD373E0D8115BA06FC18CC980871FFE32118CDDA264F5D6E5264408016FEF6D0C967172BC2E761@/dev/disk0s1s1', 'tct': '1753714543885', 'ljbac': '0', 'rcst': '21', 'lrmtc': '0', 'lnpf': '1', 'stone': '9RW3A2fK0GI1wBlAnh1XOcWhI嘿嘿嘿8OZl4m7CLeizKtvfnyDyrln4lB1VY0xHrpXhcH1v', 'tllc': '', 'dsst2': '1745742265.564154', 'lstf': '0', 'dadir': '/private/var/containers/Bundle/Application/A6AB079B-9E4D-4D4C-8124-A65AED710DB5/DUApp.app', 'inzt': '', 'tcdetk': '0', 'tcrp': '1', 'dsdbt': '1753613048836661', 'lrdyf': '0', 'bkv': '', 'iud': '79373A6D235A40CB90154B58648F460B', 'bty': 'default', 'bty2': '1', 'nect': '1'}, 'devEncParam': {'ct': '1', 'nck2': '62Q9C86sk67A0ye9BE'}}
{'skData': {'tlapp': '1753714535994', 'bcn': 'dewu', 'do2': '15', 'tvlc': '', 'dhdsi': 'Darwin,21.6.0,iPhone', 'nifct': '1', 'dbg': '0', 'dmc': '0778ca838aeb915xxxxxd040ccc3cf1', 'dcai': '-', 'bdn': '嘿嘿嘿', 'tnt': '1', 'dadr': '0x183be7f30|0x198dcd280|0x183c228f4|0x1843a027c', 'bstdr': 'd2802a50|d4001001|540000e3|a9bf7bfd', 'dsst': '2024-07-16 02:56:32 +0000,2024-07-16 02:56:32 +0000', 'iksour': '0', 'tkuid': '88cea24c5dc2b6fa', 'bav': '5.65.2', 'bmkd': '0', 'tfedtk': '0', 'bid': '嘿嘿嘿', 'dme': 'iPhone9,1', 'bssm': '20250727103330b9e50c069149fa1嘿嘿嘿e4010063231b0ddba74e33892', 'lacjb': '0', 'tot': '1753714543785', 'lftk': '0', 'skst': '0', 'dfdlp': '', 'ladf': '0', 'ljdb': '0', 'dsd2bt': '1753613048', 'ldjb': '0', 'tcst': '250', 'oidv': '3DCEDCB0-7FBE-42A3-AB71-F8F567F8D6D6', 'bacdr': 'd2800430|d4001001|540000e3|a9bf7bfd', 'idv': '3DCEDCB0-7FBE-42A3-AB71-F8F567F8D6D6', 'dcpu': 'arm64_v8,2', 'norcst': '14', 'idfs': 'da82cc8c261c12bb4b53f7b24bb8a3bb', 'lrtcai': '', 'lrsf': '', 'bcv': '1.9.3.250402', 'diud': 'UUIDac247e7093e542b3b10e9a1e609111ac', 'lfjbl': '1152921500311909827,0,0', 'dat2': '2025-07-27 10:26:55', 'lfd': '0', 'mntd2': '2B6A9A424CAE41D1E6BD373E0D8115BA06FC18CC980871FFE32118CDDA264F5D6E5264408016FEF6D0C967172BC2E761', 'lspf': '', 'smid': '20250727103330b9e50c069149fa17b8ebd17e4010063231b0ddba74e33892', 'dcm': 'e97ff888f3e25a1f1fda881db47f4fe7', 'lnfrt': '0', 'lrtkt': '0', 'iaid': 'UUIDac247e7093e542b3b10e9a1e609111ac', 'src': 'ios', 'dat3': '1970-01-01 08:00:00', 'dtms': '31968497664', 'dss': '750,1334,2', 'ifa': '', 'dsimc': '0', 'dln': 'zh-Hans-CN', 'idfni': '8abc5649728bfa574ee08df4ff31ad24', 'idv2': '3DCEDCB0-7FBE-42A3-AB71-F8F567F8D6D6', 'dust': '1', 'sk': '9RW3A2fK0GI1wBlAnh1XOcWhI57exliJ8eJvqM0oC4NHlBGnB9WT8OZl4m7CLeizKtvfnyDyrln4lB1VY0xHrpXhcH1v', 'ltwi': '-', 'sksour': '2', 'lrev': '0', 'dat': '2025-07-28 22:53:52', 'itm': '7GPZR297Z9', 'dtiz': '28800', 'lism': '0', 'datmt': '1753714432398', 'dbs': '1,78', 'dvo': '0.00', 'ldjbc': '0,0', 'ikfa': '', 'dpms': '2097807360', 'tfetk': '0', 'dbt': '1753696073860', 'dint': '1745742242.944226818', 'dm': 'iPhone', 'did': 'com.siwuai.duapp', 'dsb': '51', 'dtu': 'App Store', 'dn': 'iPhone', 'dcm2': 'b2ffaf1cebcb07776bec74c0d5cc7d1e', 'dmpn': '中国电信', 'do': '15.8.3', 'ljbmc': '0', 'lnrsf': '', 'ljb': '0', 'dme2': 'D10AP', 'dpxy': '1', 'datpt': '0', 'ds': '14132,30487', 'incuf': 'vs2|0EH|vs2|0|0^E3|0EH|E3|0|0^pWa|0EH|pWa|0|0^wYa|0EH|wYa|0|0^-^-^96|0EH|96|0|0^V3|0EH|V3|0|0^JEj|0EH|JEj|0|0^Mj7|0EH|Mj7|0|0^iPhone9,1kwarm64_v8,2', 'dms': '2000.62,68.75,710.38,649.69,1674.20,314.14,3.34', 'lsimu': '0', 'cicst': '28', 'dpid': '6155', 'dmcc2': 'CN', 'lsd': 'fac37083aacff02337c3fb8797b1f3bd', 'lrspt': '0', 'mntd': '2B6A9A424CAE41D1E6BD373E0D8115BA06FC18CC980871FFE32118CDDA264F5D6E5264408016FEF6D0C967172BC2E761@/dev/disk0s1s1', 'tct': '1753714543885', 'ljbac': '0', 'rcst': '21', 'lrmtc': '0', 'lnpf': '1', 'stone': '9RW3A2fK0GI1wBlAnh1XOcWhI嘿嘿嘿8OZl4m7CLeizKtvfnyDyrln4lB1VY0xHrpXhcH1v', 'tllc': '', 'dsst2': '1745742265.564154', 'lstf': '0', 'dadir': '/private/var/containers/Bundle/Application/A6AB079B-9E4D-4D4C-8124-A65AED710DB5/DUApp.app', 'inzt': '', 'tcdetk': '0', 'tcrp': '1', 'dsdbt': '1753613048836661', 'lrdyf': '0', 'bkv': '', 'iud': '79373A6D235A40CB90154B58648F460B', 'bty': 'default', 'bty2': '1', 'nect': '1'}, 'devEncParam': {'ct': '1', 'nck2': '62Q9C86sk67A0ye9BE'}}
function hook_setObject() {
var _className = "__NSDictionaryM"; //类名
var _methodName = "- setObject:forKeyedSubscript:"; //方法名NSMutableDictionary
var hook_method = eval('ObjC.classes.' + _className + '["' + _methodName + '"]');
Interceptor.attach(hook_method.implementation, {
onEnter: function (args) {
var str = ObjC.Object(args[3]).toString()
// console.log(str)
// Print_OC_RET(args[2], str, this.context);
if (str === "替换要分析的字段") {
print_c_stack(this.context, "参数位置")
// Print_OC_RET(args[2], str, this.context);
}
}, onLeave: function (retval) {
}
});
}
function hook_setObject() {
var _className = "__NSDictionaryM"; //类名
var _methodName = "- setObject:forKeyedSubscript:"; //方法名NSMutableDictionary
var hook_method = eval('ObjC.classes.' + _className + '["' + _methodName + '"]');
Interceptor.attach(hook_method.implementation, {
onEnter: function (args) {
var str = ObjC.Object(args[3]).toString()
// console.log(str)
// Print_OC_RET(args[2], str, this.context);
if (str === "替换要分析的字段") {
传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2025-8-6 09:38
被兆兆的罩罩编辑
,原因: