Readmeapp名称: 6L2m5p2l5LqG

版本号: My45MS4w

环境及工具:macos

objection

frida

加密分析

该app没有抓包限制, 直接charles就可以完整抓包:

url = "https://cdn.api.chelaile.net.cn/bus/line!encryptedLineDetail.action?"

params = {

"astate": "1",

"screenWidth": "1440",

"stats_act": "enter",

"sign": "tO1Sr78pIdUX538kzku2Jg==",

"cshow": "linedetail",

"nw": "WIFI",

"stats_referer": "searchResult",

"lineName": "103",

"language": "1",

"cityId": "045",

"AndroidID": "d136b11ee7404c41",

"mac": "48:db:50:8a:a5:4e",

"localIdCreateTime": "1597570055556",

"lineNo": "103路",

"phoneBrand": "google",

"gps_ts": "1597629672280",

"lchsrc": "icon",

"udid": "97784171-f4e9-4c8f-94cd-1c8f077f7ab9",

"system_push_open": "1",

"lat": "29.802732",

"deviceType": "Nexus 6P",

"geo_type": "gcj",

"push_open": "1",

"o1": "5356f9a6e5097ab9be1b79eefed1e5849ea3a6d9",

"sv": "8.1.0",

"cryptoSign": "684a9de1d38f99481e64758d3c4a549c",

"geo_lac": "49.0",

"lng": "121.479078",

"first_src": "app_wandoujia",

"screenHeight": "2476",

"userAgent": "Mozilla/5.0 (Linux; Android 8.1.0; Nexus 6P Build/OPM1.171019.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/61.0.3163.98 Mobile Safari/537.36",

"vc": "176",

"userId": "unknown",

"isNewLineDetail": "1",

"gpstype": "gcj",

"geo_lt": "2",

"paramsMakeUp": "is",

"s": "android",

"last_src": "app_wandoujia",

"geo_lng": "121.479078",

"geo_lat": "29.802732",

"v": "3.91.0",

"sstate": "3",

"wifi_open": "1",

"imei": "867686021846009",

"stats_order": "1-1",

"screenDensity": "3.5",

"timeStamp": "1597629788182",

"cryptoSignStr": "8b3141731b1739ec07107497b29c43d3",

"dns_error": "1",

}

headers = {

"User-Agent": "Dalvik/2.1.0 (Linux; U; Android 8.1.0; Nexus 6P Build/OPM1.171019.011)",

"Host": "cdn.api.chelaile.net.cn",

"Connection": "Keep-Alive",

"Accept-Encoding": "gzip",

}

经过测试, 有效的校验参数只有sign;

根据r0ysue的逻辑:

逆向永远要站在开发的思路上解决问题

逆向永远要比开发更底层

so, 任何一个开发都不想单独写个方法混淆字符串, 都是被逼无奈, 所以常规操作, 上来先搜字符串;

sign, "sign"的结果都太多了, 最后用的是url地址encryptedLineDetail定位到可以位置 ;

使用objection 监控第一个watch第一个a方法:

android hooking watch class_method dev.xesam.chelaile.sdk.k.b.a.d.a --dump-args --dump-return

手动触发请求, 结果如下:

返回的是一个object, 使用Wallbreaker打印对象的内容, 看看sign是否已经生成:

查找对应的object地址

plugin wallbreaker objectsearch dev.xesam.chelaile.sdk.f.y

打印对应的地址0x4386;

直接打印出sign的内容了,a()方法直接生成了sign;

分析一下a方法的生成逻辑:

该类的构造函数d(Context context, ppVar, z zVar)调用了o.a(this.f30583a), 返回的结果调用了getParams()方法, 跟进去看一下;

整个加密代码都找到了, getParams方法调用了a(), 并将结果赋值给了AppLinkConstants.SIGN也就是sign; a()调用了a(String str, String str2)进行加密, 参数为时间戳和字符串: "" + System.currentTimeMillis()和woqunimalegebi1234567890(真的很有素质) ;

用frida直接hook这个方法, 生成时间戳然后调用即可, 请求的时候带上一样的时间戳就可以保证正常请求了;

返回的response内容是加密的, 解密位置就在发送请求回调的位置:

最后于 2020-9-8 22:07

被lotus*编辑

,原因:

android中的sign加密,[原创]某交通app的sign加密分析相关推荐

  1. 从源码解析-Android中Zygote进程是如何fork一个APP进程的

    zygote进程fork子进程 前言 强烈推荐 进程创建流程 APP启动第三方应用 startActivity startService sendBroadcast ContentResolver.q ...

  2. 自由Android安全研究员陈愉鑫:移动App灰色产业案例分析与防范

    11月18号,2017看雪安全开发者峰会在北京悠唐皇冠假日酒店举行.来自全国各地的开发人员.网络安全爱好者及相应领域顶尖专家,在2017看雪安全开发者峰会汇聚一堂,只为这场"安全与开发&qu ...

  3. android tsclib.so,续 某哩某哩APP之m3u8解密分析之跳过so文件 从APP日志入手(AES/CBC模式)...

    前排提示!!!!! 论坛禁止留联系方式!! 禁止求成品,也没有成品! 写在前面的话 前段时间已经研究过这个平台网页和APP的AES加解密方式了. 最近发现这个平台的APP的加解密方式更新了,所以又继续 ...

  4. Android中应用百度地图API开发地图APP实例-显示百度地图

    场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY http://lbsyun.baidu.com/index.php 申请API_KEY 登录百度开放平台后找到控制台下 ...

  5. android应用控制百度地图,Android中应用百度地图API开发地图APP实例-显示百度地图...

    场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY 申请API_KEY 登录百度开放平台后找到控制台下的应用管理-创建应用 依次输入应用名,应用类型选择Android S ...

  6. Android中使用Camera类编写手机拍照App的实例教程

    Camera是Android摄像头硬件的相机类,位于硬件包"android.hardware.Camera"下.它主要用于摄像头捕获图片.启动/停止预览图片.拍照.获取视频帧等,它 ...

  7. Android文件夹占用空间分析,关于Android中图片大小、内存占用和drawable文件夹研究分析...

    引用链接 结果分析 同一张图片,放在不同目录下,会生成不同大小的Bitmap Bitmap的长度和宽度越大,占用的内存就越大 图片在硬盘上占用的大小,与在内存中占用的大小完全不一样 下面我会对上面几个 ...

  8. Android中使用Handler(消息机制)造成内存泄露的分析和解决

    问题描述: Handler 内部类持有 外部类Activity的引用,如果Activity退出而Handler还有延迟处理的消息没有处理完,会导致Activity不能回收,反复如此会导致内存泄露. 解 ...

  9. Android中的Drawable(三)

    文章收藏的好句子:一个人也许无法改变外界,但可以改变自己. 目录 1.TransitionDrawable 2.InsetDrawable 3.ScaleDrawable 1.TransitionDr ...

最新文章

  1. 用html编写一个贪吃蛇,HTML编写的贪吃蛇代码
  2. 数据准备技巧及其对机器学习的重要性
  3. 面试中让你头疼的问题都在这儿
  4. NASM汇编程序中的宏定义
  5. 双代号网络图基础算法_9个简单数学算法在管理领域的运用
  6. 逆向-002-iOS重签名
  7. LeetCode 1346. 检查整数及其两倍数是否存在(哈希)
  8. python 双层for循环_day05-Python运维开发基础(双层循环、pass/break/continue、for循环)...
  9. python模拟访问js_python模拟http请求,返回“浏览器不支持javascript,请设置您的浏览器开启javascript支持”...
  10. 如何快速进入一个陌生的领域,高手通常用这三步
  11. 精心收集的jQuery常用的插件1000
  12. 阿里云云计算 15 在线实验--OSS的使用
  13. Python 多行注释
  14. 如何配置QQ邮箱或腾讯企业邮箱发送邮件
  15. 完美配色排版海报模板|神奇的色彩搭配
  16. TESS NG微观交通仿真软件二次开发接口如何规划
  17. 手机app网易邮箱服务器设置,苹果手机iphone怎么设置网易邮箱 iphone设置网易邮箱教程【步骤】...
  18. 调用PC端、手机、平板摄像头拍照
  19. python数组列表添加一行一列np.rowstack()np.column_stack()
  20. LuoguP1710 地铁涨价

热门文章

  1. 企业微信组织架构同步优化的思路与实操演练
  2. 微信11亿用户基于时间序的海量存储扩展性与多机容灾能力提升
  3. calcite validate
  4. 对某代刷网站的渗透测试
  5. php企业微信通讯录同步设置接收事件服务器
  6. uni-app 人脸识别分析及实现(前端) + nvue开发源码
  7. 成也简历,败也简历!
  8. python如何调试
  9. C++编程用筛选法求100以内的素数
  10. 免费wifi共享软件开发记录