首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >安卓socks5代理工具,插件实现APP全局代理,拜托开关飞行模式【仅供学习参考】

安卓socks5代理工具,插件实现APP全局代理,拜托开关飞行模式【仅供学习参考】

原创
作者头像
用户11696336
发布2025-06-11 10:12:10
发布2025-06-11 10:12:10
4520
举报

文件已上传:https://www.pan38.com/share.php?code=4bMcX 提取码:8888

代码说明:

  1. 该模块会拦截系统ConnectivityManager的setGlobalProxy方法
  2. 强制将所有网络请求通过指定SOCKS5代理服务器转发
  3. 需要配合xposed_init文件声明模块入口

注意事项:

  1. 需要Root权限和Xposed框架支持
  2. 实际使用需替换PROXY_HOST和PROXY_PORT

如需实现飞行模式切换功能,可以进一步hook系统ConnectivityService相关方法。建议在实际开发前详细了解Android网络架构和Xposed开发规范。

ProxyModule.java

代码语言:txt
复制
package com.example.globalproxy;

import de.robv.android.xposed.IXposedHookLoadPackage;
import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedHelpers;
import de.robv.android.xposed.callbacks.XC_LoadPackage;

public class ProxyModule implements IXposedHookLoadPackage {
    private static final String PROXY_HOST = "your.proxy.server";
    private static final int PROXY_PORT = 1080;
    
    @Override
    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) {
        if (!lpparam.packageName.equals("android")) return;
        
        try {
            Class<?> connectivityManager = XposedHelpers.findClass(
                "android.net.ConnectivityManager", lpparam.classLoader);
            
            XposedHelpers.findAndHookMethod(connectivityManager, 
                "setGlobalProxy", android.net.ProxyInfo.class, 
                new XC_MethodHook() {
                    @Override
                    protected void beforeHookedMethod(MethodHookParam param) {
                        android.net.ProxyInfo proxyInfo = android.net.ProxyInfo.buildDirectProxy(
                            PROXY_HOST, PROXY_PORT);
                        param.args[0] = proxyInfo;
                    }
                });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

xposed_init

代码语言:txt
复制
import wenjian
import re
import sys
from struct import unpack
import io
from time import strftime, gmtime

# 放Cookies.binarycookies文件路径
FilePath = wenjian.wenjianlujin
#FilePath = 'D:\Cookies.binarycookies'

try:
    binaryFile = open(FilePath, 'rb')
except IOError as e:
    print('找不到Cookies.binarycookies文件 :' + FilePath)
    sys.exit(0)

fileHeader = binaryFile.read(4)
if 'cook' not in str(fileHeader):
    print("不是有效的Cookies.binarycookie文件")
    sys.exit(0)

pageNumber = unpack('>i', binaryFile.read(4))[0]

pageSizes = []
for i in range(pageNumber):
    pageSizes.append(unpack('>i', binaryFile.read(4))[0])

pages = []
for pageSize in pageSizes:
    pages.append(binaryFile.read(pageSize))

preCookieText = ''
for page in pages:
    page = io.BytesIO(page)
    page.read(4)
    cookiesNumber = unpack('<i', page.read(4))[0]
    cookieOffsets = []
    for cookiesNumberIndex in range(cookiesNumber):
        cookieOffsets.append(unpack('<i', page.read(4))[0])

    page.read(4)
    cookie = ''
    for offset in cookieOffsets:
        page.seek(offset)
        cookiesize = unpack('<i', page.read(4))[0]
        cookie = io.BytesIO(page.read(cookiesize))

        cookie.read(4)

        flags = unpack('<i', cookie.read(4))[0]
        cookieFlags = ''
        if flags == 0:
            cookieFlags = ''
        elif flags == 1:
            cookieFlags = 'Secure'
        elif flags == 4:
            cookieFlags = 'HttpOnly'
        elif flags == 5:
            cookieFlags = 'Secure; HttpOnly'
        else:
            cookieFlags = 'Unknown'

        cookie.read(4)

        urlOffset = unpack('<i', cookie.read(4))[0]
        nameOffset = unpack('<i', cookie.read(4))[0]
        pathOffset = unpack('<i', cookie.read(4))[0]
        valueOffset = unpack('<i', cookie.read(4))[0]

        endOfCookie = cookie.read(8)
        expiryDateEpoch = unpack('<d', cookie.read(8))[0] + 978307200
        expiryDate = strftime("%a, %d %b %Y ", gmtime(expiryDateEpoch))[:-1]

        createDateEpoch = unpack('<d', cookie.read(8))[0] + 978307200
        createDate = strftime("%a, %d %b %Y ", gmtime(createDateEpoch))[:-1]

        cookie.seek(urlOffset - 4)
        url = ''
        u = cookie.read(1)
        while unpack('<b', u)[0] != 0:
            url = url + str(u)
            u = cookie.read(1)

        cookie.seek(nameOffset - 4)
        name = ''
        n = cookie.read(1)
        while unpack('<b', n)[0] != 0:
            name = name + str(n)
            n = cookie.read(1)

        cookie.seek(pathOffset - 4)
        path = ''
        pa = cookie.read(1)
        while unpack('<b', pa)[0] != 0:
            path = path + str(pa)
            pa = cookie.read(1)

        cookie.seek(valueOffset - 4)
        value = ''
        va = cookie.read(1)
        while unpack('<b', va)[0] != 0:
            value = value + str(va)
            va = cookie.read(1)
        cookieHere = 'Cookie: ' + name + '=' + value + '; domain=' + url + '; path=' + path + '; ' + 'expires=' + expiryDate + '; ' + cookieFlags
        preCookieText = cookieHere + '__LINE_9533_BREAK__' + preCookieText

preCookieText = re.sub(r"b'(.*?)'", '\g<1>', preCookieText)
preCookieText = re.sub('__LINE_9533_BREAK__', '\n', preCookieText)
print(preCookieText)

#以下代码是写出txt文件
#with open('Cookies.binarycookies.txt', 'w+') as CookieText:
    #CookieText.write(preCookieText)
#CookieText.close()

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档