猿人学逆向比赛第四题-gRPC题解 | Go版本

大家好,我是TheWeiJun,欢迎来到我的公众号。在现代互联网中,某些网站、App会使用gRPC进行数据传输,以加强数据的安全性和保密性。然而,逆向加密算法并不是一件简单的事情。本文将探讨如何逆向猿人学App的gRPC协议,向读者介绍这一过程中所涉及的技术和工具,并提供详细的步骤和示例代码,以帮助读者更好地理解和掌握gRPC原理与实现。

特别声明:本公众号文章只作为学术研究,不作为其他不法用途;如有侵权请联系作者删除。

 目录

一、前言介绍

二、APP分析

三、抓包分析

四、算法还原

五、思路总结

趣味模块

依依是一名热爱编程的小女孩,最近她开始对gRPC逆向分析产生了浓厚的兴趣。一天,她在网络上找到了一份开源的gRPC框架代码,决定用自己的方式来分析它。在分析的过程中,依依遇到了无数的困难和挑战,但是她从不放弃,一直努力地学习和尝试。最终,她成功地找到了一个漏洞,并向开发团队提出了修复建议。通过这次经历,依依不仅学会了更多的编程技能,还培养了自己的解决问题的能力。她深深意识到,只要有足够的热情和毅力,就能克服任何难关,实现自己的梦想。依依公众号如下:

逆向与爬虫的故事

专注于网络爬虫、JS逆向、APP逆向、安全攻防实战经验分享及总结。


一、前言介绍

1、什么是gRPC?

gRPC 是一个高性能、开源和通用的 RPC 框架,面向服务端和移动端,基于 HTTP/2 设计。架构如下:

2、gRPC特点

  • 语言中立,支持多种语言;

  • 基于 IDL 文件定义服务,通过 proto3 工具生成指定语言的数据结构、服务端接口以及客户端 Stub;

  • 通信协议基于标准的 HTTP/2 设计,支持双向流、消息头压缩、单 TCP 的多路复用、服务端推送等特性,这些特性使得 gRPC 在移动端设备上更加省电和节省网络流量;

  • 序列化支持 PB(Protocol Buffer)和 JSON,PB 是一种语言无关的高性能序列化框架,基于 HTTP/2 + PB, 保障了 RPC 调用的高性能。

3、gRPC代码生成

  • 所有gRPC框架都为代码生成提供了一流的支持。gRPC的开发核心是*.proto文件,它定义了gRPC服务和消息的约定。根据这个文件,gRP框架将生成服务基类,消息和完整的客户端代码。

  • 通过在服务器和客户端之间共享*.proto文件,可以从端到端生成消息和客户端代码。客户端的代码生成消除了客户端和服务器上的重复消息,并为您创建了一个强类型的客户端。无需编写客户端代码,可在具有许多服务和应用程序中节省大量开发时间。


二、APP分析

1、使用jadx打开猿人学APP进行分析,截图如下:

2、直接搜索第四题,定位java代码位置,截图如下:

总结:和前面的题sign加密一致,主要的逻辑是将时间戳及当前页数放入到函数中去执行,java层被混淆了。我们可以看到红色箭头部分调用了native的方法,接下来我们抓包分析下整个过程吧。


三、抓包分析

1、和前面的题流程一样,我们使用drony设置代理,再使用charles进行抓包,打开APP后发现看不到任何数据包。网上搜索gRPC框架的信息后,看到都是使用wireshark进行抓包分析,接下来我们使用wireshark进行抓包分析。

2、我们先安装一个tcpdump,并将tcpdump放置到手机/data/local/tmp目录中,下载地址和相关命令如下:

下载路径:http://www.strazzere.com/android/tcpdump

adb push tcpdump /data/local/tmp/添加执行权限➜  ~ adb shellpolaris:/ $ supolaris:/ # cd data/local/tmp/polaris:/data/local/tmp # lsfrida-server-14.2.8-android-arm64 systemre.frida.server                   tcpdump1|polaris:/data/local/tmp # chmod 777 tcpdump

3、执行上面命令后,运行截图如下所示:

4、接下来使用tcpdump静态抓取分析,手机抓取pacp格式数据文件,使用如下命令启动抓包工具:

tcpdump -p -vv -s0 -w ./capture.pcap

5、然后我们刷新第四题进行数据包加载,看到本地生成capture.pcap文件后,截图如下所示:(然后我们关闭tcpdump静态抓包分析)

6、接下来我们使用wireshark工具打开刚刚生成的capture.pcap文件,并搜索指定ip端口9901(端口和ip在后面的分析中会用到),截图如下所示:

7、通过查看关键字grpc定位到指定的链接,然后执行如下图所示转换,即可将tcp请求转为grpc协议的数据:

8、转换完成后,我们能够查看到发包请求体,截图如下:

总结:上图中的Field(1)即为页数,Field(2)为时间戳,Field(3)为sign参数,我们都能够和frida hook到的值进行一一对应了。接下来我们分析下response,来找找规律吧。

9、我们打开response响应区域,截图如下所示:

总结:我们通过分析图中红色的箭头,能够看到一组数字,这个就是gRPC响应给我们的数据,拿到他以后,我们就能够将每一页的数据相加完成答题了。接下来,我们进入grpc源码编写环节。


四、算法还原

1、在GoLand中根据上面提供的有用信息,编写proto文件,完整代码如下:

syntax = "proto3";option go_package = ".;protobuf";package protobuf;message GreetingRequest {  int32  page = 1;  int64  time_str = 2;  string sign = 3;}message StreamResData {  // repeated是用来存放n个相同内容类型,类似于数组slices  repeated string message = 1;}service StreamReqData {  rpc SayHello (GreetingRequest) returns (StreamResData){};}

总结:page、time_str、sign分别和上面截图的类型一一对应,而message我们使用repeated类型用来存放多个相同内容。方法StreamReqData是gRPC的固定写法。

2、接下来,我们使用protoc生成go调用格式和grpc服务接口,命令如下:

protoc -I ./ --go_out=plugins=grpc:proto game_grpc.pb.go

3、遗憾的是,报错了,截图如下所示:

4、紧接着,使用如下两行命令解决了这个报错问题:

protoc --go_out=. game.protoprotoc --go-grpc_out=. game.proto

5、执行上面的命令后,截图如下所示:

6、接下来,我们根据官方提供的gRPC用法,快速编辑代码进行测试,代码如下:

package mainimport (  "common-data/protobuf"  "context"  "fmt"  "google.golang.org/grpc"  "log")func main() {  conn, err := grpc.Dial("180.76.60.244:9901", grpc.WithInsecure())  if err != nil {    log.Fatalf("did not connect: %v", err)  }  defer conn.Close()  c := protobuf.NewStreamReqDataClient(conn)  request := new(protobuf.GreetingRequest)  request.Page = 1  request.Sign = "0f9273bf79fd4ffa"  request.TimeStr = 1652857605572  resp, err := c.SayHello(context.Background(), request)  if err != nil {    log.Fatalf("could not resp: %v", err)    return  }  for _, message := range resp.Message {    fmt.Println(message)  }}

7、迫不及待的想看下认证结果了,运行代码后结果报错了,截图如下:

总结:这个错误是找不到远程的protobuf.StreamReqData/SayHello方法,再次分析之前wireshark抓包的响应体,我们发现远程方法为:/challenge.Challenge/SayHello接下来我们在game_grpc.pb.go文件中配置远程方法!

8、在game_grpc.pb.go文件中,我们修改StreamReqData_SayHello_FullMethodName变量为/challenge.Challenge/SayHello,修改后截图如下所示:

9、代码修改完成后,我们再次运行代码,成功打印截图如下所示:

总结:此刻我们对比wireshark工具中response返回的数据和GoLand输出的数据能够一一对应,修改页数后,即可看到新的数字内容。本题对sign参数没有校验,考察的是gRPC的抓包和组包。我们将每页的数字进行相加后,第四题完美通关。

想看Python版本请移步我兄弟公众号:猿人学-app逆向比赛第四题grpc题解


五、思路总结

回顾整个分析流程,本次难点主要概括为以下几点:

  • 熟悉gRPC的基本使用

  • 构建proto格式文件

  • 熟悉使用tcpdump

  • 熟悉使用wireshark

  • grpc在go语言中的使用

本篇分享到这里就结束了,欢迎大家关注下期,我们不见不散☀️☀️😊

往期推荐

DX滑块验证码别乱捅!一不小心就反爬了。

某安网别逆向,一不小心就......

微信自动聊天机器狗,配置chatGPT,比Siri还智能!

被魔改md5加密坑了?某网站魔改md5加密逆向还原 (多种语言还原)

某游戏社区App | So层逆向分析

爬虫最快框架collyx,今天开源了...

某站弹幕Protobuf协议逆向分析  |  Go语言版本

作者简介

我是TheWeiJun,有着执着的追求,信奉终身成长,不定义自己,热爱技术但不拘泥于技术,爱好分享,喜欢读书和乐于结交朋友,欢迎扫我微信与我交朋友💕

分享日常学习中关于爬虫及逆向分析的一些思路,文中若有错误的地方,欢迎大家多多交流指正💕

文章来源:逆向与爬虫的故事

原文链接:猿人学逆向比赛第四题-gRPC题解 | Go版本

微信搜公众号:逆向与爬虫的故事;给我一个关注!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/22956.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT 扩展来自动化你的生活

除非您一直生活在岩石下,否则您可能知道 ChatGPT 如何改变业务以及我们的工作和沟通方式。您只需访OpenAI 的网站即可解锁 ChatGPT 的强大功能。 但是,如果我们不仅可以在其官方网站上使用 ChatGPT,还可以在 微信、Excel、Word 以及更多地方使…

chatGPT的到来,是否意味新时代的来临

chatGPT是一种人工智能技术驱动的自然语言处理工具,是一种基于语言对话场景的语言模型,它使用了Transformer神经网络架构,也是GPT-3.5架构,功能具备上知天文下知地理,还可以进行撰写邮件、视频脚本、文案、翻译、代码等…

windows的软件能在鸿蒙系统运行吗,如果鸿蒙系统能不能兼容windows的所有应用软件,会让你惊喜吗...

如果华为能够让鸿蒙系统兼容Windows系统上所有的应用,那华为鸿蒙系统可能已经超脱时代了。 你得知道在两个不同平台,硬件和内核不同的情况下,华为如果想兼容所有的平台,可能所花费的人力,财力会更巨大。我们知道鸿蒙系…

为什么鸿蒙内核是安卓,鸿蒙系统发布,为什么有人说其为安卓换壳?

2021年4月,鸿蒙系统内测版正式面向消费者开放,而我由于在校读书也变没有时间去专门去进行鸿蒙系统的深度体验只是回来后简单的体验一下 首先我要说的是-鸿蒙它……不是安卓套壳!!!我之前在评论区经常看见有人说鸿蒙就是…

华为p10 鸿蒙,全面上线!华为鸿蒙新消息传来,这是要彻底替换安卓

自从手机出现后,手机操作系统就掌握在少数几个厂商手中,在功能机时代,诺基亚几乎掌控了塞班系统,而微则掌握Windows mobie系统。 苹果开启智能手机时代后,手机系统主要被苹果和谷歌掌控。其中,苹果的IOS系统…

鸿蒙OS到底是不是Android套皮?(不多说,看源码!)

人生就像一场旅行,不必在乎目的地。在乎的,是沿途的风景以及看风景的心情。 #正文 某人曾说「没有调查就没有发言权」 最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵…

鸿蒙会干掉安卓吗?刚刚 ,首款搭载华为鸿蒙OS终端正式亮相!

点击“开发者技术前线”,选择“星标?” 13:21 在看|星标|留言, 真爱 编辑:可可| 来源:华为,创业邦 8月9日,也就是昨天下午,华为鸿蒙OS终于揭开了面纱。 8月10日下午,在华为开发者大…

谷歌失算了,华为的鸿蒙系统在海外市场撕开了一大口子

近日媒体报道指出华为手机在北方某国的销量暴涨三倍,成为该国出货量增速第一的手机品牌,带动鸿蒙系统用户激增,这也是鸿蒙系统在海外市场首次取得突破,对谷歌的安卓系统造成了新一轮的挑战。 由于众所周知的原因,谷歌对…

鸿蒙系统拆包,我已经拿到华为鸿蒙升级包,正在拆包分析鸿蒙与安卓的关系

我已经拿到华为鸿蒙升级包,正在拆包进行分析 可以说华为鸿蒙用在手机上的操作系统与微内核没有任何关系,华为的微内核是用在其他地方的。 images里有这些文件 boot.img ramdisk.img recovery.img等等 拆包后整体的文件 首先看一下init.environ.rc文件的内…

手机升级鸿蒙OS后,以前的安卓APP还能使用吗?

近日,华为正式发布了HarmonyOS 2.0.0,这宣告手机版的鸿蒙操作系统正式到来,很多小伙伴关心手机升级鸿蒙操作系统后,以前的安卓APP还能使用吗? 今天我们了解一下鸿蒙生态下APP,日后会以怎样的形式存在。 …

鸿蒙到底是不是安卓?

原文:https://www.toutiao.com/i6970301348873044516/ 这几天我的4台手机都升级到了鸿蒙。Mate X2、Mate 40 Pro、Mate 40 Pro、P40 Pro。使用起来,其实我觉得和之前没什么明显变化。偶尔看到微博上有人说流畅了,反正我没感觉。流畅了吗&…

鸿蒙OS到底是不是Android套皮?(少bb,看源码!)

来源:21ic电子网,头条我的小号等,本文作者观点不代表本网观点某人曾说「没有调查就没有发言权」最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵的不可开交。…

鸿蒙OS到底是不是Android套皮?

本文转载自不正经程序员 某人曾说「没有调查就没有发言权」 最近鸿蒙系统关注度好高,支持与反对、看好和看衰、「自主的全场景分布式系统」和「Android套壳」各执一词,吵的不可开交。 作为十八流码农,本着了解行业动态、体验HarmonyOS开发流…

鸿蒙系统展示了华为的野心,难怪谷歌害怕

华为已正式向它的手机用户推送鸿蒙系统,用户在升级为鸿蒙系统之后并不会有什么感受,表面的EMUI依然如故,而分析人士认为鸿蒙系统代表着华为的野心,这可能是导致谷歌不断对它采取措施的原因。 华为在鸿蒙系统的发布会上表示这是全球…

微信怎么不支持华为鸿蒙,微信迟迟不加入鸿蒙,华为为何不着急呢?

原标题:微信迟迟不加入鸿蒙,华为为何不着急呢? 其实任正非早有布局,该布局将取代微信,华为、小米相继入局,你说马化腾能不慌吗?在国家的牵头之下,三大运营商罕见达成了合作&#xff…

爆料称华为鸿蒙HarmonyOS 2.0陆续开源,是否为安卓“代码里见”

本文转载自 IT之家 华为上个月公布了开源版本的鸿蒙 OpenHarmony 1.1.0 LTS 版本,相比于 OpenHarmony 1.0 版本,1.1.0 LTS 版本新增 AI 子系统、电源管理子系统、泛 Sensor 子系统、升级子系统,及统一 AI 引擎框架。 近日,数码博…

华为鸿蒙到底是不是安卓系统套了个壳?

余承东在2月份宣布:鸿蒙将于4月份全面上线,果然没有食言 华为鸿蒙2.0来了,首批升级机型名单包括:Mate X2、Mate40以及P40系列。需要注意的是这次上线的鸿蒙OS依旧只是开发者测试版,还不是正式版本。另外花粉们必须前往…

智能电视可以安装鸿蒙操作系统吗,华为鸿蒙系统竟然支持安装第三方软件了?这再也不鸿蒙了...

前段时间华为以及荣耀都推出了自家的两款智能电视,华为智慧屏以及荣耀智慧屏两款电视,从发布至今就吸引了许多华为用户的喜爱,至今在各大电商平台也会偶尔出现断货的情况。 大家都知道,无论是华为智慧屏还是荣耀智慧屏&#xff0c…

为什么鸿蒙系统发布后,安卓工程师都开始慌了?

打从鸿蒙出来后,很多安卓工程师开始担忧,怕对自己工作产生影响。老王觉得这有点杞人忧天,与其担心是否会对安卓开发工程师有影响,不如去看一下自己能否抓住鸿蒙这个机会。 如果你认为他真能成事的话,如果你真想知道有…

巴别塔——问答平台调研

项目内容这个作业属于哪个课程2023 年北航软件工程这个作业的要求在哪里个人作业-软件案例分析我在这个课程的目标是了解软件工程的方法论、获得软件项目开发的实践经验、构建一个具有我的气息的艺术品这个作业在哪个具体方面帮助我实现目标对于“程序员是什么”这个问题有了一…