惊呆了:AI改了三个字节,修好了一个跑不起来的adb

我在一个老版本ubuntu上运行定制版adb,报下面的错误:

text 复制代码
$ adb -host connect 30.207.94.56:61101
* daemon not running. starting it now on port 6037 *
error: could not install *smartsocket* listener: Address family not supported by protocol
ADB server didn't ACK
* failed to start daemon *
error: cannot connect to daemon

报错信息丢给AI,AI很快诊断出是因为adb在创建server时使用了AF_INET6(IPv6),而我的ubuntu不支持IPv6。

为了解决这个问题,它首先查看了adb的help信息,看能不能设置只监听IPv4,没成功。

接下来它尝试写个动态库interceptor.so,动态库中hook系统函数socket和bind,强制使用IPv4,以LD_PRELOAD=./interceptor.so adb方式运行,这个思路是对的,但是用起来有点麻烦,而且要在我的ubuntu上下载Android交叉编译工具链,被我阻止了。

我以为它会就此放弃,哪想到它放大招了。

它直接反汇编了adb可执行程序,找到定义sockaddr的地方、调用函数socket和bind的地方:

文件偏移 指令 原始值 修改值 效果
0xfdcea movw $0xa,0x10(%rsp) 0x0a 0x02 sockaddr family: AF_INET6→AF_INET
0xfdd05 mov $0xa,%edi 0x0a 0x02 socket() domain: AF_INET6→AF_INET
0xfdd46 mov $0x1c,%edx 0x1c 0x10 bind() addrlen: 28→16

然后通过下面的脚本,改了我的adb可执行文件:

python 复制代码
with open('~/adb', 'rb') as f:
    data = bytearray(f.read())

data[0xfdcea] = 0x02   # AF_INET  ← sockaddr family: AF_INET6(10) → AF_INET(2)
data[0xfdd05] = 0x02   # AF_INET  ← socket() domain: AF_INET6(10) → AF_INET(2)
data[0xfdd46] = 0x10   # sizeof(sockaddr_in) ← bind() addrlen: 28 → 16

with open('~/adb', 'wb') as f:
    f.write(data)

我简直惊呆了,打死我也想不出这种解决方法,关键是修改后的adb在这个ubuntu上还真能用了!

Linux平台的可执行文件没有完整性(防篡改)保护,所以修改后的文件能运行。

相关推荐
MayBaymax2 小时前
Spring AI Alibaba Graph 快速上手:黑板、节点、边
java·spring·ai·ai编程
小马过河R2 小时前
开篇|3天从0到1入门AI应用开发
人工智能·语言模型·llm·agent·ai编程·deepagent
zhangfeng11334 小时前
昇腾 950PR/950DT 新增regbase 编程方式和MemBase SIMD/SIMT 混合编程模型
人工智能·华为·ai编程·npu·cann
小虎AI生活4 小时前
GEO 实战,中小企业如何用五平台体检抢下 AI 推荐位,一份可复现的清单
ai编程
hongyangcao5 小时前
12.8万科技岗位被“重组“,预算流向了算力
人工智能·经验分享·ai编程
自律懒人5 小时前
大模型内生护栏 SingProbe 实测:解码开销不到 0.5%,29 个开源模型边生成边查风险
ai编程
七牛云行业应用5 小时前
最新!MiniMax Code CLI 开源:一条命令安装,支持自带模型
ai·agent·ai编程
flash俊杰6 小时前
多模态视频理解工程:抽帧策略、帧预算与 Prompt 组装
ai编程
桃西西呀7 小时前
一句话换个词序意思就全变,大模型是怎么读出门道的?手搓一个 Transformer 看清楚
人工智能·llm·ai编程
flash俊杰7 小时前
AI 分段引擎与自动剪辑决策:从语义片段到时间线草稿的映射
前端·ai编程