一次完整的App设备注册参数逆向分析之旅

华盟原创文章投稿奖励计划

抓包


抓包使用的Reqable,在设备初次登陆的时候,会触发call接口的第一次,生成关键设备参数sk,后续重新进入app,也会触发call接口,但就不是第一次了(你懂的)


自动草稿

这个call接口的逻辑,就是通过携带了如图这个一长串加密了的请求体进行设备的注册,使用平台的data解密的算法解密一下大致如下(敏感数据已作处理)


{'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'}}






分析body参数


上述已经解密出来的众多参数,我咋知道这些玩意儿啥用呢,作为没经验的ios初学者,就只能一个一个去hook分析。这里要分析的所有参数都来自这么一个字典形式body,所以一开始,我们只能猜测并进行模糊的hook,hook一下字典添加元素的操作,- setObject:forKeyedSubscript:方法,并加一个判断,判断这个添加进去的元素是xxx,这样就能针对性去分析某一个参数了。


function hook_setObject() { var _className = "__NSDictionaryM"//类名 var _methodName = "- setObject:forKeyedSubscript:"//方法名NSMutableDictionary var hook_method = eval('ObjC.classes.' + _className + '["' + _methodName + '"]'); Interceptor.attach(hook_method.implementation, { onEnterfunction (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);             }         }, onLeavefunction (retval) {         }     }); }


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寄存器的值。



const baseAddr = Module.findBaseAddress('某App');  // Hook sub_109D7FE0C → 返回 NULL,进入分支3 const sub_0x9CEA1FC = baseAddr.add(0x9CEA1FC); Interceptor.attach(sub_0x9CEA1FC, { onEnter() { // console.log(this.context.x2); const obj = new ObjC.Object(this.context.x2); console.log(obj)         }     });


打印值如下

自动草稿

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

自动草稿
自动草稿

哟西,这逻辑不就是看你小子有没有越狱吗?接下来干嘛呢,像我这样的菜鸟就老老实实进去一点点看逻辑,打注释,如果是检测,就思考能不能hook绕过,或者伪装自己的参数,如果是随机值,就自己构造替换,是别的什么算法生成的字段,就去分析看看算法逻辑,总而言之,hook这个call接口的参数,挨着挨着去分析和修改参数,直到注册出来的设备能用,就ok了。



最后


里面还有与设备相关的参数,smid和bssm值就由fcuuid字段生成,这里我就是直接用ios中的改机软件改掉的。这一套就可以实现hook注册设备,并使用设备去注册账号请求平台登陆数据了。当然,风控一直再改,前两周方案一跑,意气风发,这两周就只能两眼一瞪。

文章来源:HACK之道、看雪社区

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容