内容简介:今天带小孩去打疫苗,发现之前的社区医院改成app预约了,下载app用了一下,真是无力吐槽,除了注册功能是好的。其他功能一点开全在转圏加载,预约教程页面还报了个sql语句错误.报着学习的态度想看看大佬们写的代码.基础api地址:最后找到了加密token的关键代码
今天带小孩去打疫苗,发现之前的社区医院改成app预约了,下载app用了一下,真是无力吐槽,除了注册功能是好的。其他功能一点开全在转圏加载,预约教程页面还报了个 sql 语句错误.报着学习的态度想看看大佬们写的代码.
工具准备
撸起袖子
用 packet capture 抓了几个包看了下api。
基础api地址: http://api.new.umiaohealth.com
/account/login /vaccine/getreservationreservedlist /vaccine/getvaccinemain
模拟登录时有个token字段猜解死活不通过,看来只能反编译下app看下加密代码了.
用gda查了下壳,发现是360加固的.
用gda自带的进程dump连接模拟器老是进程无响应,无果。
祭出这个xposed脱壳模块 FDex2 (要先安装VirtuanXposed或者xposed).
用mt文件管理器把dump出的dex移动到夜神模拟器和pc的共享目录.
这里有多上dex,可以用gda打开看下主代码在哪个dex里.然后用dex2jar转换一下把dex转成jar
然后用jd-gui打开jar反编一下.class文件就行了。
最后找到了加密token的关键代码
HttpClientUtil.java
public void httpPost(Context paramContext, String paramString, AjaxParams paramAjaxParams, BaseParser<?> paramBaseParser, IDataCallback paramIDataCallback)
{
FinalHttp localFinalHttp = new FinalHttp();
localFinalHttp.configTimeout(30000);
paramAjaxParams.put("token", Base64Utils.getSecretToken(paramContext));
Header[] arrayOfHeader = Base64Utils.getHttpHeader(paramContext);
String str1 = ((ParentInfo)ParentInfo.findFirst(ParentInfo.class)).getPid();
String str2 = str1;
if (TextUtils.isEmpty(str1)) {
str2 = "0";
}
paramAjaxParams.put("pid", str2);
paramAjaxParams.put("VersionChecked", CommonUtil.getAppCurrentVersion(paramContext));
paramAjaxParams.put("devicetype", "android");
localFinalHttp.post(paramString, arrayOfHeader, paramAjaxParams, "application/x-www-form-urlencoded", new HttpClientUtil.3(this, paramIDataCallback, paramString, paramAjaxParams, paramBaseParser, paramContext));
}
Base64Utils.java
public static String getSecretToken(Context paramContext)
{
paramContext = (ParentInfo)ParentInfo.findFirst(ParentInfo.class);
String str = paramContext.getToken();
Object localObject = paramContext.getPid();
paramContext = (Context)localObject;
if (TextUtils.isEmpty((CharSequence)localObject)) {
paramContext = "0";
}
tktimes = System.currentTimeMillis() + "";
int i = Integer.parseInt(tktimes.substring(12));
localObject = sortSeed[i];
sortIndex = String.valueOf(localObject[0]) + String.valueOf(localObject[1]) + String.valueOf(localObject[2]);
localObject = getSortData(localObject[0], str, paramContext, tktimes) + "," + getSortData(localObject[1], str, paramContext, tktimes) + "," + getSortData(localObject[2], str, paramContext, tktimes) + "," + sortIndex;
paramContext = null;
try
{
localObject = encrypt((String)localObject, "xxx加密");
paramContext = (Context)localObject;
}
catch (Exception localException)
{
for (;;)
{
localException.printStackTrace();
}
}
return paramContext;
}
好了,我去写个预约疫苗的脚本去了
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
图解物联网
[ 日] NTT DATA集团、河村雅人、大塚纮史、小林佑辅、小山武士、宫崎智也、石黑佑树、小岛康平 / 丁 灵 / 人民邮电出版社 / 2017-4 / 59.00元
本书图例丰富,从设备、传感器及传输协议等构成IoT的技术要素讲起,逐步深入讲解如何灵活运用IoT。内容包括用于实现IoT的架构、传感器的种类及能从传感器获取的信息等,并介绍了传感设备原型设计必需的Arduino等平台及这些平台的选择方法,连接传感器的电路,传感器的数据分析,乃至IoT跟智能手机/可穿戴设备的联动等。此外,本书以作者们开发的IoT系统为例,讲述了硬件设置、无线通信及网络安全等运用Io......一起来看看 《图解物联网》 这本书的介绍吧!