没错,今天要分析的是这个"sign"
字段,"t"是一个时间戳,所以每次请求加密肯定都是变化的。
2.jadx静态分析
拿出我们的jadx,不管三七二十一,直接把这个app给它反编译了,因为我这是低版本的所以没有壳,最新版本的好像有一个奇虎360的壳,但是不重要直接上fart脱壳机就可以。
此处就省略了。
全局搜索下,可以看到符合条件就没几个,那就一个个的点进去看看。
这里直接来到hashMap.put("sign", d.a(hashMap));
,感觉很像的样子。
大概看了下就是声明一个hashMap,然后分别添加ax.az, "appId", "sign",ax.az
是个啥点进去看下原来就是时间戳"t"啊,这和抓包看到的请求体一模一样啊
这里sign = d.a(map)
,跟进去看看。
静态分析下,a()方法内部大概就是把传递的map类型参数,拼接成一个string,之后调用b()方法。b()方法内部用到SHA256withRSA
算法先做一层加密,最后再来base64加密。
对该算法不了解,可以参考下文章:python rsa加解密
所以关键点在b()
方法,只需要hook就可以。分析差不多了,上frida动态调试下。
3.frida动态调试
打开frida服务,运行命令:
frida -U com.mxbc.mxsa -l mixue_hook.js
hook代码如下:
Java.perform(function (){
var d = Java.use("com.mxbc.mxsa.network.feima.d");
d.b.implementation = function (str1) {
console.log("↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓");
console.log(`d.b方法被调用`);
console.log("d.b-参数:" + str1);
var result = d.b(str1);
console.log(`d.b加密后的数据:${result}`);
console.log("↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑");
return result;
};
})
看看跑出来是个啥?
入参和返回值也知道了,感觉像是一个标准rsa的算法,但是秘钥不知道是啥?
咋办 继续hook啊。
看样子c
就是秘钥,里面用到base64了,hook 下base64试一试?
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Python工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Python开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以扫码获取!!!(备注Python)
![img](https://i-blog.csdnimg.cn/blog_migrate/330df07b7e4894def07928c9033b6047.jpeg)