自制北京某医院挂号工具

简介: 最近听说亲戚家的小孩生病,但是经常挂不上号,每次都要找黄牛帮忙挂号,黄牛每次都要收300块钱,所以我就想帮帮他们,所以写了一个挂号工具,通过它可以更快的完成『查票->挂号->付款』的操作流。本文记录了制作该工具的思路和使用的工具。

引言

最近听说亲戚家的小孩生病,但是经常挂不上号,每次都要找黄牛帮忙挂号,黄牛每次都要收300块钱,所以我就想帮帮他们,所以写了一个挂号工具,通过它可以更快的完成『查票->挂号->付款』的操作流。本文记录了制作该工具的思路和使用的工具。

开发流程

因为这个医院有一个手机APP,预约挂号都是在这个APP上进行的,所以我就从这个APP入手,开始了我的破解历程。

抓包

最初,本着试一试的态度,我先是从抓包入手,打算看一看这个挂号APP的请求内容。在这个过程中使用到了Mac平台的抓包工具Charles,使用流程如下:

  1. 打开Charles的HTTP代理(默认会使用8888端口)
  2. 将手机与电脑连接到同一个网络中
  3. 配置手机上的WIFI代理,填入Mac的IP和Charles的代理端口

配置好抓包工具后,发现了第一个问题:该APP和服务器是通过HTTPS通讯的,Charles无法解析请求内容。于是我进行了如下操作:

  1. 打开Charles的HTTPS代理功能
  2. 在Charles的SSL Proxy Setting中设置需要HTTPS代理的host:port,这里我填了 *:443
  3. 将Charles的CA证书下载到手机中
  4. 在手机设置中添加信任Charles的证书

本来以为这样就能在Charles中看到HTTPS报文内容,但是这里又遇到了一个坑,就是Google在Android6.0之后(不包括6.0)更新了对用户级CA证书的默认信任策略,即Android6.0之后,除非APP中特别声明该APP信任用户级证书,否则,只会信任系统级证书。更详细的说明可以从Android的开发者文档中查看。
解决这个问题有两个方案:

  1. 找一台Android6.0的手机进行抓包测试(我选择了这个方案,最简单)
  2. 解包APP,在res中添加网络安全设定,使这个APP信任Charles的证书,然后重新打包(感觉超麻烦,还不一定能成功)

至此,我已经能在Charles中查看该APP的所有请求内容了,分析各种操作的请求报文后,我发现该APP是通过HTTP请求中的一些Header数据来做身份验证的。其中,大部分的数据都是不变的或者很容易推算的,只有x-bchapi-signature是每次请求都不一样,只从抓包的信息中无法推断该数据是什么。为了搞清楚x-bchapi-signature是什么,我对该APP进行了反编译。

反编译

反编译部分,初期我使用到了如下工具:

  1. ApkTool: 通过它可以可以解出Apk文件中的静态资源,比如xml文件,图片等。
  2. dex2jar: 将dex文件(即apk文件中的java class数据)转换成jar文件。
  3. JD-GUI: 可以直接查看jar文件的内容。

这一阶段的操作流程如下:

  1. 使用ApkTool拆解出来所有静态资源和AndroidManifest.xml,拆解出来的静态资源,会在之后分析代码时用到,因为Android中通常会将一些恒量存在/res/values/*.xml中。此外,我还看了一下里面确实没有之前抓包时提到的网络安全配置,这也印证了之前在Android6.0以上手机HTTPS不好用的推断。

    • apktool d xxx.apk
  2. 使用rar解压工具解压了apk,里面有一个classes.dex文件
  3. 使用dex2jar反编译classes.dex,最终得到classes-dex2jar.jar

    • sh d2j-dex2jar.sh classes.dex
  4. 使用JD-GUI打开classes-dex2jar.jar

打开classes-dex2jar.jar后,发现里面没有什么代码,只显示了一些奇虎360的类,所以我推测他可能使用了一些代码混淆技术,为了得到真正的源码,我随后对apk进行了一些反混淆操作。
classes-dex2jar.jar

反混淆

反混淆部分,我使用到了如下工具:

  1. FDex2: 通过Hook ClassLoader的loadClass方法,反射调用getDex方法取得Dex(com.android.dex.Dex类对象),在将里面的dex导出。
  2. VirtualXposed: 无需root手机即可使用Xposed框架。

上述的两个工具是配合使用的,Xposed是一个代码钩子框架,它需要root才能正常使用,而这里我们用到的VirtualXposed是一个虚拟的Xposed,它可以在不root的手机上运行Xposed框架。
FDex2是一个运行在Xposed框架下的插件,通过他来得到所有apk代码。
这一阶段的操作操作流程如下:

  1. 手机安装VirtualXposed
  2. 在VirtualXposed中安装FDex2以及要破解的apk
  3. 启动FDex2并设定让其分析我们要破解apk
  4. 打开要破解的apk,并将挂号的完整流程都走一遍,这样才能分析到完整的挂号代码
  5. 将FDex2分析得到的dex文件下载到电脑上,这一步我用到了一个文件资源管理器
  6. 通过反编译时使用的dex2jar解析dex文件,最终得到jar文件
  7. 使用JD-GUI打开最终生成的jar文件

至此,我已经看到了该apk下的所有核心代码,很快我就找到了x-bchapi-signature的构造方式,它是通过请求的url,请求的参数,当前时间等整合加密所得。随后,我马上通过postman构造了一个请求,并且成功发送了。

抢票工具的开发

有了反混淆后得到的代码,剩下的工作就很简单并且重复了,它基本都是遵循如下流程:

  1. 打开Charles,并在手机上点击想要破解的操作
  2. 在Charles中找到该操作的请求内容
  3. 在源码中搜索该操作传输的数据含义
  4. 在Java中使用HTTP Client构造相同的请求

文章说明

更多有价值的文章均收录于贝贝猫的文章目录

stun

版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!

创作声明: 本文基于下列所有参考内容进行创作,其中可能涉及复制、修改或者转换,图片均来自网络,如有侵权请联系我,我会第一时间进行删除。

参考内容

[1] Mac下用Charles实现Android http和https抓包
[2] 反编译Android APK详细操作指南
[3] Android APK脱壳

相关文章
|
开发框架 小程序 前端开发
东郊到家丨家政服务丨预约上门丨系统开发稳定版,家政服务丨预约上门丨东郊到家系统开发(开发案例)及源码技术
 随着人们对家政服务的需求不断增加,家政服务行业也变得越来越受欢迎。家政服务小程序和家政服务系统是两种常见的家政服务解决方案,它们可以为人们提供更加便捷和高效的家政服务体验。下面将详细介绍这两种解决方案。
家政维修系统开发,2000的全行业预约到家系统,究竟怎么样?
在这个创业热潮中,一款全行业预约到家系统脱颖而出,仅需 2000 元即可拥有。无论是上门做饭、家政、维修等各类服务,它都能一站式解决。系统支持多种运营模式,配备后台管理、用户小程序和师傅 APP,功能完善,从准备到上线只需 3-5 天,助你快速抢占市场先机。
|
1月前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
81 3
|
7月前
|
小程序 安全 搜索推荐
​ C#掌上医院预约挂号系统源码 一套成熟的医院/诊所预约挂号小程序需要了解哪些方面?
"互联网+医院"服务水平不断的提升,各类门诊部、中医馆、诊所、乡镇卫生院、社区卫生服务中心等医疗机构服务形式开始拓展互联网线上渠道。利用微信小程序、公众号(服务号)+网页端等形式进行开发,其中,预约小程序,门诊预约挂号系统的稳定性强、运行维护方便、是被众多医院机构信任与选择的。
105 1
|
7月前
|
小程序 前端开发 C#
C#三甲医院在线预约挂号系统源码
医院在线预约挂号系统是一种方便患者预约挂号的系统,患者可以通过该系统进行预约挂号,省去了到医院现场排队等待的时间,提高了就诊效率。随着医院信息化水平的不断发展,医院在线预约挂号管理系统已成为医院管理中不可或缺的一部分。
129 1
|
7月前
|
监控 小程序 数据可视化
.NET三甲医院线上预约挂号系统源码
医院线上预约挂号系统是一种利用互联网技术,为患者提供预约挂号服务的系统。患者可以通过该系统,在医院的官方网站、手机应用程序或第三方预约平台上进行预约挂号,选择医生和就诊时间,并完成在线支付等操作。
67 2
|
7月前
|
小程序
大中型医院线上预约挂号系统源码,对接HIS,支持预约挂号、预约记录、在线支付、医保支付、医保信息、电子报告、住院每日清单查看等功能
预约挂号管理系统具备后台管理端和用户使用端,用户使用端包括:微信公众号、支付宝小程序。 技术架构:C#+.net+uni-app+ SqlServer 2012+ VS2019 ,自主研发,自主版权,多家三甲医院应用案例,有演示。
130 0
大中型医院线上预约挂号系统源码,对接HIS,支持预约挂号、预约记录、在线支付、医保支付、医保信息、电子报告、住院每日清单查看等功能
|
7月前
|
供应链 安全 Cloud Native
Java基层医疗云HIS系统源码,病患挂号、问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站
针对基层医院的业务特点,实现以财务核算为基础,以临床医疗服务为中心的全程信息化管理,主要包括以下业务模块:门诊住院一卡通收费管理、以电子病历为核心的门急诊医护工作站、药品管理、医技管理、检验(LIS)、检查(PACS)、远程医疗等。基层医生在接诊过程中可随时调阅、更新患者的健康档案,实现诊疗服务与公共卫生服务联动。
94 3
|
7月前
|
安全
医院手术室麻醉系统源码、对接HIS、文书模板
麻醉医生在长期的临床工作实践中,已掌握了极其专业的镇静、镇痛技术,具备随时处理、预防药物带来各种风险的能力。
66 1
|
7月前
|
监控 小程序 数据可视化
医院线上预约挂号系统源码,互联网医院挂号、支付系统源码
uni-app+.net+SqlServer 2012+公众号、支付宝小程序源码
124 0