一个人要走多少路
才能称的上是一个男人
一个Python程序员要绕多少弯
才能找到Android逆向的路

废话不多说,Talk is cheap。

本教程食用指南

主要面向Python爬虫工程师
Android开发人员或者Java工程师,不妨直接看非虫的《Android软件安全与逆向分析》和姜维的《Android应用安全防护和逆向分析》,对于这两本书,我个人看法是是这样的,两本都是好书,面向Android开发人员和安全人员,对小白略微不友好,实践性稍弱。建议两本都买,当作工具书,按章节查询和学习,毕竟书里的内容比百度搜索出来的结果准确太多。

不需要太多Java,Android基础,但会在教程中带大家慢慢补
没有正向的经验和思路,逆向完全是个笑话,当然我们也可以选择做脚本小子,不用懂太多Android知识,就可以逆向不少app,但App攻防战瞬息万变,这样下去是不行的。

目标
熟悉并基本掌握无壳App逆向和破解的思路

环境配置

  1. 一台有root权限的Android真机
  2. 一台电脑
  3. 配置好的Java环境和Android sdk
  4. Fiddler/Charles + App证书,确保可以抓取App流量

本教程的两个原则

  1. 不用术语解释术语,不使用”显然“”这很简单“”很明显“等词进行逻辑跳跃

  2. 影响阅读体验的内容放文末注脚,读者可以点击文字右上角序号进行跳转

资源推荐
主要推荐两个公众号

  • Python编程与实战,主讲爬虫和web后台,内容很棒。
  • 小周码字,主讲app逆向以及一些骚操作,思路清晰,文笔优雅,干货很多。
  • 我个人的公众号因为太久没发文被冻结了,以后有能力了重开一个。

就从现在正式开始吧========================================================================================

大纲


我们会在之后的学习中不断覆盖和巩固这些知识。

需求分析

小红书APP是一个生活方式平台。在这里发现美好、真实、多元的世界,找到有意思的明星达人,与他们一起共同标记自己生活的点滴。2.2亿年轻用户每日分享海量服饰搭配、美妆教程、旅游攻略、美食测评,让你轻松升级潮流生活老司机。
用户所发表的内容被称为“笔记”。我们的目标是抓取小红书中欧阳娜娜相关的全部笔记。

首先肯定是看web端能否满足需求




鉴定完毕,这条路行不通。
其实这也反应了越来越多平台的趋势——重移动端轻pc端。
现在是移动互联网的时代,在很多领域,移动端:PC端的流量比甚至达到了9:1,即使是淘宝这类PC时代的老玩家,现在绝大部分流量也都来自移动端,而抖音、拼多多,快手这些产品,更似乎从出生就在Android和IOS的怀里。可以预见,随着5G的推广和普及,移动端能做的事会越来越多,越来越强大。各色的App,微信小程序、QQ小程序会毫无疑问成为信息和流量的汇集地。

在未来,越来越多的应用和服务,官网将只提供移动端的下载地址。


话不多说,转战移动端。

抓包分析

爱自己是终身浪漫的开始
抓包是逆向的第一步

我们使用小红书6.3.0,这是七月才更新的版本,可以保证一段时间内App不会发生大的改动,大家可以直接百度下载,或者使用我准备的网盘资源,里面备有该教程所需要的逆向工具和资源,且均为较新版本。
网盘链接:链接:https://pan.baidu.com/s/1R7bqU4OIuTZSSpB-A8OXWg
提取码:wdc8

出于便捷,抓包时,我们往往会使用电脑Android模拟器,比如夜神、雷电。
但在这里,我们只能使用真机,小红书APP进行了严苛的模拟器环境检测,只要使用模拟器登录,就会有如下的提示。

后续我们会逆向分析它检测模拟器的代码,看一下是否能hook或者篡改掉,但现在还是老老实实用真机吧。1

我们使用Fiddler抓取手机上的数据包,有的人可能习惯使用charles,都可以。2
这个时候我们会遇到一个奇怪的问题,不开启抓包环境时,小红书app可以正常访问。一旦启动代理尝试抓包,app就会出现断网的症状。

这是什么情况?
不会是什么抓包代理检测吧??

答对了,这是一种代理检测。

最常见的就是SSL证书验证(SSL Pinning)。比如抖音、小红书,FaceBook,Twitter等app,都有这种验证和防护。SSL Pinning一种用来防止中间人攻击的技术,广泛应用于阻止app的抓包和嗅探,Fiddler等抓包软件在原理上就是一种中间人攻击,所以一旦遇到了SSL Pinning就凉凉了。我们肯定不能让SSL验证阻拦我们抓包的脚步,下面我们解决SSL证书验证。

首先需要大家在有root权限的手机上安装Xposed框架,它是Android平台最强大的框架,可以在不修改APK的情况下影响程序的运行,网上安装Xposed相关的教程非常多。注意,Android 4和Android 4以上版本的Xposed安装包是不同的,需要安装手机系统版本进行选择。在安装过程中,有一定的风险,请一步步依据教程操作。如果嫌麻烦,可以直接淘宝花二三十安装Xposed或者Edxposed,都是可以的。Android 8-9的系统,我个人更建议安装Edxposed,可以在淘宝搞,也可以参考这篇或者其他文章:
https://blog.coderstory.cn/guide-install-edxposed/ 【后Xposed时代: 一篇文章看懂如何安装和使用Edxposed 】

接下来我们需要安装禁止ssl pinning的插件,这一类插件已经非常多了。比如很多人熟知的JustTrustMe。
我这里推荐sslunpinning,它可以针对单个App进行ssl pinning,在网盘里我放了三款突破SSL证书验证的的app,可以自行选择和下载。

下载并安装sslunpinning,打开sslunpinning界面选择小红书app,打开Xposed,在Xposed-模块列表中勾选sslunpinning 模块,重启手机使得Xposed的更改生效。

环境配置好了,接下来打开小红书,注意不要选择登录,而是选择性别和出生年月,勾选兴趣话题进入内容广场,以此防止抓包结果不同。如果已经登录操作了,可以在设置-应用-小红书中选择清除所有数据,或者卸载重装小红书。
现在,在Xposed+SSLUnpinning的加持下,我们会奇迹的发现Fiddler中数据流不停的流淌,App界面内容可以顺利的加载了出来。
我们搜索”欧阳娜娜“,不需要进入她的个人主页,直接下拉内容。
简单的刷新下拉几下动态,明显发现好几个大的数据包,而且为Json格式,我们把这些数据包标成紫色。

我们来看一下它的内容,Fiddler右下区域可以查看数据包内容,我们使用Fiddler提供的Json格式查看

读者按照这个步骤操作,接着对比一下App的界面,会发现内容一致。

走了这么久,我们终于可以开始分析网络请求了
这是一个GET请求,我们看一下它的Header和字段。


首先不要怕,抽根烟冷静一下,想一下搞爬虫是不是选错职业方向了。
搞爬虫的肯定有经验,这么多字段,肯定有不少是可以固定不变的。
我们多下拉几次动态,抽取两次请求进行对比,直接肉眼看可能会瞎,我是这么处理的,大家也可以直接肉眼对比。
将webform中的大量字段直接全选复制,找个文本编辑器,或者直接用记事本粘贴下来(我用的sublime)。Request Headers选择右上角的raw模式,只复制下来Headers部分,url不用。
稍加整理成下图这个样子


然后找一个在线文本比较网站进行对比
我用的是这个http://wenbenbijiao.renrensousuo.com/#diff
然后就可以获得很直观清晰的比对结果

我们当务之急就是明白和破解Headers中的shield,params中的t和sign。
首先说t,这是一个十位数,以15开头,这很可能是一个以秒为单位的时间戳,如果是十三位,那很可能是一个以毫秒为单位的时间戳。我们找一个在线时间戳转换工具试一下 https://tool.lu/timestamp/

时间完全吻合我发出请求的时间,这是一个时间戳。

接下来我们撸一下sign
首先我们说一下sign是个啥,数一下它的位数,32位,看一下内容,只包含1-9和a-f,这是一个32位的十六进制数,那么它很很大的可能是一个MD5加密结果。不了解MD5的可以看一下我这篇文章:https://blog.csdn.net/qq_38851536/article/details/93919613【密码学在Android加密中的应用和实践——MD5(1)】这里面说的比较清楚。

这里总结一下MD5签名的特征
1.一般来说名字为sig,sign,signature
2.加密的原文为部分或者全部请求字段的拼接
3.为了避免拼接顺序错误导致结果无法校验,将所有或者部分请求参数按照参数名ASCII码从小到大排序(常使用java collection sort实现)
4.可能会将字符串的值以URL编码,用于编码处理(urlencode)
5.加密字段中会有一个时间戳字段用来防止请求被重复使用
6.只使用一次md5防护性比较弱,可能会加盐,或者两次md5,可能会转成大写(a-f→A-F),可能会只取md5结果的9-24位,或者使用其他哈希算法

抓包分析结束,下一讲我们分析小红书sign的生成规则。


  1. 为什么app会检测手机模拟器
    模拟器常常被用来搞黑灰产搞群控搞游戏增强,比如薅电商平台羊毛、电脑吃鸡,引流刷粉等(如你所见,横行在各种社交平台的机器人)。这些不友好的行为对应用来说百害无一利,所以一些APP会在启动或运行时进行环境检测,在模拟器环境下断网、闪退或报错。后续我们会探讨App是怎么实现的模拟器检测。 ↩︎

  2. 如果App抓包环境没有配置,可以参考以下教程:
    http://www.111cn.net/sj/android/90542.html 图解Fiddler如何抓手机APP数据包【超详细】
    环境配置好了之后,不妨尝试抓一下手机浏览器的包,如果能正常放回http和https数据包,则环境配置成功。
    如果你始终无法解决环境问题,可以在评论里留言求助,我可以进行帮助和远程调试。 ↩︎

Android逆向入门1——引言与抓包相关推荐

  1. Linux基础急速入门:用 TCPDUMP 抓包

    简介 tcpdump是一个用于截取网络分组,并输出分组内容的工具.凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具 tcpdump 支持针对网络层.协议.主机. ...

  2. android 逆向入门知识

    为什么会引入这个话题,因为在第一次入门的时候发现xxx.apk逆向之后的目录结构很清晰,但是自己新建的demo资源一大堆,当时一脸懵逼,在整合的过程中绕了很多弯路,最后才发现了原因.所以整理出来,方便 ...

  3. Android逆向入门7——Smali语法学习(1)

    这一节我们一起探讨smali语法和smali在Android逆向中的应用,它是Android逆向世界中不可或缺的一部分. 简单的来说,Dex反编译的结果就是Smali,Smali和dex之间的关系,我 ...

  4. Android不信任证书导致无法抓包的解决办法

    前言 众所周知,Android7.0以后系统不在信任用户的证书.这一改动使得我们在抓包的时候产生了诸多不便.在Android端很多人的做法是先刷入Magsik在通过Magsik模块的方式来将抓包证书修 ...

  5. 安卓逆向——dy急速版设备抓包分析

    dy急速版设备注册分析 使用环境 手机: Nexus 6P    系统:Android 6 Xposed :justTrustMe 应用:dy极速版-10.9.0  1.  抓包 : 当手机第一次安装 ...

  6. iOS逆向之某多多App抓包

    阅读此文档的过程中遇到任何问题,请关注公众号[移动端Android和iOS开发技术分享]或加QQ群[309580013] 1.目标 由于某多多App现使用longlink进行数据传输,使用charle ...

  7. 移动安全:多方法实现Android导入系统证书并用Burp抓包

    文章目录 0x0需求 1x0 环境准备 2x0 导入系统证书 2x1 方法一:Android访问代理 2x2 方法二:adb推入证书 3x0 抓包测试 总结 0x0需求 一般来说在Android7以上 ...

  8. Android使用HttpCanary或Fiddler工具抓包详解

    最近项目出现一些问题需要在抓包查看请求数据是否在发送途中发送了改变想到用Fiddler进行抓包 但是在学习使用的时候发现 还有一款Android抓包工具在手机端就可以使用无需其他设置,本文将详细讲述两 ...

  9. Android逆向入门6——定位到小红书Sign算法

    在上一节中,我们猜测小红书自定义了一个拦截器,给每条请求添加了DeviceId.Timestamp等等字段,以及我们心心念念的sign字段. 这一节我们顺着这个思路去尝试定位sign,看看猜测是否有误 ...

最新文章

  1. Ubuntu平台 Qt 5.x 安装方法
  2. Halcon算子学习:get_sheet_of_light_result
  3. sparksql整合hive
  4. Discuz完整手动迁移教程(不使用备份功能)
  5. mysql面试关联查询语句_sql语句多表联查语句的练习(面试题)
  6. start mysql server_mysql5我的难点,快捷操作(mysql.server stop start),开机启动
  7. Airflow 中文文档:保护连接
  8. [No00004C]软件工程师的创业陷阱:接私活
  9. 流畅的python和cookbook学习笔记(五)
  10. 上下定高 中间自适应_B站微服务框架Kratos详细教程(3)中间件
  11. 串口通信软件AccessPort
  12. 科普 | 到底什么是移动边缘计算?
  13. 【初学者必知必会】【电子技术:数电 模电 单片机】【基础概念和小知识点】详解
  14. 51单片机精确延时程序(晶振12MHz,一个机器周期1us.)
  15. Habor 入门指南
  16. office安装双击setup后点击‘立即安装’无反应(闪退)
  17. 广讯通显示连接服务器失败怎么办,苹果手机连接服务器失败原因
  18. Android Button英文全部大写问题
  19. css和js3d粒子,使用EaselJS实现的3D球形粒子运动
  20. Hexo的Next主题配置

热门文章

  1. 解决java.io.IOException: Broken pipe的报错
  2. 使用预计算实时全局光照优化照明-布置光照探针
  3. 37个Dubbo 连环炮,能扛住几个?
  4. 6月编程排行榜出炉,Python还是第一吗?
  5. spring5.3.x源码阅读环境搭建
  6. HDR对人眼的模拟介绍
  7. ubuntu/linux系统知识(25)ubuntu录屏软件含声音obs天下第一
  8. CPU转接卡引起的故障维修
  9. adobe打开部分pdf时卡死解决方案(未响应)
  10. 现货白银短线操作技巧(完整篇)