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

     

  • 相关阅读:
    基本输入输出函数
    变长参数表函数的编写
    一文精通Linux 命令行
    Linux 下的种种打包、压缩、解压命令
    GIT补丁怎么打?
    GIT 合并的冲突解决途径
    GIT 库整理方法
    GIT中常用命令详解1.reset
    霍夫曼编码及译码
    C语言链表实现队列
  • 原文地址:https://www.cnblogs.com/r1char/p/13194680.html
Copyright © 2011-2022 走看看