首页 > 其他分享 >某电商app的sign分析

某电商app的sign分析

时间:2024-01-04 12:44:47浏览次数:22  
标签:调用 url app unsigned sign char 参数 电商

定位sign关键位置

抓包后看到sign的值为16个字节,猜测应该是一个md5

可以通过hookNewStringUTF利用字符串长度筛选定位到关键位置,也可以通过url中的关键字段去定位组包位置。这里利用后者,搜索x-api-eid-token字段,注意这里最好使用此url特有的字段,这样好筛选。jadx中看到此字段被CHANGEABLE_PARAM_LIST引用

继续往上回溯引用CHANGEABLE_PARAM_LIST的地方getChangeableParamStr

向上回溯getChangeableParamStr的引用有多个,经过打印筛选得到实际的引用为getQueryParamsStr。此函数调用getStaticParamStr函数得到UNCHANGEABLE_PARAM_LIST中包含的固定的参数值,调用getChangeableParamStr得到CHANGEABLE_PARAM_LIST中包含的不固定会变化的参数值。最后将固定的参数和不固定的参数拼接后返回。

继续往上回溯getQueryParamsStr引用,最后得到addStatQueryParam--->getStatisticReportString--->getQueryParamsStr。查看addStatQueryParam函数其会将getStatisticReportString返回的固定和不固定参数拼接后的结果作为参数调用addStateQueryParamInternal

查看addStateQueryParamInternal,其先会调用getUrl获取当前url,然后与传入的参数进行拼接,最后调用setUrl重新设置url

此时还没有涉及到sign,继续回溯addStatQueryParam的引用得到setupParams。其会调用addStatQueryParam添加查询参数,调用addCustomQueryParam添加自定义业务参数

setUrl和上述分析过程中的关键函数进行hook观察url的变化情况,可以发现在调用了addCustomQueryParam添加了自定义参数后(并且在调用doSignUsingJdGuard函数之前)紧接着又添加了sign参数。

所以最后找到是signature函数,其会调用com.jingdong.common.network.JDNetworkDependencyFactory$3.signature计算得到sign等参数,最后调用seturl冲新设置url。

com.jingdong.common.network.JDNetworkDependencyFactory$3.signature函数会调用jni函数getSignFromJni

分析sign算法

getSignFromJni对应的native函数在libjdbitmapkit.so

  1. 先调用gettimeofday添加时间戳st=
  2. 调用lrand48() % 3生成encryptIdoffset,并与1拼接得到参数sv=
  3. 添加了st=sv=的url和encryptIdoffset作为参数调用自定义的加密函数
  4. 返回的加密数据进行base64编码
  5. base64编码后的结果进行md5并转化为字符串得到sign

分析3中的自定义加密函数,其首先会利用之前随机生成的offsetencryptId选择对应的生成算法和key。

最后得到offsetencryptIdsv和生成算法的对应关系如下表

分析TenSeattos生成算法,其会轮询加密每一个字符

用c将加密算法还原如下

void TenSeattosEncrypt(char* input, int input_len)
{
    int v4, v5;
    char v6;
    const char* TenSeattos_key = "80306f4370b39fd5630ad0529f77adb6";
    unsigned char table[0x10] = { 0x37, 0x92, 0x44, 0x68, 0xA5, 0x3D, 0xCC, 0x7F, 0xBB, 0xF, 0xD9, 0x88, 0xEE, 0x9A, 0xE9, 0x5A };
    for (int i = 0; i != input_len; ++i) {
        v4 = i & 7;
        v5 = table[i & 0xF];
        v6 = (v5 + (*(unsigned char*)(input + i) ^ *(unsigned char*)(TenSeattos_key + v4) ^ table[i & 0xF])) ^ table[i & 0xF];
        *(unsigned char*)(input + i) = v6;
        *(unsigned char*)(input + i) = *(unsigned char*)(TenSeattos_key + v4) ^ v6;
    }
}

知道其中一种算法就可以固定sv参数去请求接口了,frida hook打印一下整个加密过程

标签:调用,url,app,unsigned,sign,char,参数,电商
From: https://www.cnblogs.com/revercc/p/17944995

相关文章

  • Apple Xcode 14.3 (14E222b) 正式版发布下载
    CommandLineToolsforXcode14,tvOS16&watchOS9SimulatorRuntime作者主页:sysin.orgXcode14包含了在所有Apple平台上开发、测试和分发App所需的一切资源。利用Swift和SwiftUI的易用性与强大能力以及全新的跨平台App体验,使用编辑器的增强功能更快捷地编写代码......
  • JetBrains AppCode 2023.1 (macOS x64、aarch64) - 适用于 iOS/macOS 开发的智能 IDE
    Xcode14.3compatibility,Swiftrefactoringsandintentions,theIDE’sUI,andKotlinMultiplatformMobile.作者主页:sysin.orgJetBrainsAppCode-适用于iOS/macOS开发的智能IDEAppCode2023现已推出,立即了解最新变化为什么选择AppCode得益于对代码结构的深刻理解,Ap......
  • uniapp:全局消息是推送,实现app在线更新,WebSocket,apk上传
    全局消息是推送,实现app在线更新,WebSocket1.在main.js中定义全局的WebSocket2.java后端建立和发送WebSocket3.通知所有用户更新背景:开发人员开发后app后打包成.apk文件,上传后通知厂区在线用户更新app。那么没在线的怎么办?因为我们在上一篇博客中写了,在app打开的时候回去校验是否......
  • uniapp:实现手机端APP登录强制更新,从本地服务器下载新的apk更新,并使用WebSocket,实时强
    实现登录即更新,或实时监听更新本文介绍的是在App打开启动的时候调用更新,点击下方链接,查看使用WebSocket实现实时通知在线用户更新。uniapp:全局消息是推送,实现app在线更新,WebSocket,apk上传:登录更新流程1.在app每次启动的时候请求java后端,2.后端接口获取最新的版本:3.打开更新页面4......
  • Apple Logic Pro 10.7 (Logic Pro 10.7 + MainStage 3.5 (Universal))
    作者:gc,主页:www.sysin.orgLogicPro本领先声夺人,创意一鸣惊人。使用实时循环乐段,以全新方式进行音乐创作和即兴演奏。借助采样器和快速采样器将声音转化为乐器。通过步进音序器来快速制作鼓点节拍和旋律模式。利用LogicRemote在iPad或iPhone上掌控乐曲的创作。LogicProMai......
  • 远程安卓盒子N1安装APP-远程查看机顶盒屏幕画面等
    title:远程安卓盒子N1安装IPTVAPP-远程查看机顶盒屏幕画面等tags:[N1,Android,安卓,iptv,家宽,远程控制,机顶盒,frps,frpc,frp]新版原文:https://www.carlzeng.top/search?q=远程安卓盒子N1安装APP-远程查看机顶盒屏幕画面等版权声明:本博客所有文章除特别声明外,均采用BY......
  • “尝试输入密码的次数太多 还原 Apple Watch 并重新配对。” 的正确解法
    “尝试输入密码的次数太多还原AppleWatch并重新配对。”的正确解法作者主页:www.sysin.org说明:本文适用于watchOS7和iOS14,不排除未来产品更新致使操作方法有所变更。今日一不小心也中招,如图。开始搜索一通,排在前面的全部是错误解法。实在无语…正确官方解法如下:https://su......
  • eqwalizer WhatsApp 开源的erlang类型检查工具
    可能大家都听说过WhatsApp对于erlang使用是比较多的,WhatsApp的IM系统就是基于erlang开发的,同时WhatsApp也开源了一些erlang周边的工具eqwalizer是一个类型检查的,可以与rebar以及非rebar项目集成参考使用基于rebar的项目下载工具https://github.com/WhatsApp/eqwalizer/......
  • Xcode 15 beta 6 (15A5219j) - Apple 平台 IDE
    Xcode15beta6(15A5219j)-Apple平台IDEIDEforiOS/iPadOS/macOS/watchOS/tvOS/visonOS作者主页:sysin.orgvisonOS支持已更新。Xcode15使您能够为所有Apple平台开发、测试和分发应用程序。通过增强的代码完成、交互式预览和实时动画,更快地编写和设计您的应用程序。使用......
  • Apple iWork(Pages、Numbers、Keynote)11.0 发布
    苹果今天将其专为iOS和macOS设备设计的iWork应用套件更新为版本11,引入了许多新功能和改进功能。Pages文稿。文档高手,精美不言而喻。进一步了解Pages文稿>Numbers表格。精妙的电子表格,联手做。进一步了解Numbers表格>Keynote讲演。令人难忘的出色提案,轻松打造。进......