为 Typecho 配置 Friend-Circle-Lite 的友链数据
今日在网上冲浪,偶然间得一项目——Friend-Circle-Lite
为此编写了一个小插件,暴露了 /action/firends API 来返回符合该项目格式的友链数据。
为 Typecho 配置 Friend-Circle-Lite 的友链数据
今日在网上冲浪,偶然间得一项目——Friend-Circle-Lite
为此编写了一个小插件,暴露了 /action/firends API 来返回符合该项目格式的友链数据。
由于在岛上学农的时候手法过于暴力掰断了我之前一副耳机,所以回家之后有了正当理由换了一部新耳机。在几位友人的推荐下选择这把声音记忆 G50。
收到声音记忆的快递时我还是蛮惊喜的,包装说不上是精美吧,但也能从它的设计中看出包装的确是有考量暴力运输、方便拆包等等因素的。在说明书和三包卡的袋子里,还有一张声音记忆打印手写体的明信片(水月雨高端设备似乎也有送?),让我感到有些感动。
网上大多数评测主购买的都是银色款,而我选择了黑色。整体上看下来黑色款的外观其实比较朴素,非常的简洁,就像一个耳机该有的样子一样。而银色款的撞色并不在我的审美点上。
虽然官方定位是监听耳机,但我买它回来是有使用麦克风的需求的(而且需求很高),所以选择了电竞配件版本,价格 359 元,仅比单耳机贵了 60 元。以 60 元的价格买一根素质还不错的带麦线对我来说是一笔不错的买卖。
本体赠送一个 6.5mm 转接头和收纳袋一个、耳机套两个。
电竞套件包含以下配件:
在这里需要吐槽一下送的声卡,在电脑上使用麦克风会有很强的电流噪声,初步判断应该是接地有问题;由于其 3.5mm 母口做工问题,接到手机上使用时必须小心翼翼,稍微动一下就会导致接触不良的断声问题。**几乎无法正常使用。**因此如果没有麦克风需求的话,可以不用考虑它的电竞套件。
由于我的耳朵不好,在这里就不做 HiFi 老烧们喜欢做的那些听感测评了。对于我本人来说,高音齿音部分比较刺耳(这算是监听耳机都存在的一个特色吧),拿去听那种上古英语听力的时候能感受到头昏脑胀的土拨鼠尖叫般的齿音。
我的 EQ:
1 | Preamp: -2.39 dB |
原装的包耳耳套佩戴起来不是很舒适,整个耳机很大,戴着眼镜会一直压到太阳穴下面一点让你的脸隐隐作痛。更换送的舒适耳套之后可能会缓解(我还没试过,改天试试)。
如果它卖 1099,我会根据佩戴舒适度和声卡问题对它做狠狠的批判,但它只卖 359。我认为它当之无愧是百元最强监听耳机。
暗桩1:beacon.BeaconC2 isPaddingRequired()检测类的 crc。函数调用
this.data.shouldPad(isPaddingRequired());,30 分钟后,所有任务改为退出命令
暗桩2:
common.Starter2 initialize() { if (!A(paramClass)) {System.exit(0);} }
aggressor.dialogs.ConnectDialog 和 server.Resources 均继承这个类,检测 crc。
暗桩3:
检测参数是否有 -javaagent:。这个暗桩遍地都是,直接搜关键字慢慢删吧。
暗桩4:
common.Helper.startHelper 校验文件。
整个Helper类都是暗桩。
暗桩5:(最阴间的一个)
beacon.CommandBuilder 类构造函数中初始化,检测 BeaconC2、BeaconData、SleevedResource、SleeveSecurity 的 crc 值,若不相等则 4 小时后,所有命令改为 0x06 exit。
最近突然想重拾一下免杀,遂随便写了个白加黑注入免杀🐎(注入是因为我希望不影响原有程序的功能)。
一拍脑门选择了国内很流行的某剪辑软件,后面发现这玩意似乎有白名单?
使用 AheadLib+ 一键生成了 DLL hiJacking 源代码,方便后面的修改。
首先参考了 Esuika/Shellcode-With-RC4-AES 项目,选择了直接复制粘贴代码使用 RC4+AES 对 shellcode 进行加密,抛弃了原有(两年前)的 base64+xor 方式。不过我认为 shellcode 的加密方式不在于多,只要能藏住特征就够了。
接下来采用自建 WINAPI 的方式调用注入函数,防止 EDR 静态扫描到函数调用特征。
1 | typedef BOOL(WINAPI *pCreateProcessA)( |
这是一个非常简单的远程线程注入方式,因为我懒得写 APC 等等的睾寄注入了。
再加上一点点反检测与控制流平坦化就完成啦!
主播没有落网 主播只是懒得写文章
前情提要:博主在搞一些奇奇怪怪的东西,需要对千万级别数据进行去重。
常规的 GROUP BY 语句去重挂着跑了一天一夜都没跑完,遂放弃。研究了一会之后搞出来了个新方法。
首先需要给表上一个 id 字段,方便后面去重。
1 | alter table TABLE_NAME add column id int(11) not null first ; |
为什么不用自增:innodb 自增字段表无法压缩,占用空间非常大。反正我也不需要自增 id,去重后就删了。
然后给 id 和需要去重的字段加上索引(查重的时候会快很多)。
temp_delete_code 用于存放要删除的 code 。字段 delete_code,类型根据你的索引类型来,也需要添加索引。temp_keep_id 用于存放去重保留的 id。字段 keep_id int(11),需要添加索引。
往 temp_delete_code 表中插入要删除的 code
1 | insert into temp_delete_code (delete_code) SELECT code FROM `TABLE_NAME ` GROUP BY `code` HAVING count(code) > 1; |
往 temp_keep_id 插入不能保留的id
1 | insert into temp_keep_id (keep_id) |
1 | delete fromTABLE_NAME WHERE `code` in (select delete_code from temp_delete_code) and id not in (select keep_id from temp_keep_id); |
我校剧场主板活动时,声光系统由学生会自行管理。因此我们研究了一套较为优雅的单兵/双人解决方案。
投屏使用学生自带的笔记本电脑,其他音乐使用剧场的台式电脑。声音由调音台管理。灯光由调光台管理。
必要时可通过采集卡切换图像通道实现热备。
使用 OBS 统一管理输出。常规情况下只需要将笔记本电脑连接至采集卡即可。但部分情况下需要使用 PPT 动画。
这里采用了 EasyVirtualDisplay 创建一张虚拟屏幕,然后将 PPT 放映设置到虚拟屏幕后用 OBS 采集进行投屏,比较优雅。
使用 SportSoundsPro 管理音乐输出。该程序有软件实现的淡入淡出/交叉淡化,不需要手动拉音量了。
DJI Pocket 2 初体验: 四年前的口袋相机还能打吗?
博主近几天收了个二手的 DJI Pocket 2 云暮白用来在校拍一些素材用。今天正式上手体验了一下拍摄。对于标题给出的问题,我的回答是:能,但也不能。
官方参数指路:DJI 大疆创新,在此不作赘述。
下方的每个项目,我都会以我自己的拍摄体验谈谈 Pocket 2 在我所处的场景内的优点与缺点。
对于我来说,我会拍摄白天/剧场灯光下的素材,因此 1/1.7 英寸的 IMX686 传感器对于我来说能满足大多数要求。阳光下的素材并没有太多噪点,但动态范围明显不够宽容,在日光下部分稍微暗一些的物品就会变得较难辨认。哪怕是录制 D-Cinelike 影像再后期调色也比较难拉回来。
而在剧场,它的表现就比较难看了。由于剧场整体比较暗,仅靠环境灯光只能打亮舞台主题,周围的暗区噪点会当场爆炸。目前还没有试过向右曝光录制,不过根据理论应该会稍微改善一点点。
机内麦克风的录音质量还说得过去,连接上 DJI 无线麦克风(没错,比 DJI mic 还早的产品)的话得到的录音效果还是不错的(虽然我用不到录音)。但整体录出来的声音有点偏小。
个人认为在 Pocket 2 原生屏幕上操作虽然可能比较难上手,但是整体逻辑还是比较简单的。只需要向四个方向滑动即可进入对应的功能区域。如果要调整参数,用手机远程调整将会更好。但连接手机后屏幕会被自动锁定是一件比较蛋疼的事情,我只能重复地用手机调完参数再断开用屏幕监看,非常反人类。
出我机器的老哥是连着全能手柄一起出的,连接上手柄后续航很尿崩。我录制 2.7k 60fps 的视频大概两分钟左右就能用掉 1% 的电。因此要长时间录制的话必须得链接着充电宝来录。
配的无线麦克风的续航则很好,充一次电大概能用四五个小时左右。如果有长时间的录制需求的话充电宝+机器+无线麦的搭配也不会太重。
如果你像我一样是个预算不高的学生党,并且只在光线充足的情况下录制,那么这台机器完全可以胜任大多数的任务。搭配上 Z 轴稳定装置你甚至可以组出一个如影青春版。
但如果你的预算能更高一点,那么 OSMO Pocket 3 甚至 APS-C 画幅的微单将会成为一个更好的选择。但不论如何,选购产品时请千万不要只看参数!根据自己的需求和网上的体验测评进行选择才是更有效的。
上文中将 ASN 申请下来了,本文就要把自己的 IP 地址和路由广播出去,让全网可以访问你了!
我的 LIR 为我提供了一段 /44 和一段 /40 的 IPv6 地址,但我的测试网准备先播一段 /48 地址,所以需要拆分出来。
操作前,请先在 maintainer 与 role 对象中删除 mnt-ref 标签
前往这里创建 inet6num 对象。
图上有一点填错了 NAME 不能有空格
然后在这里创建 route6 对象。
找一家支持 BGP Session 的服务商,例如: Buyvm/Vultr。这里博主选择了 Buyvm。
开工单,表明你需要 BGP Session 服务。对方会给你的 ASN 的管理邮箱发送一封验证邮件,在工单中回复验证码。等到晚上对方就会提示你已经开通服务了。
前往 Stallion 管理面板,找到你的 vps,进入网络管理,点击 BGP 即可看到详细信息。
点击 Configure Session 配置好机器的信息(这里面的东西一般没什么影响,按你想要的配置就行,不会配置就默认吧)。
Buyvm 的 VPS 似乎默认没有绑定 ipv6 地址,需要手动绑定一下。
在这里引用一篇文章 给BuyVM的Debian机添加IPv6
直接使用下面的命令创建网卡:
1 | ip link add dummy0 type dummy # 新建一个dummy网卡,命名为dummy0(强烈建议使用一个规则的命名方式,比如dummy+数字) |
通过命令创建的网卡每次重启会消失
向 /etc/network/interfaces 写入配置。
1 | auto dummy0 |
可以使用包管理器安装,也可以源码安装。
这里选择源码安装
1 | apt update |
1 | # /etc/systemd/system/bird.service |
BIRD 无法自己创建 socket 文件(未知原因)
每次开机需要手动 mkdir -p /run/bird/
这部分内容建议查看 阶段1 BGP Player。
因为我自己的配置文件没跑起来。
如果启动服务后,看见 BGP 状态为 Established 即为成功。
为了团队服务的安全和某些原因,我选择了自己注册一个 ASN,并将其投入我的应用程序中。很久以前就有这一个想法了
想要拥有一个自己的 BGP 首先就需要有一个 ASN ,而注册 ASN 的一般流程是寻找 RIR 入会后注册。
@> 区域互联网注册机构(Regional Internet Registry,RIR),是管理世界上某特定地区Internet资源的组织。Internet资源包括IP地址(包含IPv4和IPv6)和使用在BGP路由中的自治系统号(Autonomous System number)。
然而例如 APNIC/RIPE 这一类 RIR 的入会费都十分昂贵,每年在一万刀乐到十万刀乐不等。
所以只能退而求其次,寻找 LIR 的帮助。
@> Local Internet registry (LIR) is an organization that has been allocated a block of IP addresses by a RIR, and that assigns most parts of this block to its own customers.
LIR 也就是 RIR 的一些会员,他们可以帮助你获得 ASN,而你只需要替他们支付你 ASN 的年维护费即可。
@> 关于 LIR 的推荐:这里只推荐两家。
https://alice.ws/ Alice Network
https://lir.zhnet.co.uk/ ZH Internet Services
ASN 的注册原则上是就近寻找 RIR,但是考虑到 RIPE 支持在线管理,而其他 RIR 都需要联系 LIR 帮助你修改信息,所以博主这里选择了 RIPE。
RIPE的注册类型分为两种:
由于隐私原因(虽然我已经被盒的差不多了),博主选择了以公司身份注册。
注册公司的方式很简单,国内国外公司均可,这里我找朋友开了个英国的空壳公司,一天就下了。
@> 参考资料: ZH Network
下方将原文摘录,并附上一定我本人在过程中的注解。
通过此链接注册一个 RIPE NCC Access 账号以管理您未来在 RIPE NCC 区域内的资源。
role 对象是对由一个或多个人执行的角色的抽象,例如表示您用来处理网络事件的部门。maintainer 对象是对维护者的抽象,记录了维护者的认证信息。其他对象通过 mnt-by 属性授权由谁维护。
在通过此链接创建 role 和 maintainer 对象时,您需要填写:
mntner: maintainer 对象的标识符,可包含大小写字母、数字和 -,例如: YOURNOC-MNT
role: role 对象的名称,可包含大小写字母、数字和 ][)(.“*@,&:!’`+/-,例如: YOURCOMPANY NOC
address: 此 role 的办公地址
e-mail 此 role 的电子邮件联系地址
填写完成后点击 SUBMIT 按钮,将同时创建一个 role 和一个 mntner 对象。
页面中上位置以 role with primary key “EXAMPLE-RIPE” 字样展示了 role 对象的主键。您需要将其作为您 AS 的 ,或通过此链接创建一组专用 admin-c / tech-c / abuse-c 提交给您的 LIRrole 对象作为您 AS 的 admin-c / tech-c / abuse-c 提交给您的 LIR。
新建的 role 对象中 mnt-by 属性指向了新建的 mntner 对象,这表示此 role 对象可由其修改。而创建出的 mntner 对象中 admin-c 属性指向了新建的 role 对象,这表示此 role 对象提供了该维护者的管理员联系信息。
这种相互引用关系使得您必须同时创建 role 和 mntner 对象。
在此页面顶部的搜索框中填写上节中 role 对象的主键,点击右侧查找按钮。接下来点击搜索结果右上角的 Update object 按钮跳转至修改页面。
点击 e-mail 栏右侧 + 号按钮为此 role 对象添加 abuse-mailbox 属性。
在出现的 abuse-mailbox 栏中填写滥用通知邮箱后点击 SUBMIT 按钮保存。
RIPE NCC 会检查此邮箱的有效性,务必真实可用
**再创建一个 maintainer 对象的密码(你的 LIR 需要)
在这个页面继续搜索你的 maintainer 对象的主键,在 auth 栏目点击加号添加密码并妥善保存。
organisation 对象是对公司、非营利团体或个人的抽象,所有其他资源都与该对象相关。是管理 RIPE 数据库中数据的起点。
在通过此链接创建 organisation 对象时,您需要填写:
mnt-by: 由谁管理,默认自动填充此前新建的 mntner 的标识符
organisation: organisation 对象的标识符,默认填充 AUTO-1 将由系统自动生成标识符
org-name: 此 organisation 的名称,必须填写组织的法定全称或个人姓名之一
address: 此 organisation 的联系地址,必须是组织的法定地址或个人住址之一
e-mail: 此 organisation 的电子邮件联系地址
abuse-c: 此 organisation 的滥用通知联系方式,必须指向具有 abuse-mailbox 属性的 role 对象
mnt-ref: 谁可引用此 organisation,被指向的 mntner 可以添加指向此 organisation 的对象,即由谁为此组织分配资源,询问您的 LIR 以获得具体值
填写完成后点击 SUBMIT 按钮,页面中上位置以 organisation “ORG-EXAMPLE-RIPE” 字样展示了 organisation 对象的标识符,您需要将其作为您 AS 的 org 提交给您的 LIR。
需要的资料有:
全部提交后,LIR 会向你发送合同文件,签名后一并提交。
到此为止,等待一个工作日左右,你的 ASN 就到手啦!
Update your browser to view this website correctly.&npsb;Update my browser now