一箫一剑平生意,负尽狂名十五年。这篇文章主要讲述对xx面APP进行分析相关的知识,希望能为你提供帮助。
常规操作,设置代理准备抓包,启动APP进行登录,对抓取到的包进行分析,最好抓2次进行对比,分析哪些参数的数据有变化:
文章图片
将APP进行反编译,我用的jeb,通过搜索关键字"nonceStr"定位到代码块:
文章图片
参数和抓取到的数据包都对的上,应该就是这里了。
通过分析得知this.pwdMD5 = MD5.md5Encode(MD5.md5Encode(v1)); 将密码进行了两次MD5,将密码进行两次MD5后与抓取到的数据包中password的值进行比对确定正确,密码分析完毕接着分析sign:通过以上代码得知最后会将所有参数放进v0然后调用encryptParam方法进行签名;进入encryptParam:
文章图片
【对xx面APP进行分析】
调用了encryptMap方法,接着查看该方法:
文章图片
该方法使用迭代器将名值对之间使用=连接,名值对之间使用& 连接,然后带上"key=09ebcc6549b6fad41e0b857459c5b2be"或者"key=75cba6dd6d4d75154624dbe9d770d451",调用toString()接着进行一次MD5计算v2 = MD5.md5Encode(v4.toString()); ,进入md5Encode(),arg9就是我们要得到的内容:
文章图片
将string类型的字符串arg9中包含的字符转换成byte类型并且存入一个byte[]数组中。在java中的所有数据底层都是字节,字节数据可以存入到byte数组。
文章图片
我们需要查看v4,v4对应的为p0,所以我们在v7处下断点,点击登录,断在v7处,光标移动到p0上,查看到对应的寄存器为v9:
文章图片
查看到v9的值为11111111,跳到下个断点查看v7的值,得到我们需要的sign前的数据:
文章图片
"countryCode=86& nonceStr=zCQk2LKRX5TPOjEebtzNOYNL2CcONEfA& password=d0521106f6ba7f9ac0a7370fb28d0ec6& timestamp=1593148369531& userName=11111111111& key=75cba6dd6d4d75154624dbe9d770d451"
即为签名前的数据,回到v2.toString(); 查看数据签名后最终的值,在v7处下断点,查看v2的值,发现此时还没有转换为string,点击跳转到下一条语句,查看v7,得到值"6662f70966515739e6e294832cca030b",即为签名的值:
文章图片
将以上需要签名的值进行MD5计算后与v7得到的sign值比对为一致
文章图片
推荐阅读
- ? 0001 No application 'E:wwwgolog' found in your GOPATH
- 获取Spring上下文(ApplicationContext)的三种方法
- 浙大保研2019年上机题7-1 Happy Numbers (20分)
- 使用To关键字的Sass @for指令用法
- SASS(安装和执行和详细步骤)
- Sass脚本简要解释
- Sass @-规则和指令
- Sass预处理用法示例
- SASS将内容块传递给Mixin