前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PBTK:一款针对Protobuf App的逆向工程与模糊测试套件

PBTK:一款针对Protobuf App的逆向工程与模糊测试套件

作者头像
FB客服
发布2019-12-25 18:07:57
2.2K0
发布2019-12-25 18:07:57
举报
文章被收录于专栏:FreeBuf

套件介绍

Protobuf是Google设计的一种序列化格式,目前已被广泛应用在各种Android端、Web端和桌面端应用程序之中。它由一种用于声明数据结构的语言组成,并且能够根据目标的实现方式,来为其编译代码以及其他类型的结构数据。

PBTK(Protobuf toolkit)是一套功能完整的脚本,可以通过统一的GUI来访问,PBTK主要提供了以下两个重要功能:

一、从目标程序中提取Protobuf结构,将其转换回可读的.protos格式,并且支持下列实现:

1、所有主流的Java运行时(base, Lite, Nano, Micro, J2ME),以及完整的Proguard支持; 2、二进制代码包含嵌入式反射元数据(通常是C++,有时是Java和其他绑定); 3、使用JsProtoUrl运行时的Web应用程序;

二、通过一个方便的图形界面编辑、重放和模糊化发送到Protobuf网络端点的数据,该界面允许您实时编辑Protobuf消息的字段并查看结果。

工具安装

PBTK要求使用Python >= v3.5、PyQt 5、Python-Protobuf 3以及其他的依赖组件(例如Chromium、jad和dex2jar等等)来运行提取脚本。

Archlinux用户可以直接运行下列命令来完成安装:

代码语言:javascript
复制
$ yaourt -S pbtk-git$ pbtk

在其他Linux发行版系统中,我们可以直接运行下列命令完成工具的安装:

代码语言:javascript
复制
$ sudo apt install python3-pip git openjdk-9-jre$ sudo pip3 install protobuf pyqt5 requests websocket-client$ git clonehttps://github.com/marin-m/pbtk$ cd pbtk$ ./gui.py

当然了,PBTK也支持在Windows平台杀昂使用,我们安装好依赖组件并运行GUI之后,工具将会提醒我们进行下一步操作,按提示操作即可。

命令行使用

GUI可以通过主脚本来启动:

代码语言:javascript
复制
./gui.py

下列脚本也可以单独进行使用,不需要通过GUI来启动:

代码语言:javascript
复制
./extractors/jar_extract.py [-h] input_file [output_dir]./extractors/from_binary.py [-h] input_file [output_dir]./extractors/web_extract.py [-h] input_url [output_dir]

常规工作流

假设我们需要对一款Android应用程序进行逆向分析,我们可以先选择一个我们熟悉的反编译工具,然后按常规方式并通过HTTP向目标以POST数据的形式发送Protobuf格式内容。

打开PBTK,我们将会看到下图所示界面:

第一步就是将.protos文件转换为text格式,如果目标为Android应用,我们可以打开一个APK文件,然后剩下的就交给PBTK吧!

完成之后,在命令行编辑器中切换到“~/.pbtk/protos/”路径下,该App的.protos文件都在这个路径下。

回到我们的反编译工具,我们可以将感兴趣的数据通过HTTPS来向目标节点进行发送,并通过调用由生成的代码构成的类来序列化Protobuf消息。

后面这个类应该可以直接对应到我们.protos目录中的某一个结构,比如说com.foo.bar.a.b将对应com/foo/bar/a/b.proto。那么接下来,我们选择需要作为输入的.proto文件,然后填写一些相关的节点信息:

我们还可以提供一些样本原始的Protobuf数据并发送至目标节点,相关数据可以通过mitmproxy或Wireshark捕获,或以十六进制编码的形式粘贴进去。

第三步,点击按钮,看看奇迹如何发生!工具将生成一个表示Protobuf结构的树形图(重复的字段以“+”作为后缀,必需的字段没有复选框):

只需在一个区域上鼠标悬停即可获得焦点,如果字段是整数类型,请使用鼠标滚轮将其递增/递减,悬停时也会显示枚举信息。

本地数据存储

PBTK会将提取出的.proto信息存储至“~/.pbtk/protos/”(Linux)或“%APPDATA%\pbtk\protos”(Windows)路径下。基于HTTP节点的数据存储以JSON对象形式在“~/.pbtk/endpoints/”:

代码语言:javascript
复制
[{"request": {"transport": "pburl","proto": "www.google.com/VectorTown.proto","url": "https://www.google.com/VectorTown","pb_param": "pb","samples": [{"pb": "!....","hl": "fr"}]},"response": {"format": "other"}}]

项目地址

PBTK:https://github.com/marin-m/pbtk

*参考来源:marin-m,FB小编Alpha_h4ck编译,转载请注明来自FreeBuf.COM

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-12-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FreeBuf 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 套件介绍
  • 工具安装
  • 常规工作流
  • 本地数据存储
  • 项目地址
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档