From:https://www.cnblogs.com/zyfd/p/9681080.html
一、抓包模拟
基本原理(中间人攻击)
中间人攻击:在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信。攻击机以自己的证书替代服务器发给客户端的证书。通常,客户端不会验证该证书,直接接受该证书,从而建立起和攻击机的安全连接。这样,客户端发送的数据,都会被攻击机获取和解密。
工具介绍
| Fiddler | charles | anyproxy | |
|---|---|---|---|
| 手机安装证书 | 需要 | 需要 | 需要 | 
| 支持抓取 | http/websocket/https(单向认证) | http/websocket/https(单向认证) | http/websocket/https(单向认证) | 
| 支持平台 | win/mac/linux(受限) | win/mac/linux | win/mac/linux | 
| 脚本开发 | Jscript.net | 未知 | js | 
具体的 文走向如下
手机上的配置方法(以Fiddler为例,其它类似)
- 准备工作:手机与PC在同一个局域 内(可以连同一个WIFI,或者电脑插入移动WIFI)
- 配置步骤见下:
参考链接: https://blog.csdn.net/gld824125233/article/details/52588275
特别说明,抓不到 文可能的情况
1、单向双向 https
https的抓包原理是基于中间人攻击的方式,但是这种方式只适用于单向认证的方式,也就是只是客户端去检验服务端的证书。而双向认证的Https,服务端还会校验客户端的证书。https握手过程如下:
如何检测是双向认证还是单向认证,可以通过wireshark抓包看双方的协商过程,证书的交换是否是双向的。
解决办法:暂时没有好的办法解决这个抓包的问题
2、ssl pinning
ssl pinning:证书锁定 Certificate Pinning 是SSL/TLS加密的额外保证手段。它会将服务器的证书公钥预先保存在客户端。在建立安全连接的过程中,客户端会将预置的公钥和接受的证书做比较。如果一致,就建立连接,否则就拒绝连接。Certificate Pinning在手机软件中应用较多。因为这些应用连接的服务器相对固定,可以预先将服务器的X509证书或者公钥保存在App中。例如,苹果应用商店Apple App Store就预置了这个功能。当使用中间人工具或者Fiddler之类的工具拦截数据,就会造成应用商店无法联 的情况。
解决办法:手机安装 xposed 和 Justtrustme 插件(https://github.com/Fuzion24/JustTrustMe)
抓取实现
抓到 文后,就可以模拟请求了。请求发送的几种方式:
- 
抓包工具里面提供了发送功能,Fiddler 中的 Composer 标签里提供了此功能。 
- 
Chrome 的 Postman 扩展程序 也可以用来发送 文。 
- 
Python 中的 requests 包也可以方便地实现 
缺陷
- 
如何构造更多的请求见的分页请求、更换查询参数等) 
- 
如果抓不到包怎么办果通信走 socket 怎么办/p> 
- http 参数中包含加密、签名字段,如何找到参数的生成方法p> 
二、模拟点击
基本原理(基于UIautomator)
通过程序模拟人的行为对APP的界面进行点击、滑动等操作,同时可以获取APP的Activity页面上的大部分控件上的文本信息(有一些可能获取不到,Uiautomator本身就获取不到)
Appium官 介绍:https://appium.io/docs/cn/about-appium/intro/,https://github.com/appium/appium
Macaca: https://macacajs.com/
工具介绍
| Appium | Macaca | |
|---|---|---|
| 支持平台 | 需要 | 需要 | 
| 脚本语言 | PC/ios/android/hybrid(h5、native混合) | PC/ios/android/hybrid | 
| 备注 | 支持Android所有版本 | Android支持API>17 | 
| 底层框架 | UIAutoation(IOS)/UIAUtomator+Selendroid(Android) | XCUITest(IOS)/UIAUTOMATOR(Android) | 
| 稳定性 | 一般 | 更好 | 
| 开源 | JS基金项目, 区活跃 | 阿里开源,未来未知 | 
市面上常见的UI自动化测试工具以及优缺点
以上主流工具的优点跟缺点
Airtest
AirtestIDE官方文档AirtestIDE官方文档:https://airtest.netease.com/docs/cn/index.html
关于Airtest的使用探索:https://www.jianshu.com/p/32d08455e86f
Airtest  易出品的一款基于图像识别和poco控件识别的一款UI自动化测试工具。Airtest的框架是 易团队自己开发的一个图像识别框架,这个框架的祖宗就是一种新颖的图形脚本语言Sikuli。Sikuli这个框架的原理是这样的,计算机用户不需要一行行的去写代码,而是用屏幕截屏的方式,用截出来的图形摆列组合成神器的程序,这是Airtest的一部分。
 ??另外,Airtest也基于poco这个U控件搜索框架,这个框架也是 易自家的跨平台U测试框架,原理类似于appium,通过控件的名称,id之类的来定位目标控件,然后调用函数方法,例如click(),swip()之类的方法来对目标控件进行点击或者是操作。
相较于以上工具来说,Airtest有以下优点和缺点:
抓取实现
1. 程序基本架构
2. 框架API说明
以Appium为例,Appium 支持的API 介绍如下:
- 
定位支持 - 
通过accessibility id查找元素 
- 
通过元素id 
- 
通过元素文本内容 
- 
通过元素可见链接文本定位 
- 
通过元素标签名称定位元素 
- 
通过元素class name属性定位元素 
- 
支持单个、批量获取 
 
- 
- 
操作支持 - 
从某个元素滑动到另一个元素 
- 
把某元素拖到目标元素 
- 
模拟手指点击(最多五个手指),可设置按住时间长度(毫秒) 
- 
从A点滑动到B点,滑动时间可配 
- 
快速滑动 
- 
模拟双指捏(缩小操作) 
- 
在元素上执行放大操作 
- 
单击 
- 
还能摇一摇(IOS支持) 
- 
执行JS脚本 
- 
获取H5页面的page source 
- 
输入框输入(回车的支持,建议选用sogou输入法,keycode: 66 ,==这样不需要去定位键盘上回车的输入==) 
 
- 
- 
控制APP - 
安装、删除、运行、关闭APP 
- 
指定运行某APP的某activity 
 
- 
- 
获取控件信息 - 
文本 
- 
元素tag名称 
- 
内容描述(content-desc) 
 
- 
样例代码(python)
如果使用过selenium做爬虫或测试,对这个接口应该很熟悉。
缺陷
- 
获取效率低 - 
定位元素需要时间 
- 
为了保证稳定,需要在额外地增加等待时间 
 
- 
- 
获取的数据有限 - 
只能获取到界面上可视控件的信息 
- 
H5页面信息,(需要切换driver到H5) 
 
- 
- 
Appium的不稳定,出现异常时有可能进程卡死,需要重新启动 
三、APK逆向
基本原理
方法 一 的 模拟抓包 和 方法 二 的 模拟点击 对于没有android逆向经验的朋友是不错的选择,开发起来也比较简单,能满足一些对于应用数据的需求。但是如果想要更高效地获取更多的数据,就需要研究APP的代码。通过向APK中注入自己的代码,修改APP 本身原来的逻辑,比如修改函数执行内容、增加新的逻辑等等来来实现自己的目标。
一般的操作步骤如下:
- 
逆向 APK 
- 
分析 smali 代码 
- 
通过 hook 框架向 APK 中注入代码,修改逻辑 
需要的基础
- 
smali语法 
- 
APK反编译 
- 
静态、动态调试 
- 
常用HOOK框架 
- 
反调试、反HOOK应对策略 
下面知识可以快速入门 smali 语法,最基本的数据类型,函数定义关键字,寄存器作用说明
关键字
数据类型
寄存器类型
址参考https://bbs.pediy.com/thread-151769.htm
工具介绍
26 款优秀的 Android 逆向工程工具( 注意看下面评论 ):https://www.freebuf.com/sectool/111532.html
1. 反编译工具
APKToolbox 工具
AndroidKiller(smali 代码IDE)
常见问题及解决办法
- 
有一些包无法使用Apktool进行反编译,常用解决办法: 
2. 脱壳工具
一些对安全性要求高的 APP 会采用加固工具为自己的 APK 加壳,表象就是你能反编译代码,反编译出来的 smali 代码很简单,只能看到壳的主程序代码,并没有真实的业务逻辑代码。 可以借助 apktoolbox 来进行检测是什么壳,而去寻找对应的脱壳工具。(由于加固这个比较专业,这里只推荐几款比较出名的脱壳工具,细的就讲不了了)
- 
https://github.com/DrizzleRisk/drizzleDumper 某数字公司壳 
- 
https://github.com/DrizzleRisk 其它几个脱壳工具 
- 
https://github.com/zyq8709/DexHunter 很久没更新了 
- 
https://github.com/F8LEFT/FUPK3 需要修改 android 源码 
3. 常用 Hook 框架
| xposed | Cydia Substrate | Frida | |
|---|---|---|---|
| 支持的系统 | android | android/IOS | win/mac/linux/IOS/Android | 
| 版本要求 | android | android( | android | 
| 开发语言 | Java | Java | Python+Js | 
| 是否Root | 需要 | 需要 | 需要 | 
| 运行 | 安装后重启 | 安装模块后需要软重启 | 基于脚本交互 | 
| Java/Native | Java层 | Java/Native | Java/Native | 
Xposed:
         API介绍:https://api.xposed.info/reference/packages.html
         开发者论坛:(https://forum.xda-developers.com/xposed)
Cydia Substrate:
         官 :http://www.cydiasubstrate.com/
         文档:http://www.cydiasubstrate.com/id/264d6581-a762-4343-9605-729ef12ff0af/
Frida:
         官 :https://www.frida.re/
4. 动态调试smali代码
需要安装 smaliidea,具体教程http://blog.csdn.net/linchaolong/article/details/51146492
5. 动态调试so
使用 IDA 工具包,具体教程:http://blog.csdn.net/jiangwei0910410003/article/details/51500328
==特殊说明==
随着开发者对于数据安全性的重视,一般的 APK 都会有各种保护策略,包括 代码混淆、加壳,反调试,hook检查 等等策略。我们非专业安全研究人员,只能见招拆招,只要能实现我们的目的就可以了,面对一些常规的策略有以下几种应对措施。
反调试
- 
调用 ptrace(PTRACE_TRACEME,0,0,0) (原理一个进程只能被一个进程 Ptrace) 
- 
检测 TracerPid 的值 
- 
检测代码的执行间隔时间 
- 
检测手机的硬件信息是否在调试器中 
- 
检测 android_server 的端口 
- 
检测 android_server 名称 
- 
检测在调试状态下的软件断点 
- 
通过使用 Inotify 对文件进行监控 
- 
检测进程列表中是否存在常见的 Hook/调试 的进程名称 
反 hook
- 
检测已经安装的应用里是否包含 xposed/Cydia Substrate - 
hook PackageManager 的 getInstalledApplications,把 Xposed 或者 Substrate 的包名去掉 
 
- 
- 
关键函数检查调用栈里的可疑方法 - 
hook Exception 的 getStackTrace,把自己的方法去掉 
 
- 
- 
检测并不应该 Native的native 方法 - 
hook getModifiers,把 flag 改成看起来不是 native 
 
- 
- 
通过 /proc/[pid]/maps 检测可疑的 共享对象 或者 JAR - 
hook 打开的文件的操作,返回 /dev/null 或者修改的 map 文件 
 
- 
抓取实现
- 
基于框架,开发 hook 代码 
缺陷
- 
hook 的方式对 APK 的代码有侵入,需要对 APK 中的各种反调试、反hook 检测手段做规避 
- 
如果遇到加壳的,分析时间会很长。如果无法脱壳,那么将无法实现抓取 
四、开发工具
- 
Requests 库 
- 
开源框架包括 - 
Pyspider 
- 
Scrapy 
- 
Tornado 协程 实现并发访问 
 
- 
五、参考
- 
Smali 语法:https://www.jianshu.com/p/ba9b374346dd 
- 
IDA 使用介绍:http://blog.csdn.net/jiangwei0910410003/article/details/51500328 
- 
反反调试:http://blog.csdn.net/feibabeibei_beibei/article/details/60956307 
- 
反反 hook: http://gnaixx.cc/2016/09/03/android-anti-hooking/ 
- 
Fiddler 小白入门: http://blog.csdn.net/gld824125233/article/details/52588275 
- 
浅析 HTTPS 中间人攻击与证书校验:http://blog.csdn.net/zhangmiaoping23/article/details/79228637 
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!