From( 燕幕自安 ):https://zhuanlan.zhihu.com/p/91150834
燕幕自安 专栏:https://zhuanlan.zhihu.com/yanmuzian
爬虫必备工具,掌握它就解决了一半的问题:https://zhuanlan.zhihu.com/p/39340856
App 爬虫必备技能:三步完成 Android 逆向:https://zhuanlan.zhihu.com/p/80733843
今天主要以饿了麽为例,讲解一下APP逆向的大致流程,以及遇到问题的处理办法。
还没关注的朋友,关注我微信公众号“燕幕自安”不迷路。
APP 逆向的目的是为了了解 APP 本身的运行逻辑,进行修改或进行还原。涉及到的技术和工具,见下图。
对于抓包我就不详细讲了,不清楚的看一下我之前的文章。
HTTPS抓包与手机抓包,看这一篇就够了:https://mp.weixin.qq.com/s?__biz=MzI1MTMzNTM0OQ==&mid=2247483886&idx=1&sn=42bd9494dcd9f7ea3dd058da51e22a26
HTTPS就不能抓包了?开什么玩笑!:https://mp.weixin.qq.com/s?__biz=MzI1MTMzNTM0OQ==&mid=2247483701&idx=2&sn=892c548fd7d6970f50cb1f11cbf3a562
好了,下面我们干正事,讲饿了麽。
通过还原APP接口,获取附近商家。
但因为饿了么查看商家必须登录,故需要先逆向登录接口。
四、抓饿了麽的包
打开 PacketCapture,选择饿了麽,打开饿了麽APP。
这是为什么?断网了?
这种情况主要是因为抓包引起的,APP 本身做了 HTTPS 证书校验,简单的可以通过插件解决,办法参见以前的文章。
Xposed+JustTrustMe关闭 SSL 证书验证:https://mp.weixin.qq.com/s?__biz=MzI1MTMzNTM0OQ==&mid=2247483922&idx=1&sn=d22096a75e757f551f37c9824b166bc1
好了解决了抓包问题,那就能找到登陆的接口了。
通过抓包,得到登录步骤为:
每一步的接口如下:
直接看参考答案的感觉怎么样?
对于抓包的相关参数(自己看报文就能知道,我没有写header参数和url参数),中间很多是我们一眼就能看出来的比如时间戳、机型、坐标、固定值等,需要逆向的主要有以下几个。
x-eleme-requestid、x-deviceinfo、deadpool相关三个参数
参数 x-eleme-requestid
在 jadx 中打开饿了麽 APP,搜索关键字x-eleme-requestid
看到四个,不多。
按道理来说,应该先看第四个,但是后来并没有找到a的生成位置。好我们看一下二、三。(OS:“你为啥不看一”)
看到 a 是个 static 变量,那就得看一下谁调用他了,右键 find usage。
会心一笑。手到擒来。解释一下。
点进去看一下。
我个憨憨!!! 装逼失败
好了,不要在意这些细节。我们点进去这个a()看看。
清清楚楚,国际通用的算法 UUID 去掉短杠后加上竖杠再加时间戳。
参数 x-deviceinfo
打眼一看,这是啥,base64啊!对x-deviceinfo进行base64解密,可得到:
均是设备基本信息,按照格式生成即可,注意要和外部其他设备基本信息保持一致。
deadpool相关三个参数
一共三个参数,分别为:
搜索 deadpoolcontent。
又是hashmap.put,为什么我们要对他敏感,因为它和我们的目标关键字呆在一起的时候,很可能就是给header里构造参数的啊。我们点开第二个看一眼。
继续找这个sneer函数。(我总觉得他这个函数叫这个名字是故意鄙视我的。)
函数
好了,在 libuiseris.so 里面,这就麻烦了,要还原这个算法有三种办法。
我用的是第二个办法,在手机里面起了HTTP服务,接受请求计算后返回给外部。