问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

通过hook connect 函数 实现 功能是否可行

发布网友 发布时间:2023-09-02 09:35

我来回答

1个回答

热心网友 时间:2024-06-26 14:58

在android系统中,可以使用iptables控制单个应用网络访问。在google code上有一个开源项目-droidwall就是基于iptables实现的。除了iptables可以实现控制单个应用网络访问外,还可以通过拦截应用中的connect函数,达到控制应用访问网络的目的。下面从几个方面分析android应用中connect调用流程为例来实现拦截connect实现网络禁用和ip过滤。(以下分析基于4.2源码)


1.android中网络访问流程


1)android系统中访问网络可以通过Socket.java、URL.java、HttpPost.java、HttpGet.java等关键类来访问网络资源。通过代码追踪,这些类访问网络资源最终需要通过native方式,调用linux系统下的socket函数访问网络。在android4.2源码中,java层访问网络得native方法定义在源码路径libcore/luni/src/main/java/libcore/io/Posix.java中(4.0之前的网络系统、文件系统的native方法是独立分开得,4.0之后组织在Posix.java中)。如下是Posix.java中的代码片段:

 public final class Posix implements Os {    Posix() { }    public native FileDescriptor accept(FileDescriptor fd, InetSocketAddress peerAddress) throws ErrnoException, SocketException;    public native boolean access(String path, int mode) throws ErrnoException;    public native void bind(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException;    ......    //对应linux下的connect系统调用    public native void connect(FileDescriptor fd, InetAddress address, int port) throws ErrnoException, SocketException; 

2)Posix.java中的native方法实现源码路径libcore/luni/src/main/native/libcore_io_Posix.cpp文件中,native   connect方法实现代码片段如下:

taticvoidPosix_connect(JNIEnv*env,jobject,jobjectjavaFd,jobjectjavaAddress,jintport)
{
    sockaddr_storagess;
    if(!inetAddressToSockaddr(env,javaAddress,port,&ss))
    {
        return;
    }
    constsockaddr*sa=reinterpret_cast<constsockaddr*>(&ss);
    (void)NET_FAILURE_RETRY(env,int,connect,javaFd,sa,sizeof(sockaddr_storage));
}

有上代码可知,java层connect最终功能由linux系统connect函数实现。


2.so注入


so注入可以参考古河大哥牛*的libInject(点击这里访问)。


3.拦截connect库编写


在connect中,获取传入的参数ip地址,根据需要把需要禁用的ip地址改为127.0.01.以下是我测试的拦截connect函数关键代码:

intnew_connect(intsockfd,conststructsockaddr*addr,socklen_taddrlen)
{
    LOGDD("HOOK
 ====>new connect****************");
    charip[128]={0};
    intport=-1;
    if(addr->sa_family==AF_INET)
    {
        structsockaddr_in*sa4=(structsockaddr_in*)addr;
        inet_ntop(AF_INET,(void*)(structsockaddr*)&sa4->sin_addr,ip,128);
        port=ntohs(sa4->sin_port);
        LOGDD("AF_INET  IP===>%s:%d",ip,port);
    }
    elseif(addr->sa_family==AF_INET6)
    {
        structsockaddr_in6*sa6=(structsockaddr_in6*)addr;
        char*ipv6=NULL;
        inet_ntop(AF_INET6,(void*)(structsockaddr*)&sa6->sin6_addr,ip,128);
        ipv6=strstr(ip,"f:");
        if(NULL!=ipv6)
        {
            strcpy(ip,ipv6+2);
        }
        port=ntohs(sa6->sin6_port);
        LOGDD("af_inet6
 IP===>%s:%d",ip,port);
    }
    else
    {
        returnold_connect(sockfd,addr,addrlen);
    }
 
    if(strcmp(ip,"115.23.20.178")==0)
    {
 
        LOGDD("%s
 ==>127.0.0.1",ip);
        structsockaddr_inmy_addr;
        intmy_len=sizeof(structsockaddr_in);
        bzero(&my_addr,sizeof(my_addr));
        my_addr.sin_family=AF_INET;
        my_addr.sin_port=htons(80);
        my_addr.sin_addr.s_addr=inet_addr("127.0.0.1");
 
        returnold_connect(sockfd,(constsockaddr*)&my_addr,sizeof(my_addr));
    }
    else
    {
        return  old_connect(sockfd,addr,addrlen);
    }
}

4.拦截connect函数功效


1)禁用应用网络访问。

2)过滤广告ip

3)禁用定位功能

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
白色T 恤如何搭配才能穿出优雅的韵味? 白色T 恤衫怎样搭配才能显得时髦又好看? 白色紧身正肩T 恤想要穿出休闲感,该如何搭配? 手机怎么连接笔记本电脑的wifi上网 电热水器为什么用着用着就没压力了 用什么拖地最干净又耐脏 爱奇艺会员的等级是怎么划分的? 爱奇艺星钻会员怎么开通 怎样才是正确的接吻呢 网页上鼠标点住右键拖动后出的蓝色线条是什么?干什么用的?为什么一松开... 电脑总是提示有DLP升级包,怎么办 最久的憋尿吉尼斯世界记录是多少天? 大学生毕业以后就一定有好工作吗? 微信余额突然多了1800,账单里面也没记录,怎么回事? 华为手机处理器哪种最好? ...不在了能进坟地吗?我听说三年以后才能进坟地入土,不知道是真的吗... 办理校园网业务具体有哪些要求? 大学校园网技术要求有哪些? 竞价推广出价多少合适 燃气灶有一个不通气怎么办 燃气灶一个灶不通气怎么办 ...还是带借记卡过去在atm上取钱,汇率的话,哪个更划算些? 借记卡和普通才ATM卡有什么区别?借记卡有什么用? 怎样才能创建同学标签? ...卡上有芯片的那种,还开通了网银,怎么没有给我U盾呢? 跳虫爬到身上会产卵吗? 微信小号 什么意思 是两个吗 可以同时登陆吗? 湖南立鼎新能源有限公司有没有享电充手机软件 享电充app赚钱是真的吗 雁门关详细介绍 儿童学民族舞技巧 方程豹真的要来了 新品牌在国内真的能有市场吗 最新国内瓷砖一线牌子有哪些? 清明节吃薄饼作文 这套咒语用来做描金的衣物装饰真的好好看 绝对值符号的运算规律是什么样? 通过hook connect 函数 实现 功能是否可行 请问工行的U盾能退吗 日历清单登陆途径 切茄子条的小技巧 复星联合健康保险的复星联合福特加重疾险可不可以挑选 ?有推荐吗... 我用360安全卫士9.1,木马查杀(全盘扫描), 新浪微博认证的条件 新浪微博认证教程 在当地找了一家网点代运营公司,请问需要注意哪些问题 代运营天猫店铺需要注意什么 ...把六万块钱提取出到农村商业银行卡成功扣钱了为啥没收到手机短信收... tfboys三个成员身高体重 现在TFBOYS组合三人分别多高? 华为儿童电话手表为什么不能拨号和通话?