查看原文
其他

饿了麽APP逆向及爬虫实现详参

李鹏博 燕幕自安 2021-03-07
一、前言
今天主要以饿了麽为例,讲解一下APP逆向的大致流程,以及遇到问题的处理办法。
还没关注的朋友,关注我不迷路。
二、概述
APP逆向的目的是为了了解APP本身的运行逻辑,进行修改或进行还原。涉及到的技术和工具,见下图。
对于抓包我就不详细讲了,不清楚的看一下我之前的文章。
HTTPS抓包与手机抓包,看这一篇就够了
HTTPS就不能抓包了?开什么玩笑!
好了,下面我们干正事,讲饿了麽。
三、需求
通过还原APP接口,获取附近商家。但因为饿了么查看商家必须登录,故需要先逆向登录接口。
四、抓饿了麽的包
打开PacketCapture,选择饿了麽,打开饿了麽APP。
这是为什么?断网了?
这种情况主要是因为抓包引起的,APP本身做了HTTPS证书校验,简单的可以通过插件解决,办法参见以前的文章。
Xposed+JustTrustMe关闭SSL证书验证
好了解决了抓包问题,那就能找到登陆的接口了。
通过抓包,得到登录步骤为:
  1. 请求发送短信
  2. 需要图形验证码,请求图形验证码
  3. 带验证码请求发送短信
  4. 带短信验证码登录(登陆完成拿到cookie)
  5. 获取附近商家
每一步的接口如下:
  1. URL:https://restapi.ele.me/eus/login/mobile_send_code
  2. URL: https://restapi.ele.me/eus/v4/captchas?captcha_str={手机号码}
  3. URL:https://restapi.ele.me/eus/login/mobile_send_code
  4. URL:https://restapi.ele.me/eus/login/login_by_mobile
  5. URL:https://restapi.ele.me/shopping/v3/restaurants?extras[]=identification&extras[]=coupon&latitude=32.29290046542883&longitude=110.04603732377291&city_id=3&rank_id=b1969c73a19b4dc68b31628ea85d8eaf&network_operator=&network=WIFI&order_by=5&extra_filters=home&os=Android%2F6.0.1&deivce=Nexus%206P&weather_code=PARTLY_CLOUDY_DAY&offset=0&limit=20
直接看参考答案的感觉怎么样?
五、参数分析
对于抓包的相关参数(自己看报文就能知道,我没有写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里面,这就麻烦了,要还原这个算法有三种办法。
  1. 硬刚。逆向so。我后来看了下,so有反调试,so里面又调了java层的函数,还原比较麻烦一些。
  2. 利用。hook这个sneer函数,找到他的方法地址,在你的代码需要的时候,发请求到手机里,手机进行调用执行,计算完以后返回给外部。
  3. 虚拟。虚拟环境执行so中的sneer方法,可参见github上的Unicorn这个项目。
我用的是第二个办法,在手机里面起了HTTP服务,接受请求计算后返回给外部。
但是!


FPX和G2的比赛要开了,今天不继续写了,下次再写个续,讲一下hook调用这个事儿吧。FPX加油。
写在最后
最近有人抄袭我的文章在知乎、吾爱上发,说是自己原创?就是这个垃圾人。

连个人简介都是抄我的!模仿我的人还模仿我的面???

暖心的是,吾爱上的盆友看出来了,谢谢各位了!

以上。欢迎阅读转发~

想要转载的朋友请告知我之后转载,并注明原帖来源。

如有问题,请关注公众号回复【作者】获取我的联系方式。

想了解更多技术分享,请长按识别下方二维码关注我吧。


    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存