热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

安卓脱壳协议分析burp辅助分析插件编写

前言本文由本人首发于先知安全技术社区:https:xianzhi.aliyun.comforumuser5274前言本文以一个app为例,演示对app脱

前言


本文由 本人 首发于 先知安全技术社区: https://xianzhi.aliyun.com/forum/user/5274


前言

本文以一个 app 为例,演示对 app脱壳,然后分析其 协议加密和签名方法,然后编写 burp 脚本以方便后面的测试。

文中涉及的文件,脱壳后的 dex 都在:

链接: https://pan.baidu.com/s/1nvmUdq5 密码: isrr

对于 burp 扩展和后面加解密登录数据包工具的的源码,直接用 jd-gui 反编译 jar 包即可。

正文

首先下载目标 apk ,然后拖到 GDA 里面看看有没有壳。

20171215230013-a71d075c-e1a8-1.png

发现是腾讯加固,可以通过修改 dex2oat 的源码进行脱壳。

20171215230019-ab0e46aa-e1a8-1.png

具体可以看: https://bbs.pediy.com/thread-210275.htm

脱完壳 dex文件,扔到 jeb 里面进行分析(GDA分析能力还是不太强,不过速度快)

20171215230028-b00aca66-e1a8-1.png

类和方法都出来了,脱壳成功。

首先看看协议抓取,建议自己电脑起一个 ap (热点), 然后用手机连接热点,对于 http 的数据包,可以使用 burp 进行抓取(对于 https 还要记得先安装 burp 的证书),对于 tcp 的数据包,由于我们是连接的 电脑的 wifi 所以我们可以直接用 wireshark 抓取我们网卡的数据包就能抓到手机的数据包。对于笔记本,可以买个无线网卡。

首先看看注册数据包的抓取,设置好代理,选择注册功能,然后去 burp 里面,可以看到抓取的数据包。

20171215230047-bb855e9c-e1a8-1.png

对于登录数据包,点击登录功能,去发现 burp 无法抓到数据包, 怀疑使用了 tcp 发送请求数据,于是开启 wireshark 抓取 手机连接的热点到的网卡的数据包。抓取时间要短一些,不然找信息就很麻烦了。

20171215230054-bfbc5c18-e1a8-1.png

然后我们一个一个 tcp 数据包查看,看看有没有什么特殊的。

20171215230102-c4c02cc6-e1a8-1.png

发现一个数据包里面有 base64 加密的数据,猜测这个应该就是登陆的数据包。查了一下 ip ,应该就是了。

20171215230109-c88739c6-e1a8-1.png

下面针对不同类型的协议加密措施进行分析。

HTTP协议

协议分析关键是找到加密解密的函数,可以使用关键字搜索定位。为了方便搜索,先把 dex 转成 smali 然后用文本搜索工具搜索就行了,我使用 android killer。在这里可以使用 sn , verify 等关键词进行搜索,定位关键代码。我选择了 verify ,因为它搜出的结果较少。

20171215230117-cd341fe8-e1a8-1.png

函数没经过混淆,看函数名就可以大概猜出了作用,找到关键方法,拿起 jeb 分析之。
先来看看 LoginReg2_ActivityonCreate 方法。

20171215230123-d0cb3d3a-e1a8-1.png

获取手机号进入了 XHttpApi.getVerify 方法,跟进

20171215230131-d59706fa-e1a8-1.png

先调用了 XHttpApi.addSnToParams(params) (看名称估计他就是增加签名的函数了),然后发送 post 请求。

继续跟进 XHttpApi.addSnToParams

20171215230141-dbb46dde-e1a8-1.png

至此签名方案非常清晰了。

  • 获取时间戳,新增一个 t 的参数,值为 时间戳
  • md5("AndroidWear65cbcdeef24de25e5ed45338f06a1b37" + time_stamp)sn

由于有时间戳和签名的存在,而且服务器会检测时间戳,后续如果我们想测试一些东西,就需要过一段时间就要计算一下 签名和时间戳,这样非常麻烦,我们可以使用 burp 编写插件,自动的修改 时间戳和 签名,这样可以大大的减少我们的工作量。

看看关键的源代码

首先注册一个 HttpListener, 这样 burp 的流量就会经过我们的扩展。

20171215230158-e5983844-e1a8-1.png

然后看看 processHttpMessage对流经扩展的流量进行处理的逻辑。只处理 http 请求的数据,然后根据域名过滤处理的数据包,只对 wear.readboy.com 进行处理。接着对于数据包中的 t 参数和 sn 参数进行重新计算,并且修改 数据包中的对应值。

20171215230212-ede8f45c-e1a8-1.png

加载扩展,以后重放数据包,就不用管签名的问题了。

TCP

对于 tcp 的协议可以通过搜索 端口号,ip 地址等进行定位,这里搜索 端口号(这里是8866, 可以在 wireshark 中查看),有一点要注意,程序中可能会用 16 进制或者 10 进制表示端口号为了,保险起见建议两种表示方式都搜一下。

20171215230221-f3abf358-e1a8-1.png

通过搜索 0x22a2 (886616 进制表示)找到两个可能的位置。分别检查发现 第二个没啥用,在 jeb 中查找交叉引用都没有,于是忽略之。然后看看第一个。

20171215230228-f7d1ff36-e1a8-1.png

可以看到 jeb 把端口号都转成了 10 进制数,这里与服务器进行了连接,没有什么有用的信息。于是上下翻翻了这个类里面的函数发现一个有意思的函数。

20171215230240-feba3bf6-e1a8-1.png

用于发送数据,里面还用了另外一个类的方法,一个一个看,找到了加密方法。

20171215230248-03944626-e1a9-1.png

就是简单的 rc4 加密,然后在 base64 编码。
为了测试的方便写了个图形化的解密软件。

20171215230253-06a3fa14-e1a9-1.png

nc 测试之

20171215230300-0a8bf19a-e1a9-1.png

正确。

总结

不要怕麻烦,一些东西尽早脚本化,自动化,减轻工作量。逆向分析,搜索关键字,定位关键代码。

参考

http://www.vuln.cn/6100

http://www.freebuf.com/articles/terminal/106673.html

转:https://www.cnblogs.com/hac425/p/9416890.html



推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 本文详细介绍了如何搭建一个高可用的MongoDB集群,包括环境准备、用户配置、目录创建、MongoDB安装、配置文件设置、集群组件部署等步骤。特别关注分片、读写分离及负载均衡的实现。 ... [详细]
  • 如题:2017年10月分析:还记得在没有智能手机的年代大概就是12年前吧,手机上都会有WAP浏览器。当时没接触网络原理,也不 ... [详细]
  • 探讨密码安全的重要性
    近期,多家知名网站如CSDN、人人网、多玩、开心网等的数据库相继被泄露,其中大量用户的账户密码因明文存储而暴露无遗。本文将探讨黑客获取密码的常见手段,网站如何安全存储用户信息,以及用户应如何保护自己的密码。 ... [详细]
  • 利用Node.js实现PSD文件的高效切图
    本文介绍了如何通过Node.js及其psd2json模块,快速实现PSD文件的自动化切图过程,以适应项目中频繁的界面更新需求。此方法不仅提高了工作效率,还简化了从设计稿到实际应用的转换流程。 ... [详细]
  • Fiddler 安装与配置指南
    本文详细介绍了Fiddler的安装步骤及配置方法,旨在帮助用户顺利抓取用户Token。文章还涵盖了一些常见问题的解决方案,以确保安装过程顺利。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 精选10款Python框架助力并行与分布式机器学习
    随着神经网络模型的不断深化和复杂化,训练这些模型变得愈发具有挑战性,不仅需要处理大量的权重,还必须克服内存限制等问题。本文将介绍10款优秀的Python框架,帮助开发者高效地实现分布式和并行化的深度学习模型训练。 ... [详细]
  • 本文详细介绍了如何在ARM架构的目标设备上部署SSH服务端,包括必要的软件包下载、交叉编译过程以及最终的服务配置与测试。适合嵌入式开发人员和系统集成工程师参考。 ... [详细]
  • 实践指南:使用Express、Create React App与MongoDB搭建React开发环境
    本文详细介绍了如何利用Express、Create React App和MongoDB构建一个高效的React应用开发环境,旨在为开发者提供一套完整的解决方案,包括环境搭建、数据模拟及前后端交互。 ... [详细]
  • 华硕笔记本无法开启热点的解决办法
    当您的华硕笔记本电脑无法开启热点时,可能是因为多种原因导致的。本文将详细介绍几种有效的解决方法,帮助您快速恢复热点功能。 ... [详细]
  • Asynchronous JavaScript and XML (AJAX) 的流行很大程度上得益于 Google 在其产品如 Google Suggest 和 Google Maps 中的应用。本文将深入探讨 AJAX 在 .NET 环境下的工作原理及其实现方法。 ... [详细]
  • 尝试使用Composer安装自定义提交的包时遇到问题,Composer报告找不到指定的包。 ... [详细]
  • 如何在U8系统中连接服务器并获取数据
    本文介绍了如何在U8系统中通过不同的方法连接服务器并获取数据,包括使用MySQL客户端连接实例的方法,如非SSL连接和SSL连接,并提供了详细的步骤和注意事项。 ... [详细]
author-avatar
米粒尖尖果儿_445
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有