本章对之前的网络流量分析与Android逆向做个小结。

网络流量分析

原理解析

分析原理前之前先了解中间人攻击的概念:在中间人攻击中,攻击主机通常截断客户端和服务器的加密通信。攻击机以自己的证书替代服务器发给客户端的证书。通常,客户端不会验证该证书,直接接受该证书,从而建立起和攻击机的安全连接。这样,客户端发送的数据,都会被攻击机获取和解密。

这里主要分析应用层抓包,应用层Https抓包原理

有了Charles/burpsuite置于中间之后,本来C/S架构的通信过程会分裂为两个独立的通信过程,app本来验证的是服务器的证书,但是分裂成两个独立的通信过程之后,app验证的是Charles/burpsuite的证书,但是由于它并不是由手机内置的权威根证书签发机构签发的,所以手机根证书并不认可,然后导致app也不认可;所以我们要把Charles的证书导入到手机根证书目录中去,这样手机就会认可,如果app没有进行额外的校验(SSL pinning)的话,app也会直接认可接受。

工具简介与使用

  • Wireshark:抓取本机网卡进出的流量,具体使用教程可参考:
    https://blog.csdn.net/zjy900507/article/details/79303359
    https://www.cnblogs.com/nieliangcai/p/6689915.html

  • Burpsuite:
    首先配置burp,在burpsuite的Proxy的Option中配置代理监听,ip设置为当前上网的网卡的ip,端口任意(设为8080):

    接着在手机端设置代理:


    此时在手机端的浏览器里访问http://burp,下载证书并安装:

    这时在手机上访问网站、使用APP等,就可以抓到HTTP和HTTPS包了。抓包示例:比如想抓登陆的包:

    打开burp截断功能:

    接着点击登陆按钮:

    这样就截断了登陆的请求数据,可以看到POST请求中的手机号和密码都使用明文传输。
    在Response处可以看到请求对应的回应:

    关掉截断功能可以抓所有的流量数据。

  • Charles:通过将自身设置成系统的网络访问代理服务器,使得所有网络请求都通过它来完成,从而实现网络封包的截取和分析。

    设置系统代理:

    截取Https数据包通讯信息:截取分析Https协议相关内容,需要安装Charles CA证书:

    安装成功后设置Charles抓取Https数据包,添加监听443端口:

    Android设备流量监听,在安卓设备上设置代理服务器ip及端口(默认8888):

    Android设备需与代理主机在同一网段,在Android设备网络设置菜单中进行代理设置:


    连接代理服务器成功后下载证书(下载路径:chls.pro/ssl),安装证书后可以成功抓取Android设备流量。

示例:APP安全检测-隐私泄露、可疑流量行为隐私泄露检测:通过查看包内容检测应用是否上传用户隐私信息(wifi信息,应用包名列表,手机号等信息)。明文上传用户地址:

可疑流量行为:应用可能存在与远程C&C服务器通信、自动下载安装恶意应用包等行为。远程命令与控制C&C(command & control)服务器通信:

特殊情况

这里说的特殊情况就是指抓不到包的情况,常见的情形如下:

  • Wifi直连:例如之前分析的某动mm商城,代码中String DEFAULT_PROXY=“http.route.default-proxy”表示定义可以被不使用JRE设置的默认路由规划者使用的代理主机,这个参数期望得到一个HttpHost类型的值。如果这个参数没有被设置,那么就会尝试直接连接到目标,这个参数会被HttpRoutePlanner使用,用来实现既不使用任何Java系统属性,也不使用系统或浏览器的代理设置。

    解决方案如下:(1)安装ProxyDroid设置全局代理,将流量全部转发为wifi代理;(2)使用Package Capture抓取设备网卡中的网络流量。

  • SSL-pinning:这里仅考虑单向校验问题。ssl pinning证书锁定是SSL/TLS加密的额外保证手段。它会将服务器的证书公钥预先保存在客户端。在建立安全连接的过程中,客户端会将预置的公钥和接受的证书做比较。如果一致,就建立连接,否则就拒绝连接。SSL Pinning在手机软件中应用较多。因为这些应用连接的服务器相对固定,可以预先将服务器的X509证书或者公钥保存在App中。运行时logcat输出:

    证书存放位置:

    解决方案:(1)Xposed工具 JustTrustMe模块;(2)Frida工具绕过Certificate Pinning (控制SSLContext)

  • 双向认证:前面所说的https的抓包原理是基于中间人攻击的方式,但是这种方式都只适用于单向认证的方式,也就是只是客户端去检验服务端的证书。而双向认证的Https,服务端还会校验客户端的证书:

    前面已经提到App与服务端通信已经分裂了,这时候与服务器进行通信的已经不是app,而是Charles了,所以我们要将app中内置的证书导入到Charles中去。因此首先要找到App找到证书文件然后再导入charles中:点击Proxy→SSL Proxy Settings→Client Certificates→Add添加新的证书,输入指定的域名或IP使用指定的证书即可:

    一般apk进行解包,直接过滤搜索后缀名为p12的文件就是证书文件,有的证书文件会进行加密或伪装,可以反编译查看源码使用hook得到密码。

Android逆向

smali语法

smali、baksmali分别是指安卓系统里的Java虚拟机(Dalvik)所使用的一种dex格式文件的汇编器和反汇编器,其语法实现了.dex格式所有功能(注解、调试信息、线路信息等),部分smali指令如下:

部分条件跳转分支指令如下:

smali语法案例分析:

对应smali语法如下:

静态分析恶意软件大致流程

首先看AndroidManifest.xml文件:

分析Manifest文件时首先看入口点,再看入口界面:

入口点这里会有个android:name属性为自定义Application,一些软件会在入口点这里做一些恶意操作。入口点处分析时一般分析attachBaseContext和onCreate方法,前者先执行:

再分析MainActivity入口界面,一般也是直接找onCreate方法,有onStart的话也看下onStart方法:


然后再查看启动了什么服务,注册了什么广播:

一般情况下软件恶意操作都会比较耗时,为了防止造成ANR,一些恶意操作都会在Service中开一个线程执行或者使用IntentService,所以一般看到Service中开了线程的或者启动IntentService的需要特别关注一下。receiver中不能进行耗时操作,也不能开启子线程,以防止ANR情况,因此常见的是在receiver中启动Service,然后Service中开一个线程。分析时可查看应用中可能会执行恶意操作的系统广播,例如屏幕关闭等。

常见的恶意操作例如获取短信数据、通讯录信息、通话信息等,和隐私泄漏检测项大多相同。

  • 通讯录信息:包括手机联系人姓名、电话号码等信息;
  • 短信以及通话记录信息:包括短信内容、短信联系人、通话记录的详细信息;
  • 地理位置信息:详细的地理位置信息例如经纬度信息、ip地址等;
  • 设备相关信息:包括设备唯一标识符imei码、mac地址、电话号码、imsi码、device_id等信息;
  • 已安装应用信息:获取设备已安装应用列表信息;
  • 相册、录音、视频等多媒体隐私信息;
  • 其他个人隐私信息:例如使用app时输入的身份标识(身份证、护照等)、银行卡信息、居住地址等其他个人隐私信息。

目前恶意软件窃取隐私信息的方式主要包含两种途径:

  • 通过网络请求的方式:通过特定的API将个人隐私信息通过网络请求的方式发送到服务器。
  • 通过短信的方式:将个人隐私信息通过短信的方式发送到特定号码并在发送之后调用特定API删除短信以防止用户发现。

Frida-Java层Hook实例

Frida使用流程:手机端安装frida-server程序,开启手机端端口转发,PC端通过python脚本进行通信,python中的需要hook的代码通过javascript语言实现。环境配置如下:
(1)电脑端下载frida工具包:pip install Frida;
(2)手机端frida-server安装:

  1. 工具下载地址:https://github.com/frida/frida/releases
  2. 将应用包导入设备/data/local/tmp路径下
  3. 授权操作:chmod 755 frida-server(root权限下)
  4. 运行server:./frida-server
  5. adb开启端口转发:adb forward tcp:27042 tcp:27042;adb forward tcp:27043 tcp:27043

一般分析流程如下:

  1. 反编译apk静态分析代码,寻找hook点
  2. 编写js代码,调用类的方法或者替换
  3. 在python中执行脚本
  4. 经常配合DDMS使用

    显而易见进行了root检测,逆向后搜索提示:

    可以看到if里有三个条件:

    如果都为真说明设备已经root则调用this.a方法:

    因此只要hook调exit方法替换原有逻辑(变成什么都不做)即可:

    再次打开应用:

    参考:https://la0s.github.io/

网络流量分析与Android逆向小结相关推荐

  1. 开源 | 爱奇艺网络流量分析引擎QNSM及其应用

    ▌导读 一定业务规模的互联网公司的基础设施的网络边界通常都呈现一定程度的复杂多分区的情况,如何进行有效的安全防护和控制会成为安全体系建设的重点和难点.面对这一挑战,爱奇艺安全团队自研了网络流量分析引擎 ...

  2. 移动端测试 APP启动性能分析 WebView性能分析 H5性能分析 卡顿分析 帧分析 CPU统计 网络流量分析 耗电量指标 弱网测试 健壮性测试 兼容性测试 Amdahl

    Android官网使用指南性能:https://developer.android.com/topic/performance 一.APP启动性能分析 APP的启动过程 调用起APP.创建一个空白窗口 ...

  3. 系统资源(CPU+GPU+内存+网络流量)分析

    目录 1.CPU与GPU分析 1.GPU渲染工具:GPU-RENDERING-PROFILE 2.GPR显示内容说明: 检查 GPU 渲染速度和过度绘制了解设备上的开发者选项如何帮助您直观地查看您的应 ...

  4. 企业为什么需要网络流量分析

    摩卡网络流量分析(Mocha Network Traffic Analyzer)是一个综合网络分析系统,它通过捕获并分析网络中传输的数据包,有效反映网络通讯状况,帮助网络管理人员或非网络管理人员快速准 ...

  5. 网络管理员在预先分配和识别作为_14个网络管理员必备的最佳网络流量分析工具,收藏了...

    企业网络每天都会产生大量数据.企业可以分析这些数据,以深入了解网络运行情况或发现安全威胁.网络流量分析(NTA)解决方案允许网络管理员收集流经网络的流量数据.这些工具通常用于识别性能问题和/或发现安全 ...

  6. IOTA--最便捷的网络流量分析工具

    IOTA–最便捷的网络流量分析工具 近年来5G技术迅速的发展,整个我们整个的网络环境将迎来巨大变革,其中网络流量和宽带的剧增是其中的重要变革.这样的变化虽然给我们的工作和生活带来诸多便利,但是也带来了 ...

  7. 网络流量分析详解(包含OSI七层模型、TCP协议及Wireshark工具用法)

    网络流量分析 Network Traffic Analysis(NTA) 这个系列讲的是整个网络流量分析流程,其中包含TCP协议.HTTP协议详解和Wireshark.Tcpdump的详细用法,现在只 ...

  8. 网络协议分析与仿真课程设计报告:网络流量分析与协议模拟

    公众号:CS阿吉 网络协议分析与仿真课程设计报告  题  目:网络流量分析与协议模拟 专业名称:         网络工程 班    级: 学生姓名:           阿吉 学号(8位): 指导教 ...

  9. Linux下C/C++实现(网络流量分析-NTA)

    网络流量分析(NTA - Network Traffic Analysis) 就是捕捉网络中流动的数据包,并通过查看包内部数据以及进行相关的协议.流量.分析.统计等,协助发现网络运行过程中出现的问题. ...

最新文章

  1. SQL 注入真是防不胜防!
  2. 来自95后的天池中间件大赛总结
  3. JavaWeb生成图片验证码
  4. 【学习】SpringBoot之自定义拦截器
  5. python访问数据库
  6. 前端学习(1935)vue之电商管理系统电商系统之实现权限的默认勾选功能
  7. Linux系统编程:验证kernel内核缓存区大小-4096字节
  8. 不得不服!腾讯优图联合腾讯会议正式上线神奇的眼神接触功能
  9. 当拼多多开始打假 那么多“拼多多买家秀”竟都是假的?
  10. linux的目录创建时间,LINUX下文件创建时间问题
  11. asp.net分页方法
  12. OpenWrt 无线桥接
  13. 360金融:“巨头”式的快与稳
  14. 三星nc10 装linux,三星NC10安装快捷键驱动
  15. There‘s no Qt version assigned to project xxx.vcxproj for configuration Debug/x64
  16. 【侯捷】C++STL标准库与泛型编程(第二讲)
  17. 领域驱动设计(DDD)之领域专家
  18. 注解—— java.lang.annotation.Annotation
  19. python中read函数解释_Python内置函数:read()
  20. 晶体三极管放大电路的基础

热门文章

  1. 按关键字采集淘特商品列表API接口H5
  2. vue的基础知识-vue基础入门
  3. imx6 linux 开发环境,米尔iMX6UL开发板Linux操作系统的环境部署
  4. BFD1从北京顺义新国展到酒仙桥特斯拉办公室
  5. 对比PAYPAL和国际信用卡支付的流程
  6. python玩转我的世界_PYTHON玩转我的世界——批量生成铁傀儡
  7. 3.Navicat Premium:导入excel文件
  8. 微星智控 - 群控软件
  9. syntactic与semantic
  10. 宠物保存服务市场现状及未来发展趋势分析