android url参数加密,[原创]航旅纵横URL参数的解密

一.打开这个APK 随便点击一个链接 用fiddler进行手机抓包抓到如下数据包

Accept-Language: zh-CN,zh;q=0.8

User-Agent: Mozilla/5.0 (Linux; U; Android 5.1; zh-cn; HUAWEI TAG-CL00 Build/HUAWEITAG-CL00) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Mobile Safari/537.36

Content-Type: application/octet-stream

Content-Length: 722

Host: ume1.umetrip.com

Connection: Keep-Alive

Accept-Encoding: gzip

Cookie: JSESSIONID=559756B55C6ACF8E0F2DBD0EC9F359AB.umeIProductServer14648; X-LB=1.8.9.443301ed

z9ulGud4qXQ7+vCjrSeF9++NKAXmPvi3V0fDnJ7pJI9rtptd0I/yoQ/RkhuvSEd6d1f5dRHGphHT

8HQ1V/h5JzW44dc7ppyZsQKFA6BDG1uagnWBpMwST9l0bJUqn0jcKNrposipJ8meJybOqajgdjyU

LaEA5SrpxlQDJkCCzL3rhL4jxj/QGmWgP5a7je+ox2CN/xyJcRWQo8xytVvz1aBYw+uGwb6+aLYv

qAaj55MmTWhm5i3PLhRNEKaJYxSdxoWXWb/ovWZq+T+k3NmJnrdNfismnB2FL3ipvZKEavH2zNMn

MYlARaicSMw5nC4viME07ZhpmnS+YDQa97zPKzXprWS/7tw8O+e4A6oYktvPXXIunnN0K4KrzK22

yrUC8fEZO+law0MEfkbJBkFvMS18GAUn6I4tV9GGE8yNyT/u1N6d+3SCRvlZYCwlb/p0Ef0dXhzd

YzdYFVw1+d0CbA/6k2pbeYtWvI3w+M0yRhMGsbtd1KYYjam6mTh7WVm6sUiUplZ9+P+LBZeGi12X

YA/DIUVr07A6D3odLB5XHGwaFA4XoeKu3HrVRPAS1/DAV+M0dXO2ILkHS3cNBzXHSXE6XqaNl/Tm

nGm6Admj0Kwbp4BZ4qzuQtFaMFI8MeMQGgdYJmd7YKQ8q7HRfC6QfksxiP3oWgRR/tdmHqZvHeaE

ZrRMc9eYkWlb44hcbvUl

这里我们发现这个包的参数是加密的 因为我要做的就是对这些参数解密 于是我脑海中出现一种思路 参数应该在链接附近

于是打开jeb搜索encrypt=1果然搜索到了 右键q看源码发现代码是经过混淆过的 不过没关系 这里我看到v0=a.f+this.d+"?encrypt=1";这样的代码 估计这个就是数据包的链接了 双击d进去 发现d的值为query那这句代码就很清楚了把链接赋给v0,v0就是链接

android url参数加密,[原创]航旅纵横URL参数的解密_第1张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第2张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第3张图片

这里验证了我的猜想  参数应该在链接附近 于是继续跟着思路走 这里看到得到v0的值后会return可以知道a方法的返回值就是链接 于是根据jeb的交叉引用 发现有两处会调用a方法

android url参数加密,[原创]航旅纵横URL参数的解密_第4张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第5张图片

发现这里是OkGo进行的网络请求发包 红色圆圈里面的a方法是我们得到的链接,后面的请求头,这里要关注的是蓝色圆圈里的内容,我猜想这里就是url的加密后返回的参数  点进a方法去看看 这里C2sBodyWrap类NEW了一个对象去给其参数赋值 那么我猜想v1里面放的就是url的参数了 往下看这里看到了MD5的字眼 这里猜想MD5digest应该就是参数加密的key

android url参数加密,[原创]航旅纵横URL参数的解密_第6张图片

跟进去看看发现会调用getmessage()方法 点进去发现其在native层,调用的so是libumetriprelease.so

9cc0e33fa91afb0240d93b2ca598ee7e.png

android url参数加密,[原创]航旅纵横URL参数的解密_第7张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第8张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第9张图片

通过IDA动态调试分析 这个key是先连接当前日期 然后经过md5,base64加密 然后取其奇数位 所以我猜想服务器端也生成一个这样的key,这个key值应该是和服务器的key相校验 比对key的真实性  或者是校验加密数据的完整性。

继续分析发现u.a方法是打印log的b.a是log的开关

android url参数加密,[原创]航旅纵横URL参数的解密_第10张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第11张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第12张图片

那么思路来了 把b.a=false 改成b.a=true apktool反编译改完后重打包,签名,安装apk打开AndroidStudio看看log输出的都是什么内容

android url参数加密,[原创]航旅纵横URL参数的解密_第13张图片

发现直接把url的参数吐出来了

到这里是不是就结束了呢?答案是没有 因为我的任务是找到算法key 所以到这里并不算完成任务 继续理清思路 既然能把参数吐出来 那我是不是也能把key给吐出来 说干就干 找key的位置

继续分析

android url参数加密,[原创]航旅纵横URL参数的解密_第14张图片

这里g是加密前的参数v0_2是返回加密后的内容 所以加密应该在j.a方法里面 继续跟进去

这里a方法的arg1是加密前的内容 j.a()方法是key 那么好办注入log把这个key吐出来 发现其值为:Ume2012Trip0309

android url参数加密,[原创]航旅纵横URL参数的解密_第15张图片

既然有key了 那么程序的逻辑就是根据这个key对内容进行加密了

跟进去

android url参数加密,[原创]航旅纵横URL参数的解密_第16张图片

发现这个位置是加密算法

第一个参数是要加密的内容 第二个参数是key值 下面做了一个运算对key进行了第二次加密赋值给v1 然后根据这个key用AES算法对内容进行加密得到最终的密文,然后服务器端进行base64加密,到这里就明白了,原来刚刚得到的不是真正的key啊 既然知道了v1是真正的key,加密方式是AES 那么就可以根据这个key去解密加密的内容了

这样的话 思路又来了 既然真正的key是根据上一个key去做了一个算法 那么我就可以把它的算法抠出来 自己写一个Demo获取真正的key值 然后根据这个key值调用AES解密算法 就得到了解密后的内容。

下面是程序运行图:

android url参数加密,[原创]航旅纵横URL参数的解密_第17张图片

android url参数加密,[原创]航旅纵横URL参数的解密_第18张图片

结束

你可能感兴趣的:(android,url参数加密)