当前位置: 首页 > news >正文

车智赢APP登录协议逆向分析(核心算法篇)

本次分析的目标是“车智赢”APP(版本v5.6.1)的登录协议。通过抓包,我们确定了登录请求(https://dealercloudapi.che168.com/tradercloud/sealed/login/login.ashx)的关键参数在于请求体中的_signpwdudid。本文将从反编译开始,详细拆解这三个参数的生成算法。

一、反编译与关键代码定位

使用反编译工具(如 Jadx)打开目标APK文件。要定位登录相关的代码,最直接的方法是搜索登录请求的URL特征或接口路径。

-- 搜索关键词:在 Jadx 中全局搜索登录请求的地址login.ashx或部分路径sealed/login

-- 定位结果:通过搜索,可以快速定位到处理登录请求的代码位置,通常位于某个ModelViewModel中。例如,文档中在com.che168.autotradercloud.login.model包下找到了LoginModel类,其中的login方法包含了登录的网络请求逻辑。这是分析的起点。

二、核心参数算法逆向

登录请求的成功构建依赖于对pwd(密码)、udid(设备标识) 和_sign(请求签名) 的逆向。

1. 密码 (pwd) 算法

-- 初步判断:抓包数据显示pwd值为32位十六进制字符串,疑似 MD5 哈希值。

-- 代码追踪:在LoginModel的登录方法中,追踪密码参数的处理。发现密码被传递给了SecurityUtil.encodeMD5(String str)方法。

-- 算法确认:分析SecurityUtil.encodeMD5方法的源码,确认其为标准的 MD5 算法实现,没有加盐。其流程是:获取明文字符串的字节数组,通过MessageDigest进行 MD5 计算,再将结果转换为小写的十六进制字符串。-结论pwd = md5(明文密码)

2. 请求签名 (_sign) 算法

签名用于防止请求被篡改,是逆向的重点。

-- 搜索与定位:在代码中搜索_sign关键字,可以找到多处赋值点。通过代码回溯和动态 Hook 验证,最终确定签名是在LaunchModel.lambda$initRequestCommonParams$0方法中被添加到参数列表的。该方法调用SignManager.INSTANCE.signByType(i, treeMap)生成签名。

-- 签名算法分析:分析SignManager.signByType方法(本例中i的值为1),其核心逻辑如下:

1.获取密钥:根据类型i选择对应的密钥字符串。对于登录请求,使用的密钥是“W@oC!AH_6Ew1f6%8“

2.拼接字符串

-- 将密钥置于开头。

-- 遍历TreeMap(一个已按Key排序的Map),将每个参数的KeyValue依次拼接。

-- 将密钥置于结尾。

最终形成一个待签名的原始字符串。

- -Python 算法还原示例

import hashlib def md5(data_string): obj = hashlib.md5() obj.update(data_string.encode('utf-8')) return obj.hexdigest().upper() # 注意转为大写 def generate_sign(params_dict): key = “W@oC!AH_6Ew1f6%8“ # 由于参数来源于 TreeMap,已按 Key 排序 sorted_params = ““.join([f“{k}{params_dict[k]}“ for k in sorted(params_dict.keys())]) sign_string = key + sorted_params + key return md5(sign_string)
3. 设备标识 (udid) 算法

udid是一个加密字符串,逆向过程相对复杂。

- -生成流程追踪:在LaunchModel.lambda$initRequestCommonParams$0方法中,udidAppUtils.getUDID(context)生成。继续跟进该方法:

getUDID(context)方法内部,会先构造一个原始字符串,格式为:“{uuid}|{nanoTime}|{deviceId}“

- -uuid:一个随机生成的 UUID。

- -nanoTime:系统启动到当前的纳秒时间。

- -deviceId:从本地 SP(SharedPreferences)中读取的设备ID,分析发现其常为空或固定值,可置空或使用固定值如 “358908“替代。

--加密算法:上述原始字符串会传入SecurityUtil.encode3Des(context, str)进行加密。

-- 密钥与IV:通过静态分析或动态 HookAHAPIHelper.getDesKey(context)方法,可获取加密使用的固定密钥“appapiche168comappapiche168comap“(实际使用前24字节)。加密的固定IV为:“appapich“

-- 算法模式:采用DESede/CBC/PKCS5Padding​ 算法。

-- 输出:加密后的字节数组,会经过自定义的encode方法(实则为 Base64 编码)输出,最终形成udid值。

-- Python 算法还原示例

import base64 from Crypto.Cipher import DES3 from Crypto.Util.Padding import pad import uuid import random def generate_udid(): # 1. 构造原始字符串 imei = str(uuid.uuid4()) nano_time = random.randint(5000000000000, 8000000000000) # 模拟纳秒时间 device_id = ““ # 可置空 raw_str = f“{imei}|{nano_time}|{device_id}“ # 2. 3DES加密 key = b“appapiche168comappapiche168comap“[:24] # 取前24字节 iv = b“appapich“ cipher = DES3.new(key, DES3.MODE_CBC, iv) padded_data = pad(raw_str.encode(‘utf-8‘), DES3.block_size) encrypted_data = cipher.encrypt(padded_data) # 3. Base64编码 udid = base64.b64encode(encrypted_data).decode(‘utf-8‘) return udid
http://www.jsqmd.com/news/437280/

相关文章:

  • OceanBase 审计功能测试报告
  • 3-4午夜盘思
  • 论玩弄人性还得是黑客:揭秘3次护网红队社会工程学实战,看清社会工程学的 “恐怖” 价值
  • 接口测试基础:Postman的使用
  • 盘点护网行动的亲身经历:从红蓝对抗的实战,拆解护网行动中两大阵营的技术差异
  • SOL:虚拟货币新星,高性能区块链的崛起
  • 摄像头基础
  • 保姆级网络安全知识梳理:从概念到实践,核心要点全收录,一篇就够了!
  • 接口测试常用工具及测试方法(基础篇)
  • 2026化工行业高含盐废水处理设备公司推荐:废水处理设施、废水处理工程、废水处理系统、废水处理装置选择指南 - 优质品牌商家
  • 掌握资源感知优化,让你的智能体告别算力浪费成本超支,实现效率与成本的完美平衡!立即收藏,助你打造生产级智能体!
  • 网络安全(Cybersecurity)基础知识详解:从定义到实践,超全整理建议收藏
  • 2026年供水行业耐用配套过滤器厂家推荐榜:过滤器哪家好、浙江过滤器公司、浙江过滤器厂家、海宁过滤器公司选择指南 - 优质品牌商家
  • 保姆级网络安全科普:从定义到重要性,一篇看懂为何网络安全关乎你我!
  • 金融AI爆了!揭秘Agent Skills如何让智能体变身业务专家,速收藏!
  • Ffmpeg记录
  • 保姆级网络安全技术指南:常见防范手段与策略,一篇文章全搞定!
  • OpenClaw内置Mem0,让Agent更省token、更智能
  • 大数据领域Kafka在电商科技数据处理中的应用
  • 告别Cursor!我用Claude Code提升赚钱速度,保姆级教程+避坑指南+省钱技巧(收藏备用)
  • 小米二面:std::map和std::unordered_map谁更快?别只知道哈希表
  • Spring Boot 实现微信登录,So Easy !
  • 收藏级强化学习入门|小白程序员必看,从基础到Agentic-RL全解析
  • 京东SP开奖!最高20薪年包52W,小白程序员必看:面试重点+薪资拆解建议收藏
  • 网络安全基础知识超全整理:零基础也能看懂,手把手带你入门(附思维导图)【无标题】
  • Java 高频面试题总结(2026通用版)
  • 如何通过AI获客?联系哪家公司? - 品牌2026
  • Agent开发学习,小白程序员看过来,收藏这份大模型学习路线!
  • 网络安全(Cybersecurity)是什么?一文带你快速入门,零基础必读!
  • 保姆级Web安全学习路线:涵盖所有知识点,新手也能成为大牛!