diff --git "a/blog/develop/\346\250\241\346\213\237\350\257\267\346\261\202 \345\215\217\350\256\256\345\244\215\347\216\260\346\226\271\346\241\210.md" "b/blog/develop/\346\250\241\346\213\237\350\257\267\346\261\202 \345\215\217\350\256\256\345\244\215\347\216\260\346\226\271\346\241\210.md" index cf3411fe..5a7e4b9f 100644 --- "a/blog/develop/\346\250\241\346\213\237\350\257\267\346\261\202 \345\215\217\350\256\256\345\244\215\347\216\260\346\226\271\346\241\210.md" +++ "b/blog/develop/\346\250\241\346\213\237\350\257\267\346\261\202 \345\215\217\350\256\256\345\244\215\347\216\260\346\226\271\346\241\210.md" @@ -8,32 +8,24 @@ keywords: [http, protocol] description: 模拟请求/协议复现 最佳实践方案 --- -前段时间看了别人的一个写了羊了个羊刷次数网页版,但是 js 代码做了混淆,然后我的那个解混淆的工具还没适配上,短时间内还原不了。但由于是网页版,所以抓包数据还是能看到的,于是就准备复刻了一个(其实就没有也照样能写出来,因为确实没啥难度)。 +前段时间看了别人的一个写了羊了个羊刷次数网页版,但是 js 代码做了混淆,然后我的那个解混淆的工具还没适配上,短时间内还原不了。但由于是网页版,所以抓包数据还是能看到的,于是就准备复刻了一个。 可在此体验:[7y8y.vercel.app](https://7y8y.vercel.app) (当然由于官方改动,现在功能已经失效了,但看看页面到不成问题,可能需要科学上网) 原本我是不考虑写的,但是这背后所涉及到的技术以及技术框架我是特别想聊聊,加之以后我也有很大的可能会再写一个类似的刷 xx 的网页版,所以就考虑写一个类似的模板以便后续应用需求。 -相关模板:[https://github.com/kuizuo/protocol](https://github.com/kuizuo/protocol) - -与此同时,我也快有半年的时间没碰**协议复现**(网络通信协议重新实现,后文都简称协议复现)。我更喜欢说这个词,也有的人会说**模拟请求**,对应的关键词可能有 post 请求,抓包,发包,爬虫等等,但大致的意思是**抓取请求数据包,然后脱离宿主机(浏览器,手机),将抓取的数据包重新发送一遍**。 +与此同时,我也快有半年的时间没碰 **协议复现**(网络通信协议重新实现,后文都简称协议复现)。我更喜欢说这个词,也有的人会说**模拟请求**,对应的关键词可能有 post 请求,抓包,发包,爬虫等等,但大致的意思是**抓取请求数据包,然后脱离宿主机(浏览器,手机),将抓取的数据包重新发送一遍**。 你也可以理解成爬虫,但和爬虫相比,要做的不只是爬取数据,而是要基于某些请求包(或者说调用他人不提供的 api 接口,即爬取),来实现一定的功能。比如登录协议,签到协议,抢购协议,游戏封包等等,然后不依靠宿主机(即不用登录浏览器或者应用设备)就能实现诸如登录,签到等功能(在后台记录是有的)。因为这些都是基于网络通信协议的,只要抓包(抓取数据包),然后使用编程提供的网络请求模块来模拟请求,达到重新发包,重新请求的目的。在网页中有 http 协议,websocket 协议,而游戏中有相应的与游戏服务器对应的协议,邮件短信文件又是不同的协议(这里的协议都叫网络通信协议),所以我个人更倾向于称之为协议复现。 所以要做协议复现,那基本上有一定的逆向功底和爬虫能力,还有网络通信协议相关的知识了。此次的开发也算是回顾下这些相关技术了。 -:::danger - -注:**本项目仅用于学习研究使用,请勿将本项目的任何内容用于商业或非法目的,否则后果自负。** - -::: - -在这里容我多废话几句,讲一个我之前的开发经历,可以说这个开发经历算是这篇文章的由来。 - ## 小区开门应用 +在这里容我多废话几句,讲一个我之前的一次开发经历,可以说这次的开发经历算是这篇文章的由来。 + ### 应用需求 在之前住的一个小区,有个门禁系统,需要安装一个开门的 app(后文都称开门 app),然后注册一个账号到物业那边登记为户主或家庭成员。 @@ -42,29 +34,27 @@ description: 模拟请求/协议复现 最佳实践方案 于是我想的是将接口数据“偷”了过来,将大门列表展示在前端上,然后点击对应的大门,然后将大门 id 转发给原 app 的服务器,就实现了开门的效果,也就是这个小区开门的网页版的核心逻辑。 -大致界面如下,展示小区的大门,点击即可开门(远程) +当时设计的界面大致如下,展示小区的大门,点击即可远程开门。 ![](https://img.kuizuo.cn/image_Zv0hXU8h1j.png) -因为是网页版的,所以只需要在浏览器打开对应的网址,点击大门即可(主要还是这个 app 不提供桌面快捷方式,点击这个 app 还需要观看首屏广告,手机网页浏览器提供某个网站的快捷打开) 。此外他人也不用到物业登记,就能开门,对于一些朋友或者住户来说,省去了物业登记的繁琐。 +因为是网页版的,所以只需要在浏览器打开对应的网址,点击对应的大门按钮即可。而开发的初衷是这个 app 不提供桌面快捷方式,点击这个 app 还需要观看首屏广告,此外他人也不用到物业登记,就能开门,对于一些朋友或者住户来说,省去了物业登记的繁琐。 不过这个软件还是有挺多要注意的点:首先就是鉴权了,由于我当时主要目的是为了我自己和身边朋友,网站也没有特意发布到互联网上,所以就没做鉴权相关的,不然正常情况下是一定要做鉴权和调用记录的,以及 ip 白名单的。否则搞不好登录原 app 的账号直接因为调用过于频繁直接给禁用了;最主要的安全问题,这里的安全可不只是网站的安全,而是现实的安全。想想如果有一个可以随意进出小区大门的程序,那么任何人都可以进入这个小区,小区的公共设施,业主生活质量安全等等谁来保障?而且最主要所绑定的账号还是我的,万一小区真出了事,那么我的责任将会非常大。 综合考量,这个应用是绝对不可能大肆发布到网上的。个人自用问题还是不大,因为这种调用量对服务器几乎没有什么压力。 -我的初衷也仅仅只是因为作为开发者的我,**降低了我点击开门的频率,免去登记的繁琐。** - 在当时我甚至想基于手机的 GPS 定位,来实现靠近小区自动开门。真羡慕当时我的一堆想法,但也遗憾当时没有去尝试实现这一个想法。 ### 开发 -这个应用就大致初衷就说到这了,接下来我要说说开发,这也就是本文说要的重点内容了。下面是我当时的项目结构: +这个应用的起源就说到这了,接下来我要说说其开发形态了,这也就是本文说要的重点内容了。下面是我当时的项目结构: ![](https://img.kuizuo.cn/image_7J7PhsdaQy.png) 不难看出,这是一个前后端分离的项目,其中前端使用 uniapp 来开发一套代码多端运行,并且使用的是 Hbuilder 编辑器来开发。而后端就是常规的 Node 后端服务,使用的是 Express 框架。 -技术栈就介绍完毕,这里我要介绍整个流程。 +技术栈就介绍完毕,这里我要介绍整个开门实现流程。 就说说获取大门列表和开门的两个接口请求: @@ -112,12 +102,12 @@ router.get('/open', async (req, res, next) => { 这里的代码也仅仅只是作为演示,实际代码可不止这么简单,因为还需要涉及到登录,加密等等环节。 -我的前端页面访问地址是 [http://localhost:5000](http://localhost:5000),我需要 [http://localhost:3000/api/list](http://localhost:3000/api/list) 和 [http://localhost:3000/api/openDoor](http://localhost:3000/api/openDoor)。 +我的前端页面访问地址是 [http://localhost:5000](http://localhost:5000),我需要访问后端接口 [http://localhost:3000/api/list](http://localhost:3000/api/list) 和 [http://localhost:3000/api/openDoor](http://localhost:3000/api/openDoor)。 -可能有些人会问,为啥要后端服务,不直接在前端向开门 app 的服务器发送请求,然后将响应直接渲染到前端上。比如直接在前端代码中写 openopenDoor 函数 +对于不了解 web 开发的人员可能会问为啥要后端服务,不直接在前端向开门 app 的服务器发送请求,然后将响应直接渲染到前端上。比如直接在前端代码中写 openopenDoor 函数 ```javascript -async function openDoor(id) => { +async function openDoor(id) { // 模拟请求开门 let url = `https://xxx.com/api/openDoorControl` @@ -131,11 +121,11 @@ async function openDoor(id) => { }) ``` -这个疑惑在我初次想使用 web 端来实现协议复现的时候也考虑过,但浏览器不支持。这也是我下面所要说的 +这个疑惑在我初次想使用 web 端来实现协议复现的时候也考虑过,但浏览器为了安全考虑而不支持。这也是我下面所要说的 ### 同源策略 跨域 -一般用户的浏览器是有非常强的页面安全策略的,这里要说的就是同源策略,更细分点就是跨域,比如说 kuizuo.cn 这个站点,想要向 baidu.com 发送请求,请求是能够正常发送过去的,但是 kuizuo.cn 这个站点是接收不到任何数据。因为 kuizuo.cn 和 baidu.com 根本不是同一个网址,专业点说就是不同源,这种不同源的请求在浏览器,称为跨域请求。 +一般用户的浏览器是有非常强的页面安全策略的,这里要说的就是同源策略,更细分点就是跨域。比如说 kuizuo.cn 这个站点,想要向 baidu.com 发送请求,请求是能够正常发送过去的,但是 kuizuo.cn 这个站点是接收不到任何数据。因为 kuizuo.cn 和 baidu.com 根本不是同一个网址,专业点说就是不同源,这种不同源的请求在浏览器,称为跨域请求。 ![](https://img.kuizuo.cn/image_QLEJFPTkb6.png) @@ -148,13 +138,13 @@ access-control-allow-methods: GET, POST, PUT, DELETE, OPTIONS access-control-allow-origin: * ``` -浏览器会直接拒绝接收响应,但浏览器确实将请求发送给了服务端(打开控制台中的网络是看不到该请求的响应结果的)。 +浏览器会直接拒绝接收响应,但**浏览器确实将请求发送给了服务端**,并且你打开控制台中的网络是看不到该请求的响应结果的。 跨域限制只存在于浏览器端,在其他环境下是不存在,请求都是能够发送出去,并且是可以接收到的。所以说为什么不在前端直接向原应用程序的服务器发送请求,罪魁祸首也就是**同源策略**。 ### 不支持修改协议头 -像 origin,reference,user-agents 等协议头是无法修改的 +像 origin,reference,user-agents 等协议头在浏览器是无法修改的 ```text origin: https://xxx.com @@ -162,7 +152,7 @@ referer: https://xxx.com/api/test user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42 ``` -而有些请求是会效验你的设备信息,来源地址,这些内容在浏览器中都写在协议头中,且浏览器不支持修改。使用浏览器来发送数据,无疑就是告诉服务器我是浏览器发送的。服务器判断来源不是自家的域名,那就直接拒绝响应。像防盗链就是检测 referer 。 +而有些请求是会效验你的设备信息,来源地址,这些内容在浏览器中都写在协议头中,且浏览器不支持修改。使用浏览器来发送数据,无疑就是告诉服务器我是浏览器发送的。服务器判断来源不是自家的域名,那就直接拒绝响应,像防盗链就是检测 referer 。 ## 方案 @@ -174,7 +164,7 @@ user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 这样的应用会有以下几点缺陷: -- **易破解**:由于你的大部分核心逻辑最终都会进行编译打包成 exe,如果会些破解技术,恰好你不做任何防护手段,要破解你的程序非常容易。所以也就为什么很多 exe 程序(尤其是易语言)会带有 .vmp.exe 也就是 vmp 加壳,让程序很难被分析与破解。并且我就可以开启系统抓包,就可以看到应用程序模拟发送的请求数据包是什么。 +- **易破解**:由于你的大部分核心逻辑最终都会进行编译打包成 exe,如果会些破解技术,恰好你不做任何防护手段,要破解你的程序非常容易。所以也就为什么很多 exe 程序(尤其是易语言)会带有 `.vmp.exe` 后缀也就是 vmp 加壳,让程序很难被分析与破解。并且我就可以开启系统抓包,就可以看到应用程序模拟发送的请求数据包是什么。 - **不易跨平台**:大多数的协议复现都是 exe 桌面应用程序,虽然也有安卓,但一般比较少。对于非 windows 用户或者说手头不方便用电脑的用户就很难体验到,并且还要特意安装一个应用,应用程序更新也需要重新安装。 @@ -236,21 +226,21 @@ location /api/ { 最终选择那种开发方式还是取决对应的应用场景,没有绝对的方案,具体考虑哪种方案是需要考虑用户,代码安全,请求量,是否维护来考量了。 -写到这,可能对大多数人而言还是不懂,也很正常,因为这些内容都不算属于传统开发的范畴,甚至可以说是做 hui 产的利。 +写到这,可能对大多数人而言还是不懂,也很正常,因为这些内容都不算属于传统开发的范畴,甚至可以说是做 hui 产的利器。 -## SSR 框架 +## 全栈框架 我非常希望使用到浏览器的跨平台性,即多端运行,用户的设备只需要有一个浏览器能打开网页就能体验到。(这其实也算是我为什么学 web 开发的初衷了) 但是在一开始所介绍的小区开门应用中,这样的开发体验其实并不友好。因为我既要编写前端应用还要编写后端服务,相当于两个项目。同时部署应用和传统部署没有特别大的区别,都需要一台服务器,很多时候都是浪费在部署上。 -而 SSR 框架可以算是后端应用开发和前端应用开发结合。能很好的解决上述存在的问题,并且也易于部署,下面我会细细道来。 +而全栈框架可以算是后端应用开发和前端应用开发结合。能很好的解决上述存在的问题,并且也易于部署,下面我会细细道来。 -这里我选用的 Nuxt3 框架,羊了个羊刷次数网页版就是基于 Nuxt3 框架来开发的,并且使用 vercel 来进行部署。我手头还写过一个项目 [api-service](https://github.com/kuizuo/api-service)。 +这里我选用的 [Nuxt](https://nuxt.com) 框架,这是一个基于 Vue 前端框架实现的服务端渲染框架,羊了个羊刷次数网页版就是基于 Nuxt3 框架来开发的,并且使用 vercel 来进行部署。我手头还写过一个项目 [api-service](https://github.com/kuizuo/api-service)。 -首先在 SSR 框架,是有对应的后端服务引擎。像 Nuxt3 使用的是 [Nitro](https://nitro.unjs.io/),而 Next.js 使用的是 koa。都提供了后端服务 API 的解决方案,同时这些都是服务都算是 `serverless function`(无服务函数),所以在编写与调用非常方便。 +首先在全栈框架,是有对应的后端服务引擎。像 Nuxt 使用的是 [Nitro](https://nitro.unjs.io/),而 Next.js 使用的是 koa。都提供了后端服务 API 的解决方案,同时这些都是服务都算是 `serverless function`(无服务函数),所以在编写与调用非常方便。 -此外基于 [Netlify](https://www.netlify.com/) 和 [Vercel](https://vercel.com) 这些 `serverless development` 平台,可以非常方便的部署 SSR 框架。同时内置 CI/CD,只需要提交 git commit 就能实现自动构建自动部署。 +此外基于 [Netlify](https://www.netlify.com/) 和 [Vercel](https://vercel.com) 这些 `serverless development` 平台,可以非常方便的部署全栈框架。同时内置 CI/CD,只需要提交 git commit 就能实现自动构建自动部署。 最主要是的我恰好使用 Node.js 来做爬虫与 api 接口,因此后端复现接口也使用 js 来实现。 diff --git "a/blog/reference/\345\217\231\344\270\200\345\220\215\350\275\254\344\270\223\344\270\232+\344\274\221\345\255\246\347\232\204\345\244\247\345\255\246\347\224\237\347\273\217\345\216\206.md" "b/blog/reference/\345\217\231\344\270\200\345\220\215\350\275\254\344\270\223\344\270\232+\344\274\221\345\255\246\347\232\204\345\244\247\345\255\246\347\224\237\347\273\217\345\216\206.md" index 6c0040ae..6dfd0fd9 100644 --- "a/blog/reference/\345\217\231\344\270\200\345\220\215\350\275\254\344\270\223\344\270\232+\344\274\221\345\255\246\347\232\204\345\244\247\345\255\246\347\224\237\347\273\217\345\216\206.md" +++ "b/blog/reference/\345\217\231\344\270\200\345\220\215\350\275\254\344\270\223\344\270\232+\344\274\221\345\255\246\347\232\204\345\244\247\345\255\246\347\224\237\347\273\217\345\216\206.md" @@ -41,11 +41,11 @@ image: https://img.kuizuo.cn/202307110122170.jpeg ### 转专业 -我大一时的专业是 《信息与科学计算》,所属数学系,这个并不是计算机专业(虽然涉及到一些计算机相关的课程,但本质还是理学,不是工学),所以我转专业的原因很简单,就是要**科班出身。**当时就我看来科班出身能为我以后工作带来很大的帮助(当时的想法很天真,没有考虑转专业后所要付出的代价),但在这些年的经历以及行内的各个大神的能力告诉我,实际上并不会带来多大的优势。 +我大一时的专业是 《信息与科学计算》,所属数学系,这个并不是计算机专业(虽然涉及到一些计算机相关的课程,但本质还是理学,不是工学),所以我转专业的原因很简单,就是要**科班出身**。当时就我看来科班出身能为我以后工作带来很大的帮助(当时的想法很天真,没有考虑转专业后所要付出的代价),但在这些年的经历以及行内的各个大神的能力告诉我,实际上并不会带来多大的优势。 -我转专业并不难,因为我暑假就已经接触编程,并且在大一的时候,每天不是在写代码,就是在看代码,那段时间可谓是我人生编程学习最快乐的时光。所以转专业的考试对我来说特别轻松加上我数学天赋还不错,原专业的成绩也 OK,屁颠屁颠的将转专业填报单提交了上去,下学期便分配到新的班级中修学新专业——软件工程。 +我转专业并不难,因为我暑假就已经接触编程,并且在大一的时候,每天不是在写代码,就是在看代码,那段时间可谓是我人生编程学习最快乐的时光。所以转专业的考试对我来说特别轻松加上我数学天赋还不错,原专业的成绩也 OK,屁颠屁颠地将转专业填报单提交了上去,下学期便分配到新的班级中修学新专业——软件工程。 -然而就在我转完专业,我便开始后悔转专业了。我发现学校老师所教的是什么牛马?真的就是会念 PPT 就便会教课,而且所教的多数内容,所发放的题材都是相对过时甚至被淘汰的东西。难怪说学生会对编程失去兴趣,要是我一开始跟着老师这么学,现在那有愧怍。 +然而就在我转完专业,我便开始后悔转专业了。我发现学校老师所教的是什么牛马?真的就是会念 PPT 就便会教课,而且所教的多数内容,所发放的题材都是相对过时甚至被淘汰的东西。难怪说学生会对编程失去兴趣,要是我一开始跟着老师这么学,现在那有愧怍二字。 课程教学质量差也就算了,课程设计的要求还与学生课堂的内容还不同,我很难想象这学期只教 Web 前端(ES5 时代),却要求课程设计实现一个带后端接口服务以及数据库服务的程序。要不是我当时的基础还算好,恐怕连项目买来都不知道怎么跑起来。 @@ -97,9 +97,9 @@ image: https://img.kuizuo.cn/202307110122170.jpeg ### 复学 -办理休学手续非常容易,只需要家长知情并和学校说一下,学生提交材料,学校会给你保留学籍等待复学(期限为休学期间)。但我当时办理复学手续可以说非常不顺利,首先当时处于疫情下,学校是没那么容易进出了,需要通过学校的某个软件来申请,可由于我休学了,学院那边并没有将我的信息录入进去,导致软件压根无法证明我的身份。门口的保安可不管你进出校门做的事情,没证明就别指望进出学校。无奈,我只好联系我当时的辅导员,可保安也不认老师,就这样耗了 10 来分钟,保安看不下我母亲与我姐在旁边等候,才肯让我进去处理完手续。说真的,假设当天没有我家属陪同,复学?哼,有来无回吧。 +办理休学手续非常容易,只需要家长知情并和学校说一下,学生提交材料,学校会给你保留学籍等待复学(期限为休学期间)。但办理复学手续可就不那么容易了,首先当时处于疫情下,学校是没那么容易进出了,需要通过学校的某个软件来申请,可由于我休学了,学院那边并没有将我的信息录入进去,导致软件压根无法证明我的身份。门口的保安可不管你进出校门做的事情,没证明就别指望进出学校。无奈,我只好联系我当时的辅导员,可保安也不认老师(真实情况就是这样),就这样耗了 10 来分钟,保安看不下我母亲与我姐在旁边等候,才肯让我进去处理完手续。说真的,假设当天没有我家属陪同,复学恐怕就变成了辍学了。 -进出大门的事情解决了,复学找老师签字可就没那么容易了,具体细节我就不细说,总之就是各种找老师签字,有的老师今天在,有的不在,来来回回折腾了 3、4 天才把整个手续处理完,最终学是复了,书是也可继续读了。 +进出大门的事情解决了,复学找老师签字可又没那么顺利了,具体细节我就不细说了,总之就是各种找老师签字,而有的老师今天在,有的不在,来来回回折腾了 3、4 天才把整个手续处理完,最终学是复了,书是也可继续读了,此刻的心还处在小孩子不愿上学的时代。 但仅仅只是一年,却正好让我赶上了学费和教案的变化。 @@ -109,7 +109,7 @@ image: https://img.kuizuo.cn/202307110122170.jpeg :::info 补充 -你可能会比较好奇,为何不边上学边工作,而是要休学。我当时有两种想法,一种前面也说了,就是抱着辍学的心态,这里也就不在赘述。另一种就和我个人做事比较有关了,我做任何一件事情的前提就是不希望有其他事物来打扰,加之就是学校的因素,我学校是比较极端,规定的特别死,你想要实习只能在大四这个阶段,需要将课程修完才可。我深知同时做两件事情到最终很有可能都做不好,不如做绝一点,于是就是有了休学。 +你可能会比较好奇,为何不边上学边工作,而是要休学。我当时有两种想法,一种前面也说了,就是抱着辍学的心态,这里也就不在赘述。另一种就和我个人做事比较有关了,我做任何一件事情的前提就是不希望有其他事物来打扰,尤其是学校的因素,我学校是比较极端,规定的特别死,你想要实习只能在大四这个阶段(并且大四上还得上半个学期的课,甚至还有专业课,如 算法设计,安卓开发),需要将课程修完才可。我深知同时做两件事情到最终很有可能都做不好,不如做绝一点,于是就是有了休学。 ::: @@ -117,9 +117,9 @@ image: https://img.kuizuo.cn/202307110122170.jpeg ## 事件之 👮🔍💧 -在复学的第一个学期,在 2022 年 5 月 x 号的 22 点时,我工作室负责其他业务的同事突然打电话告诉我(语气还略带急促,我猜测是因为项目与他无关就放了),说我原先待的工作室的人都被抓了,说和我之前写的项目有关,叫我把相关代码全都删除了,这段时间不要联系他们。挂断电话后,我二话不说直接把我台式电脑搬到了其他宿舍,然后把我的另一台备用笔记本电脑放在桌上,我生怕 👮‍♂️ 第二天直接来我寝室来拿电脑。就这样提心吊胆几天,我内心暗自窃喜以为没事,毕竟我已经金盆洗手不做了,应该不会再追究吧,果不其然,越担心的事越会发生。就在几天后的周六中午突然来了一通电话,我一看 0xxxxx110 显示 xxx 公安局,完了看来是逃不掉了,但我还是抱着侥幸的心理,我选择了拒接就当我睡觉没看见(我当时确实因为这个电话而醒)。打了两通后没回应,又过了一段时间后,突然我姐给我打了电话,说我学校当地的派出所打电话给她,说联系不上我,然后叫我姐联系我看能不能联系上,顺便问我发生了什么事,我并没有告诉他,然而我心里很清楚,就是和我原本工作室的同伴有关。(至于说为什么 👮‍♂️ 有我姐的联系方式,我只能说我傻逼,每次学校填写什么表格的时候,有个家长联系人,我都是填写我姐的电话。也就是从这一阶段开始,所有要我填报的信息都是虚的 ) +在复学的第一个学期,在 2022 年 5 月 x 号的 22 点时,我工作室负责其他业务的同事突然打电话告诉我(语气还略带急促,我猜测是因为项目与他无关就放了),说我原先待的工作室的人都被抓了,说和我之前写的项目有关,叫我把相关代码全都删除了,这段时间不要联系他们。挂断电话后,我二话不说直接把我台式电脑搬到了其他宿舍,然后把我的另一台备用笔记本电脑放在桌上,我生怕 👮‍♂️ 第二天直接来我寝室来拿电脑。就这样提心吊胆几天,我内心暗自窃喜以为没事,毕竟我已经金盆洗手不做了,应该不会再追究吧,果不其然,越担心的事越会发生。就在几天后的周六中午突然来了一通电话,我一看 0xxxxx110 显示 xxx 公安局,完了看来是逃不掉了,但我还是抱着侥幸的心理,我选择了拒接就当我睡觉没看见(我当时确实因为这个电话而醒)。打了两通后没回应,又过了一段时间后,突然我姐给我打了电话,说我学校当地的派出所打电话给她,说联系不上我,然后叫我姐联系我看能不能联系上,顺便问我发生了什么事,我并没有告诉他,然而我心里很清楚,就是和我原本工作室的同伴有关。(至于说为什么 👮‍♂️ 有我姐的联系方式,我只能说我傻逼,每次学校填写什么表格的时候,有个家长联系人,我都是填写我姐的电话。也就是从这一阶段开始,所有要我填报的信息都是虚的) -然后我就回了公安局一个电话,和我确认完身份后,叫我带上 🆔  和 📱 叫我到学校门口,有 🚓  接~~送~~。我一上车后,就直接夺走了我的 📱(真),在车上就问我:”知道我们找你来是干什么的吗?“我默不作声,一直到了公安局后,接下来的安排懂的都懂,从中午做 📝 一直到晚上 8 点,从醒来到回校的期间别说吃东西了,连 💧 都 tm 没得喝。这一整个阶段就是要我交代当时写这个项目的负责了什么、盈利了多少、收款方式有什么,然后打开我手机的支付宝,微信,银行卡查我账户里的 💰,总之先把我号里的 💰 转到他们的卡里先,我当时和他们说微信里的 💰 我父母给我的生活费,也是我平常主要的消费方式,我也把相关的账单记录给他们看,确信后才没有将我微信的 💰 转过去。(这么一说似乎还挺良心) +然后我就回了公安局一个电话,和我确认完身份后,叫我带上 🆔  和 📱 叫我到学校门口,有 🚓  接~~送~~。我一上车后,就直接夺走了我的 📱(真),在车上就问我:”知道我们找你来是干什么的吗?“ 我默不作声,一直到了公安局后,接下来的安排懂的都懂,从中午做 📝 一直到晚上 8 点,从醒来到回校的期间别说吃东西了,连 💧 都 tm 没得喝。这一整个阶段就是要我交代当时写这个项目的负责了什么、盈利了多少、收款方式有什么,然后打开我手机的支付宝,微信,银行卡查我账户里的 💰,总之先把我号里的 💰 转到他们的卡里先,我当时和他们说微信里的 💰 我父母给我的生活费,也是我平常主要的消费方式,我也把相关的账单记录给他们看,确信后才没有将我微信的 💰 转过去。(这么一说似乎还挺良心) 然后 📝  做完之后,👮‍♂️ 说他们局长本来应该把我带到他们当地公安局一趟,可由于疫情的因素,就为我进行取保候审,(当然,这句话肯定是有吓唬成分),接着身份信息采集,打印账单记录,签字就不在话下了。至此在这个案件没结束之前,我都将作为一个嫌疑人处理。整个过程弄完之后叫我过几天再来一趟,主要就是二次笔录,在进一步确认哪些是“非法所得”。恰好我回去的时候还下起来大雨,还得用身体去遮挡着 👮‍♂️ 给我的那几份回执单,通知书。