对xx面APP进行分析

一箫一剑平生意,负尽狂名十五年。这篇文章主要讲述对xx面APP进行分析相关的知识,希望能为你提供帮助。
常规操作,设置代理准备抓包,启动APP进行登录,对抓取到的包进行分析,最好抓2次进行对比,分析哪些参数的数据有变化:

对xx面APP进行分析

文章图片

 
将APP进行反编译,我用的jeb,通过搜索关键字"nonceStr"定位到代码块:
对xx面APP进行分析

文章图片

 
 
参数和抓取到的数据包都对的上,应该就是这里了。
通过分析得知this.pwdMD5 = MD5.md5Encode(MD5.md5Encode(v1)); 将密码进行了两次MD5,将密码进行两次MD5后与抓取到的数据包中password的值进行比对确定正确,密码分析完毕接着分析sign:通过以上代码得知最后会将所有参数放进v0然后调用encryptParam方法进行签名;进入encryptParam:
对xx面APP进行分析

文章图片

 
【对xx面APP进行分析】 
  调用了encryptMap方法,接着查看该方法:
对xx面APP进行分析

文章图片

 
该方法使用迭代器将名值对之间使用=连接,名值对之间使用& 连接,然后带上"key=09ebcc6549b6fad41e0b857459c5b2be"或者"key=75cba6dd6d4d75154624dbe9d770d451",调用toString()接着进行一次MD5计算v2 = MD5.md5Encode(v4.toString()); ,进入md5Encode(),arg9就是我们要得到的内容:
对xx面APP进行分析

文章图片

将string类型的字符串arg9中包含的字符转换成byte类型并且存入一个byte[]数组中。在java中的所有数据底层都是字节,字节数据可以存入到byte数组。
对xx面APP进行分析

文章图片

 
  我们需要查看v4,v4对应的为p0,所以我们在v7处下断点,点击登录,断在v7处,光标移动到p0上,查看到对应的寄存器为v9:
对xx面APP进行分析

文章图片

 
  查看到v9的值为11111111,跳到下个断点查看v7的值,得到我们需要的sign前的数据:
对xx面APP进行分析

文章图片

 
"countryCode=86& nonceStr=zCQk2LKRX5TPOjEebtzNOYNL2CcONEfA& password=d0521106f6ba7f9ac0a7370fb28d0ec6& timestamp=1593148369531& userName=11111111111& key=75cba6dd6d4d75154624dbe9d770d451"
即为签名前的数据,回到v2.toString(); 查看数据签名后最终的值,在v7处下断点,查看v2的值,发现此时还没有转换为string,点击跳转到下一条语句,查看v7,得到值"6662f70966515739e6e294832cca030b",即为签名的值:
 
对xx面APP进行分析

文章图片

 
  将以上需要签名的值进行MD5计算后与v7得到的sign值比对为一致
对xx面APP进行分析

文章图片

 
 
 
 
 

    推荐阅读