2000块的活嫌低?这个 6 位数的项目,你可不能错过哟!

8 篇文章 0 订阅
2 篇文章 0 订阅

2000块钱嫌低?这个6位数的项目,你可不能错过,关注有好礼。

最近写了一篇“接了一个2000块钱的活,大家看看值不值”的文章,发现流量和大家互动的热情出奇的高,可能是跟有钱有关的缘故,大家不是奔着技术来的,更多是想看看这个2000块钱的项目到底是啥,到底值不值这个价?

接了一个2000块的小活,大家进来看看值不值,附源码-CSDN博客

先别管这个项目他到底值不值吧,至少呢,这篇文章给我的公&号至少博得了100个新粉丝,CSDN更是冲击到了地区榜前3,哈哈,有点小意外。真的非常感谢大家!希望大家继续关注和互动,增加我输出的动力(另外别忘了关注我的公&号:新质程序猿,会有额外惊喜,那里也可以直接找到我,CSDN 私信只能回复 5 个陌生人/天)。

为了迎合大家的口味呢,今天我又把我古董级的,曾经为我挣了 6 位数的小项目分享给大家,今天先不介绍之前具体做了啥,纯粹是先把这个重量级的小项目先分享出来,今天只讲技术,后续我再分享如何挣钱的(您的留言互动关注是我持续输出的源泉哟,让我找到成就感,才更有动力)。

想必大家都知道 fiddler 吧?就是一款流行的抓包工具(如果不知道的话,可以留言求分享,后续也可以简单介绍一下)。

今天我要分享给大家的不是 fiddler, 而是通过 Java 实现了 fiddler 部分功能的一个开源项目:

https://github.com/bytesops/jProxyicon-default.png?t=N7T8https://github.com/bytesops/jProxy

项目介绍

jProxy 是一个 JAVA 编写的 HTTP 代理服务器类库,支持 HTTP、HTTPS、Websocket 协议,并且支持 MITM(中间人攻击大家可以自己搜一下,HTTPS劫持算其中的一个具体实现,直白点理解就是:你原本想和小花说“我爱你”,但是一天,小强带着假发来到你身边,冒充小花,你就把这句话告诉了小强,然后小强又带上面具冒充你,跟小花说了一句“我讨厌你”,然后,就没有然后了),可以对 HTTP、HTTPS 协议的报文进行捕获和篡改。

熟悉 fiddler 的都知道 fiddler 可以截获 https 的内容,本项目的价值区别于 fiddler 的点就是可以实现程序代码介入 http 请求的全过程,至于能做什么,大家可以自由想象,欢迎留言区互动。

为了把技术讲的清楚一点,还是从网上抄点干货吧(抄书不算抄,至少我筛选过的,如有错误,大家赶紧指正)。

HTTPS协议

首先来回顾下https协议的ssl握手(看不懂的也可以跳过,不过建议好好看一下,面试很有用)

简单叙述下ssl 握手,上面只是单向验证过程(大多我们访问网站都是单向的,除非一些银行网站或服务器之间会用到双向验证)

  1. 客户端(左侧)向服务器发出ssl握手,发送client-random 随机数

  2. 服务器返回 ssl 证书和 server-randon 随机数

  3. 客户端校验 ssl 证书,校验通过,再生成一个premaster-secret 随机数用服务器证书里的公钥加密发送,这个时候客户端已经可以通过三个随机数算出对称加密的密钥了

  4. 服务器用私钥解密 premaster-secret,也拿到了三个随机数算出对称加密的密钥

  5. 两边都用算出来的对称密钥进行报文加密和解密,传输中的信息都是密文

注意第 3 步非常关键,ssl 证书是采用信任链的方式来验证 ssl 证书是否有效,在计算机中都会内置好许多受信任的 CA 证书(见下图 电脑查找设置- 管理计算机证书 ),而只有受信任的 CA 证书签发的 ssl 证书来访问浏览器才会验证通过,不然就会提示证书不安全。

计算机内置的,我们大体上认为是权威的(不过也发生过 权威机构 证书泄露的事件),那么我们是不是可以伪造一个呢?现在有请小强。

自定义根证书

我们可以借助 openssl 自签一个 ca 证书,并安装到自己的电脑里,并且选择信任它(相信小强是小花)。

注:如果为了快速验证上面的小项目,不必自己生成,可以直接使用项目里的 ca.crt 安装,下面了解即可,如遇到项目里的 ca 证书过期了,可以尝试自行生成,也可以留言,我来更新。

# key 的生成,生成 RSA 密钥,openssl 格式,2048位强度,ca.key 是密钥文件名
openssl genrsa -out ca.key 2048

# crt 的生成,通过-subj 选项可以自定义证书的相关信息
openssl req -sha256 -new -x509 -days 365 -key ca.key -out ca.crt \
    -subj "/C=CN/ST=GD/L=SZ/O=byteops/OU=study/CN=jProxyRoot"

生成了 ca.crt 即 ca 证书,双击可以安装(优先安装项目里的,方便演示

HTTPS拦截

安装证书后,需要重启一下计算机,不然证书可能有缓存,浏览器不识别。 重启后,执行项目里的

https://github.com/bytesops/jProxy/blob/main/src/main/java/com/github/bytesops/jproxy/HttpProxyServerApp.java

main函数,启动项目

/**
 * 测试 main
 */
public class HttpProxyServerApp {

    public static void main(String[] args) {

        System.out.println("start proxy server");

        HttpProxyServerConfig config = new HttpProxyServerConfig();
        config.setHandleSsl(true);
        new HttpProxyServer()
                .serverConfig(config)
                .proxyInterceptInitializer(new HttpProxyInterceptInitializer() {
                    @Override
                    public void init(HttpProxyInterceptPipeline pipeline) {
                        pipeline.addLast(new FullResponseIntercept() {

                            @Override
                            public boolean match(HttpRequest httpRequest, HttpResponse httpResponse, HttpProxyInterceptPipeline pipeline) {
                                // 在匹配到百度首页时插入js
                                return HttpUtil.checkUrl(pipeline.getHttpRequest(), "^www.baidu.com$")
                                        && HttpUtil.isHtml(httpRequest, httpResponse);
                            }

                            @Override
                            public void handleResponse(HttpRequest httpRequest, FullHttpResponse httpResponse, HttpProxyInterceptPipeline pipeline) {
                                // 打印匹配到的 host
                                String host = httpRequest.headers().get(HttpHeaderNames.HOST);
                                System.out.println(host);
                                // 修改响应头和响应体
                                httpResponse.headers().set("handle", "edit head");
                                httpResponse.content().writeBytes("<script>alert('hello jproxy')</script>".getBytes());
                            }
                        });
                    }
                })
                .start(9999);
    }
}

开启代理

启动项目后,需要开启代理才能拦截到请求(目前还做不过 fiddler 的自动,也欢迎大家提 PR 一起改进),代理开启也很简单,电脑网络配置,代理,手动配置代理(记得点保存哟):

访问网站

打开浏览器,访问百度首页:

https://www.baidu.com

即会弹出:

F12 打开控制台,也可以刷新页面,可以看到 响应头 中多了一条记录:

关注有后续

大家记得三连哈,我的博文绝不会设置收费或者关注才能查看全文的,分享你就好好分享,耍什么小伎俩啊(虽然说涨粉确实效果不错,但我真的觉得恶心),大家愿意关注就关,不愿意拉倒。

另外,也希望大家多多关照我的公&号(自愿):新质程序猿,上面的推文可能更实时,不迷路,不强求,不过我准备的有福利,大家可以领完再取关都行(小心我托梦打你,哈哈哈)。

这个小项目就分享到这里吧,后续再具体介绍我是如何通过这个项目挣到 6 位数的,大家也可以尝试互动起来,说不定有好项目可以一起做。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值