android中的sign加密,[原创]某交通app的sign加密分析
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加密分析相关推荐
- 从源码解析-Android中Zygote进程是如何fork一个APP进程的
zygote进程fork子进程 前言 强烈推荐 进程创建流程 APP启动第三方应用 startActivity startService sendBroadcast ContentResolver.q ...
- 自由Android安全研究员陈愉鑫:移动App灰色产业案例分析与防范
11月18号,2017看雪安全开发者峰会在北京悠唐皇冠假日酒店举行.来自全国各地的开发人员.网络安全爱好者及相应领域顶尖专家,在2017看雪安全开发者峰会汇聚一堂,只为这场"安全与开发&qu ...
- android tsclib.so,续 某哩某哩APP之m3u8解密分析之跳过so文件 从APP日志入手(AES/CBC模式)...
前排提示!!!!! 论坛禁止留联系方式!! 禁止求成品,也没有成品! 写在前面的话 前段时间已经研究过这个平台网页和APP的AES加解密方式了. 最近发现这个平台的APP的加解密方式更新了,所以又继续 ...
- Android中应用百度地图API开发地图APP实例-显示百度地图
场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY http://lbsyun.baidu.com/index.php 申请API_KEY 登录百度开放平台后找到控制台下 ...
- android应用控制百度地图,Android中应用百度地图API开发地图APP实例-显示百度地图...
场景 效果 在使用百度地图API之前需要先在百度地图开放平台中申请API_KEY 申请API_KEY 登录百度开放平台后找到控制台下的应用管理-创建应用 依次输入应用名,应用类型选择Android S ...
- Android中使用Camera类编写手机拍照App的实例教程
Camera是Android摄像头硬件的相机类,位于硬件包"android.hardware.Camera"下.它主要用于摄像头捕获图片.启动/停止预览图片.拍照.获取视频帧等,它 ...
- Android文件夹占用空间分析,关于Android中图片大小、内存占用和drawable文件夹研究分析...
引用链接 结果分析 同一张图片,放在不同目录下,会生成不同大小的Bitmap Bitmap的长度和宽度越大,占用的内存就越大 图片在硬盘上占用的大小,与在内存中占用的大小完全不一样 下面我会对上面几个 ...
- Android中使用Handler(消息机制)造成内存泄露的分析和解决
问题描述: Handler 内部类持有 外部类Activity的引用,如果Activity退出而Handler还有延迟处理的消息没有处理完,会导致Activity不能回收,反复如此会导致内存泄露. 解 ...
- Android中的Drawable(三)
文章收藏的好句子:一个人也许无法改变外界,但可以改变自己. 目录 1.TransitionDrawable 2.InsetDrawable 3.ScaleDrawable 1.TransitionDr ...
最新文章
- 用html编写一个贪吃蛇,HTML编写的贪吃蛇代码
- 数据准备技巧及其对机器学习的重要性
- 面试中让你头疼的问题都在这儿
- NASM汇编程序中的宏定义
- 双代号网络图基础算法_9个简单数学算法在管理领域的运用
- 逆向-002-iOS重签名
- LeetCode 1346. 检查整数及其两倍数是否存在(哈希)
- python 双层for循环_day05-Python运维开发基础(双层循环、pass/break/continue、for循环)...
- python模拟访问js_python模拟http请求,返回“浏览器不支持javascript,请设置您的浏览器开启javascript支持”...
- 如何快速进入一个陌生的领域,高手通常用这三步
- 精心收集的jQuery常用的插件1000
- 阿里云云计算 15 在线实验--OSS的使用
- Python 多行注释
- 如何配置QQ邮箱或腾讯企业邮箱发送邮件
- 完美配色排版海报模板|神奇的色彩搭配
- TESS NG微观交通仿真软件二次开发接口如何规划
- 手机app网易邮箱服务器设置,苹果手机iphone怎么设置网易邮箱 iphone设置网易邮箱教程【步骤】...
- 调用PC端、手机、平板摄像头拍照
- python数组列表添加一行一列np.rowstack()np.column_stack()
- LuoguP1710 地铁涨价