浅析adb命令 - adb forward交互流程

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

命令:
adb forward tcp:6100 tcp:7100 // PC上所有6100端口通信数据将被重定向到手机端7100端口server上
or
adb forward tcp:6100 local:logd // 
PC上所有6100端口通信数据将被重定向到手机端UNIX类型socket上

通过adb forward我们可以接收手机端server[或者unix域socket]程序发出的所有数据,
并且可以用自己写的小程序向手机端server[或者unix域socket]发送我们自己的数据
[luther.gliethttp]
表示在PC的HOST端创建一个server监听6100端口,pc上的其它应用程序,比如:A,可以以client身份和6100端口server建立连接,
之后A发送的所有数据将透明传递到手机端监听7100端口的一个应用程序,比如浏览器程序
[luter.gliethttp].
代码流程如下:
1.在pc上执行adb forward tcp:6100 tcp:7100指令,该指令尝试连接5037端口,触发HOST回调函数ss_listener_event_func执行.
2.ss_listener_event_func将为该次连接创建一个local_socket,之后等待该local_socket数据
[luther.gliethttp],
3.当local_socket数据,即"host:forward:tcp:6100;tcp:7100",到来之后,将执行local_socket_event_func回调函数,读取数据之后交由smart_socket_enqueue==>handle_host_request
4.handle_host_request==>install_listener("tcp:6100", "tcp:7100", transport);
  创建server监听端口socket_loopback_server(6100, SOCK_STREAM);当有客户端连接该端口是执行listener_event_func回调函数
5.现在pc上我们写了一个自己的小应用程序B,和6100端口的server建立连接,于是HOST上的listener_event_func回调函数执行.

[c-sharp] view plain copy print ?
  1. static void listener_event_func(int _fd, unsigned ev, void *_l)  
  2. {  
  3.     alistener *l = _l;  
  4.     asocket *s;  
  5.     if(ev & FDE_READ) {  
  6.         struct sockaddr addr;  
  7.         socklen_t alen;  
  8.         int fd;  
  9.         alen = sizeof(addr);  
  10.         fd = adb_socket_accept(_fd, &addr, &alen); // 首先接受该连接   
  11.         if(fd < 0) return;  
  12.         gliethttp_server = create_local_socket(fd); // 为我们的小应用程序建立维护对象gliethttp_server   
  13.         if(gliethttp_server) {  
  14.             gliethttp_server->transport = l->transport;  
  15.             connect_to_remote(gliethttp_server, l->connect_to); // 发送"tcp:7100"到手机端,手机端将建立一个与7100端口server链接的gliethttp_client,作为   
  16.                                                  // 与HOST这里建立的gliethttp_server对象进行数据传输的手机端程序[luther.gliethttp]   
  17.                                                  // 如果成功连接之后,手机端adbd将返回"OKAY",进而gliethttp_server和gliethttp_client将绑定在一起   
  18.                                                  // gliethttp_server发送的数据将通过HOST的daemon直接传递给gliethttp_client   
  19.                                                  // gliethttp_client数据将通过手机的adbd直接发送给HOST的gliethttp_server,然后传递给我们的小程序B[lutehr.gliethttp]   
  20.             return;  
  21.         }  
  22.         adb_close(fd);  
  23.     }  
  24. }  
  25. void connect_to_remote(asocket *s, const char *destination)  
  26. {  
  27.     D("Connect_to_remote call /n");  
  28.     apacket *p = get_apacket();  
  29.     int len = strlen(destination) + 1;  
  30.     if(len > (MAX_PAYLOAD-1)) {  
  31.         fatal("destination oversized");  
  32.     }  
  33.     D("LS(%d): connect('%s')/n", s->id, destination);  
  34.     p->msg.command = A_OPEN; // 打开手机端"tcp:7100"端口   
  35.     p->msg.arg0 = s->id;  
  36.     p->msg.data_length = len;  
  37.     strcpy((char*) p->data, destination);   
  38.     send_packet(p, s->transport);  
  39. }  
 

在手机端output_thread线程将接收到的数据传递给t->transport_socket句柄,该句柄将调用transport_socket_events==>handle_packet
回调函数进一步处理我们的"tcp:7100"命令.
handle_packet==>gliethttp_client = create_local_service_socket("tcp:7100");创建维护对象gliethttp_client,
进一步执行socket_loopback_client("7100", SOCK_STREAM);尝试打开手机端的7100端口(这时手机端应该已经打开监听7100端口的server程序[luther.gliethttp].
之后create_remote_socket(p->msg.arg0, t);表示gliethttp_client从手机端7100端口server上接收到的数据将全部传递给
HOST端的gliethttp_server端口,进而传递给我们的小程序B
[luther.gliethttp].

 

Note:

回想以前同事的工作,看来Android端实现的是USB-NET。

ADB Forward遇到的问题总结 <br />最近在项目中发现adb forward在使用中会有问题,总结留待以后查看。<br /> <br />在Device中启动app,同时开启线程A,创建server socket监听PC连接,如果PC连接成功后,结束线程并关闭该连接,同时启动另一个app,同样开启线程B,创建server socket监听PC发送的数据。由于设计问题,PC在连接线程B的socket时,只发送一次数据并等待响应,此时经常会出现PC成功建立连接,但是发送数据时马上收到-1响应,表示线程B的socket并没有于PC连接成功 阅读详情

相关推荐

Android逆向分析平台搭建:Frida环境部署与实战指南

在移动安全领域,动态分析技术是理解应用运行时行为的关键手段。其核心原理在于通过代码注入和运行时监控,实现对目标应用内部逻辑的探查与干预。这项技术的工程价值在于能够帮助安全研究人员、开发者深入分析应用的数据流、加密算法和通信协议,从而应用于漏洞挖掘、恶意软件分析、协议逆向等场景。Frida作为当前主流的动态分析框架,以其跨平台、脚本化、高灵活性的特点,成为构建逆向分析平台的首选工具。本文聚焦于Android平台,针对Frida环境部署中的常见痛点,如版本兼容性、模拟器配置、真机Root等,提供了一套从控制端到

weixin_34195142的博客 322

Android adb forward转发TCP端口连接数据

Android adb的一个命令 : adb forward,该命令转发PC电脑上的端口数据到Android设备的一个端口。 adb forward tcp:18000 tcp:19000 上面的命令,即把PC电脑端TCP端口18000的数据转发到与电脑通过adb连接的Android设备的TCP端口19000上。换言之,假设现在PC端在端口18000绑定,并在该端口读写数据,将会被转发到An...

Zhang Phil 4万+

非ROOT环境下Frida Gadget重打包实战:移动安全动态调试必备技能

动态代码插桩技术是移动安全分析和应用逆向工程的核心手段,通过在运行时监控和修改程序行为,安全研究人员能够深入理解应用逻辑、发现潜在漏洞。Frida作为当前主流的动态插桩框架,其传统方案依赖ROOT权限的frida-server,但在实际企业测试、用户设备等非ROOT场景中存在严重局限。基于frida-gadget的重打包方案通过将微型Frida运行时嵌入目标应用内部,实现了在普通用户权限下的完整动态调试能力,这一技术突破使得安全测试能够覆盖更真实的设备环境。通过反编译APK、植入gadget库、修改smal

weixin_30765505的博客 730

安卓夜神模拟器配合ADB及drozer进行app渗透测试

网上目前我是没看到有成熟的相关文档,在自己踩了几个坑之后,将使用文档整理出。 首先下载夜神模拟器,这个不难,百度一下就能下载。 adb下载: 链接:https://pan.baidu.com/s/1SKu24yyShwg16lyIupO5VA 提取码:ih0i(来源于其它博主,我懒得自己上传,时效的话联系我) 安装:不需要安装,解压然后放到目录下就行,任意路径,比如d盘下。 dro...

网络安全领域优质创作者 1万+

adb forward的细节(1):原理概述

adb forward的细节(1):概述 本系列文章从adb forward tcp:11111 tcp:22222说起,介绍adb forward的一些细节,包括adb forward的相关代码,adb forward在drozer上的使用,以及如何利用adb forward开发一个PC端和手机端通信的工具。 本文是本系列文章中的第一篇,介绍adb forward的大致原理,目的是看完这篇之...

Abracadabra的专栏 6万+

Android 源码分析 - 调试 - adb (4 服务)

客户端 客户端逻辑主要是解析命令行,与主机服务端程序建立连接,然后请求连接到服务(adb_connect),输出服务的应答内容(read_and_dump)。 对于shell命令,需要另外创建一个线程从控制台标准输入读入数据,发送到远程shell服务(interactive_shell)。

luansxx的专栏 4799

app 模拟器抓包 burpsuite_浅析src的app漏洞挖掘

前言之前自学了安卓的漏洞挖掘知识,还在wsrc、bilisrc、asrc等提交了安卓app方面的安全漏洞,一直没有做笔记,现在就来总结一下学过的部分知识。用burpsuite实现app抓包点击Proxy——>Options里的add输入模拟器的ip和端口接着就是配置手机端,首先导出Burpsuite的CA证书。点击import/export CA certificate,选择第...

weixin_39812186的博客 455

Android Studio集成Scrcpy实现高效安卓投屏与调试

屏幕镜像技术通过将移动设备画面实时投射到电脑显示器,实现了跨设备视觉同步。其核心原理通常基于视频编码压缩与网络传输协议,在保证画质的同时降低延迟。这项技术的工程价值在于极大提升了开发调试、演示协作和自动化测试的效率,尤其适用于需要大屏展示复杂交互或多人协同的场景。本文聚焦于Android开发环境,深入探讨如何利用Scrcpy这一开源投屏工具,结合ADB调试桥与硬件编码技术,实现低延迟、可交互的安卓手机屏幕镜像。通过将其深度集成到Android Studio IDE中,开发者能够无缝进行UI调试、性能监控与操

weixin_30271335的博客 340

Godot引擎深度解析:从节点场景系统到2D游戏开发实战

游戏引擎是现代游戏开发的核心工具,它通过封装底层图形、物理和音频等复杂系统,为开发者提供高效的创作框架。其工作原理基于场景图、实体组件等设计模式,将游戏对象、行为和资源进行模块化管理。在技术价值上,优秀的引擎能大幅降低开发门槛,提升迭代效率,并支持跨平台发布。当前,开源游戏引擎因其灵活性和社区驱动,在独立开发和小型团队中愈发受到青睐。Godot作为一款轻量级开源引擎,凭借其独特的节点场景系统和内置的GDScript脚本语言,为2D/3D游戏开发提供了高效、可控的解决方案。本文将以一个完整的2D平台游戏项目为

weixin_30587927的博客 337

ANDROID: 超级好用的ADB FORWARD命令

之前,我们使用adb forward命令的时候,只是单纯地将设备中的某些TCP端口给forward出来,如我们最常用的gdb调试native的代码,会将设备的5039端口给forward出来,给gdb客户端访问。那么adb forward有什么更加强大的功能呢?我们先看一下adb命令中关于forward的一些帮助信息(看了一下,还有reverse命令,也一同列了出来): adb forward ...

omnispace的博客 2万+

Android adb socket 连接失败的问题

pc客户端通过adb forward tcp 与android app通信 场景:pc启动,能正常建立连接,当断开连接再次连接,偶现pc客户端无法与forward 的端口建立 socket连接,连接请求被拒绝,只要连接被拒绝并且在不kill-server的前提下永远无法再次连接上(在每次连接断开后会 remove forward,目前未验证这个是否是导致无法建立连接) 解决问题:每次断开连接后...

weixin_30485379的博客 923

adb forward实现

Android - adb forward实现PC和App的Socket通讯 口袋FPV 关注 2016.11.07 17:35* 字数 251 阅读 4157评论 3喜欢 2 PC端的XX助手和手机App的通讯原理: # 把PC端8000端口的数据, 转发到Android端的9000端口上. adb forward tcp:8000 tcp:9000 什么是转发

pan0755的博客 1389

HBuilder X 运行至于Android设备,报错创建ADB反向代理失败,当前使用的adb不支持wifi真机运行,请更换其他版本adb进行真机运行

故障排查方法五 : 打开任务管理器,把所有adb.exe 进程关闭,很多情况下都是因为一些其他软件占用了adb(我是用这个方法解决的)HBuilder X 出现一些问题对我来说已经见怪不怪,很多情况下重启都可以解决。检查ADB路径方法 1.点击上方导航栏工具选项卡 2.点击设置 3.点击运行配置。技巧:把输入法切换到英文输入法一直按键盘上的a健可以自动定位到a开头的进程。如果不是有意指定abd路径,把路径地址清空,因为为空是默认adb路径。我把HBuilder卸载了,到官网重新下载了最新版然后重新安装。

qq_56892518的博客 5192

adb tcp java_android的虚拟机在我使用adb forward tcp:6100 tcp:7100 之后运行第二个虚拟机的时候console出现错误提示...

Console:[2012-03-1618:21:26-Unexpectederrorwhilelaunchinglogcat.Tryreselectingthedevice.]EOFjava.io.IOException:EOFatcom.android.ddmlib.AdbHelper.read(AdbHelper.java:643...Console:[2012-03-16 18:21:26...

weixin_42136826的博客 214

解决adb forward转发只能本地localhost访问的问题

解决adb forward转发不支持非localhost请求的问题

qq_19480143的博客 3941
上一篇: ASP.NET2.0 Provider模型(上)——原理、模型与分析
下一篇: Android Compatibility Test Suite
zirconsdu
博客等级 码龄20年 186粉丝 61原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值