前言


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


前言

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

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

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

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

正文

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

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

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

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

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

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

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

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

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

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

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

HTTP协议

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

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

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

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

继续跟进 XHttpApi.addSnToParams

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

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

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

看看关键的源代码

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

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

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

TCP

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

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

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

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

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

nc 测试之

正确。

总结

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

参考

http://www.vuln.cn/6100

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

安卓脱壳&&协议分析&&burp辅助分析插件编写的更多相关文章

  1. 打造smali代码库辅助分析

    打造smali代码库辅助分析 在分析Android应用程序的时候,我们往往会插入代码重打包apk来辅助我们分析的工作 一个比较取巧的方法就是先用java写好代码以及相关的调用之后, 然后直接扣出代码 ...

  2. SPI协议及工作原理分析

    说明.文章摘自:SPI协议及其工作原理分析 http://blog.csdn.net/skyflying2012/article/details/11710801 一.概述. SPI, Serial ...

  3. HTTP协议及其请求头分析

    HTTP协议及其请求头分析 HTTP协议及其请求头分析   众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用 ...

  4. 实战录 | 基于openflow协议的抓包分析

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...

  5. [转]HTTP协议及其请求头分析

      众所周知,Internet的基本协议是TCP/IP协议,目前广泛采用的FTP.Archie Gopher等是建立在TCP/IP协议之上的应用层协议,不同的协议对应着不同的应用.  WWW服务器使用 ...

  6. oracle 12541,12560,00511无监听程序, 协议适配器错误问题分析及解决方案

    oracle 12541,12560,00511无监听程序, 协议适配器错误问题分析及解决方案   问题描述: 1. lsnrctl start.stop.非常慢,出现卡顿现象: 2. 执行lsnrc ...

  7. SMB协议原理抓包分析

    SMB协议原理抓包分析 目录: 1.SMB概述 2.SMB原理 3.SMB配置 一.SMB概述 SMB(全称是Server Message Block)是一个协议名,可用于在计算机间共享文件.打印机. ...

  8. 微信小程序、安卓APP、苹果APP对比分析

    今天的话题主要是关于微信小程序.安卓APP.苹果APP对比分析.既然是对比分析肯定是将它们一个一个说明. 本篇不涉及技术话题,只讲解微信小程序.安卓APP.苹果APP它们各自的优缺点及其应用场景. 一 ...

  9. DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析

    DHCP (Dynamic Host Configuration Protocol )协议的探讨与分析 问题背景 最近在工作中遇到了连接外网的交换机在IPv6地址条件下从运营商自动获取的DNS地址与本 ...

随机推荐

  1. 一文详解python的类方法,普通方法和静态方法

    首先形式上的区别,实例方法隐含的参数为类实例self,而类方法隐含的参数为类本身cls. 静态方法无隐含参数,主要为了类实例也可以直接调用静态方法. 所以逻辑上,类方法被类调用,实例方法被实例调用,静 ...

  2. easyui 中iframe嵌套页面,大弹窗自适应居中的解决方法。$('#win').window()

    easyui 中iframe嵌套页面,大弹窗自适应居中的解决方法.$('#win').window() 以下是左边栏和头部外层遮罩显示和隐藏方法 /*外层 遮罩显示*/ function wrapMa ...

  3. Vue路由router-link的使用

    Vue路由router-link的使用 相关Html: <!DOCTYPE html> <html lang="en"> <head> < ...

  4. Eclipse删除switch workspace下多余的workspace

    第一步:修改org.eclipse.ui.ide.prefs 文件 打开Eclipse目录的\configuration\.settings目录,找到org.eclipse.ui.ide.prefs ...

  5. 分区助手官网使用教程(专业版、绿色版和WinPE版)(图文详解)

    不多说,直接上干货! 详情见 http://www.disktool.cn/jiaocheng/index.html http://www.disktool.cn/jiaocheng/index2.h ...

  6. 自己动手实现一个WEB服务器

    自己动手实现一个 Web Server 项目背景 最近在重温WEB服务器的相关机制和原理,为了方便记忆和理解,就尝试自己用Java写一个简化的WEB SERVER的实现,功能简单,简化了常规服务器的大 ...

  7. Nodejs学习笔记(七)—Node.js + Express 构建网站简单示例

    前言 上一篇学习了一些构建网站会用到的一些知识点:https://www.cnblogs.com/flyingeagle/p/9192936.html 这一篇主要结合前面讲到的知识,去构建一个较为完整 ...

  8. 转载《浅析MVC框架中View层的优雅设计及实例》

    在基于B/S的应用程序开发中,从基本的技术分工上来说就是两大块,一是软件显示界面,另一个是程序逻辑.在N年前的脚本语言时代,无论是asp.php还是jsp,我们基本是都是把这两者柔和在一起的.尽管我们 ...

  9. python hive.py

    #!/usr/bin/env python# -- coding:utf-8 -- import osimport sysfrom subprocess import call from pyspar ...

  10. elasticsearch版本不同,批量查询也不相同

    网上搜到批量查询可以通过TransportClient实现,但官方推荐使用RestHighLevelClient实现 注意: We plan on deprecating the TransportC ...