V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qw30716
V2EX  ›  程序员

Android 应用通过代码实现拦截本应用内的所有网络请求流量,同时可以修改请求信息,例如请求头,请求体,然后转发的第三方 jar 包或者其他的方法,求推荐。

  •  
  •   qw30716 · 2017-02-24 09:20:44 +08:00 · 11177 次点击
    这是一个创建于 2833 天前的主题,其中的信息可能已经有所发展或是发生改变。
    目前我经过查找资料发现:有三种方式可以实现拦截某个 APP 网络请求,但是都有各种局限性。
    1.Android 内置 VPNservice :通过虚拟网卡实现拦截,有系统弹窗提示,用户点击确认才生效;
    2.tcpdump 等 jar 包:需要 root 手机才能实现抓包功能
    3.代理拦截:基于 Netty 、 browsermob-proxy 拦截,但是需要手动设置 WiFi 代理,如果为 3G , 4G 网络则不可行
    所以我想请教一下,各位还有没有其他方式拦截网络请求,不需要用户操作,不需要手机 root ,不需要手动设置代理等限制的方法?或者给个思路也行
    17 条回复    2017-02-24 21:07:00 +08:00
    ahjsrhj
        1
    ahjsrhj  
       2017-02-24 09:32:10 +08:00
    okhttp 的话可以使用拦截器, https://github.com/jgilfelt/chuck
    但是好像不符合你的需求- -
    感觉你这种需求用途很微妙啊
    qw30716
        2
    qw30716  
    OP
       2017-02-24 09:35:14 +08:00
    感谢你的回答,但是不能使用任何请求框架拦截,用途其实很正当的,主要用于加固的时候拦截网络流量
    honeycomb
        3
    honeycomb  
       2017-02-24 09:38:06 +08:00 via Android
    facebook 前两天开源了一个调试框架,据说可以绕过证书绑定,可以看看。
    figofuture
        4
    figofuture  
       2017-02-24 09:39:51 +08:00
    okhttp
    qw30716
        5
    qw30716  
    OP
       2017-02-24 09:39:59 +08:00
    @honeycomb 什么开源框架,名称是啥?
    qw30716
        6
    qw30716  
    OP
       2017-02-24 09:43:50 +08:00
    其实我的意思是不管你使用什么请求框架,例如 okhttp 也行,我通过一些第三方 jar 或者直接在底层 socket 方法拦截,然后拦截到 http 请求,就可以修改请求头,请求体信息,一些网络嗅探 APP 的原理
    LancerXin
        7
    LancerXin  
       2017-02-24 10:12:27 +08:00
    或许可以尝试用反射修改 sdk 某些关键类实现,比如 HttpUrlConnection Socket 等..

    只是个思路...
    qw30716
        8
    qw30716  
    OP
       2017-02-24 10:44:37 +08:00
    @LancerXin 如果可以直接修改 socket 的话是比较好的,我觉得如果有方法,应该是比较偏向于底层,从网卡驱动入手
    xingda920813
        9
    xingda920813  
       2017-02-24 13:47:32 +08:00
    OkHttp 拦截器. Request req = chain.request(); Response res = chain.proceed(req); 可以自由的对 Request 和 Response 进行修改.
    heiher
        10
    heiher  
       2017-02-24 13:57:34 +08:00 via Android
    能够有 root 权限的话还是用 iptables REDIRECT 来做,我就是用它来做全局或按应用的透明代理服务。
    yrom
        11
    yrom  
       2017-02-24 14:00:36 +08:00
    我猜应该没有,或者有很难绕过的限制,因为如果有的话,各种统计类的 Android 第三方 sdk 早带了。。
    youxiachai
        12
    youxiachai  
       2017-02-24 14:01:35 +08:00
    感觉 lz 是想做改包....

    静默拦截网络请求....想想就带感...
    heiher
        13
    heiher  
       2017-02-24 14:02:02 +08:00 via Android   ❤️ 1
    https://github.com/heiher/hev-socks5-tproxy

    这是透明代理实现的代码,它创建一个 tcp socket 用于接受重定向过来的 tcp 连接,一个 udp socket 接收重定向过来的 dns 请求,加上 socks5 协议头,转发 socks5 server 。拿走,不谢。:)
    qw30716
        14
    qw30716  
    OP
       2017-02-24 14:14:32 +08:00
    静默拦截网络请求,其实也是差不多这个意思了,我刚发现有个应用叫安信手机证券很牛逼,你自己设置了代理以后根本就抓不到这个 APP 请求时的包,它直接抓到了一个 127.0.0.1 的代理,大家有兴趣可以研究一下
    qw30716
        15
    qw30716  
    OP
       2017-02-24 14:39:36 +08:00
    @heiher 你的这个透明代理实现的代码是需要 root 手机才行吗
    heiher
        16
    heiher  
       2017-02-24 14:46:11 +08:00 via Android
    @qw30716 是的,不用 root 也不用 vpn service 能搞定?找到方法也告诉我一下哈。
    linhua
        17
    linhua  
       2017-02-24 21:07:00 +08:00
    首先,你要想清楚,你这个只是针对 HTTP 吗? HTTPS 就是用来防中间人的,你根本就看不到里面的 HTTP 请求。而且有的 APP 根本就不认 WiFi 代理,像 twitter
    https://github.com/phuslu/goproxy/issues/1106
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3134 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 13:30 · PVG 21:30 · LAX 05:30 · JFK 08:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.