zoukankan      html  css  js  c++  java
  • 对xx面APP进行分析

    常规操作,设置代理准备抓包,启动APP进行登录,对抓取到的包进行分析,最好抓2次进行对比,分析哪些参数的数据有变化:

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

    参数和抓取到的数据包都对的上,应该就是这里了。

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

     调用了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值比对为一致

     

  • 相关阅读:
    SharePoint 2013 配置基于表单的身份认证
    SharePoint 2013 场解决方案包含第三方程序集
    SharePoint 2010 站点附加数据升级到SP2013
    SharePoint 2013 在母版页中插入WebPart
    SharePoint 2013 搭建负载均衡(NLB)
    SharePoint 部署解决方案Feature ID冲突
    SharePoint 2013 配置基于AD的Form认证
    SharePoint Server 2016 Update
    SharePoint 2013 为用户组自定义EventReceiver
    SharePoint 2013 JavaScript API 记录
  • 原文地址:https://www.cnblogs.com/r1char/p/13194680.html
Copyright © 2011-2022 走看看