疫情期间,学校每天都要填*疫情信息,每天填写不及时都要被催,于是便萌生了一个想法(身为CS的学生竟如果能写一个脚本每天帮我填写那就再好不过啦~)。
0x01 逆向工程中用到的工具
- 安卓模拟器 (可以用夜神等模拟器配合FD抓包)
- PostMan (模拟发送请求)
- Fiddler Web Debugger (传说中的FD抓包工具)
- Jadx (强大的App反编译工具)
0x02 逆向思路
- 抓取服务器接口
- 分析反编译App源码
- 模拟APP登录
- 模拟填报疫情信息并提交
0x03 App的登录逻本文来自:1024s.cn 辑
- 从服务器获取公钥(PublicKey)
-
生成一段随机的Base64代码(RandomBase64),然后用公钥加密
-
将加密生成的代码放到请求中,继续请求获取公钥的链接,获取一个加密的Unique-Code代码,
1024s.cn 并将此代码用一开始生成的RandomBase64解密,拿到解密后的Unique-Code -
将用户的登录信息用开始生成的RandomBase64进行加密
-
将Unique-Code放入请求头,将加密后的用户信息作为参数,带参访问服务器的登录接口。登录成功后服务器会返回用户
本文来自:1024s.cn 的所有信息,当然是经过加密的,Powered by 0x3E5 解密后即可获得用户的所有信息 -
登陆
1024s.cn 成功后根据服务1024s.cn 器返回的信息填充Access-Token并进行加密,然后将其放入请求头。在以后访问接口时请求头需带Unique-Code和Access-Token
0x04 具体的流程和步骤
- 先用FD抓到了第一个接口,如图所示。
可以看到在ap
- 使用Jadx工具对App进行反编译,对反编译的代码进行分析
发现这个随机生成的Base64代码是通过asBaseSecretUtil中的某方法生成的,然后我们将反编译代码中整个asBaseSecretUtil类提取出来,用Java模拟生成了RandomBase64Key
- 继续分析FD抓到的数据包,发现客户端二次请求服务器并且携带了一些加密数据
- 根据抓到的数据包,可以看到请求时携带了Unique-Code和Access-Token和加密后的RandomBase64Key,然后把Unique-Code放到请求头,然后将RandomBase64Key作为参数,使用Postman模拟请求服务器,可以拿到一串加密后的数据,然后结合逆向代码,并且尝试用RandomBase64解密返回的数据,成功拿到了Unique-Code,然后放到请求头中。并且在逆向代码中可以可以找到登录时代码,可以发现上传时将一个用户Bean进行加密,然后带上加密的数据请求服务器。我们尝试用RandomBase64加密此数据,并且访问服务器,这时候服务器返回了一段加密数据,和登陆成功的字样,代表模拟登陆成功了。
- 然后我们尝试用RandomBase64进行解密,发现返回了用户的大量信息,这些信息很多都是不需要的,十分不安全。如下图
- 登陆成功后根据拿到的数据封装加密后的Access-Token,以后进行其他操作的时候带上此Token和Unique-Code就可以了
0x05附上小伙伴写的java代码
小伙伴是个Java大佬 大家可以戳这个链接
至此我们已经用Java模拟登录成功了APP,然后就可以用Python或者其
0x06利用接口实现自动化操作
最后附上自己用N