服务器升级中

因为wp没有及时升级,结果某天上去发现了几十个webshell,有新创建的php shell可以手动删除,也有感染现有php文件的,因为感染后木马顺带改掉了修改时间,所以不好发现,索性整个站点全部升级一下。

系统直接升到最新的server 2019尝个鲜(aliyun没有提供server 2019,只能安装没有ui的server 1709,然后手动挂载ISO升级),IIS 10和IIS 7类似,设置上与IIS 6有很大区别,但是更多的功能会变得很方便,比如fastcgi、gzip压缩。

wp直接升到纯净的5.0.3。因为原站点很多文件被感染,不可信,故插件、主题以及一些个人定制的代码,需要花时间慢慢恢复。

这次严格设置了NTFS权限,希望不再中招。

世界上有两种人,一种是被黑过的,一种是被黑还不知道的

Office 2016 KMS激活参考

与Windows最大的区别是,MSDN上下载的零售版镜像不能通过安装密钥的方式切换到VL版,而是需要导入.xrm-ms文件。

参考激活命令:

cd “C:\Program Files (x86)\Microsoft Office\Office16″
cscript ospp.vbs /unpkey:BTDRB
cscript ospp.vbs /inslic:”..\root\Licenses16\ProPlusVL_KMS_Client-ppd.xrm-ms”
cscript ospp.vbs /inslic:”..\root\Licenses16\ProPlusVL_KMS_Client-ul.xrm-ms”
cscript ospp.vbs /inslic:”..\root\Licenses16\ProPlusVL_KMS_Client-ul-oob.xrm-ms”
cscript ospp.vbs /inpkey:XQNVK-8JYDB-WJ9W3-YJ8YR-WFG99
cscript ospp.vbs /sethst:<<YOUR KMS SERVER HOST>>
cscript ospp.vbs /act

红米4X安装Apps2SD记录

1、解锁
按官网流程说明,在开发者选项里绑定小米账号。如果提示网络异常,将小米云的查找手机关掉再试一下。

2、线刷开发版
MIUI官网的下载中心近一个月一直再维护,从论坛找的开发版的镜像。
卡刷试了下不行,验证不通过,说是必须要最新版。
但其实后面最后还是刷了SuperSU,这样来看其实稳定版也能ROOT,可以省下备份、恢复系统设置和APP的过程。

3、开启ROOT、解锁system分区
授权管理中开启ROOT,adb root && adb disable-verity

4、安装Apps2SD、内存卡分区
我直接电脑用DiskGenius把FAT32调小,剩余空间建一个linux native分区表项,然后到Apps2SD里格式化成ext3。

5、移动APP
移动了apk、odex、data。外部data不移动,因为虚拟sd卡是fat32,符号链接重启后会出问题。个人把会从网上下载很多资源占用空间比较大的但不是很常用的APP移到了SD卡,例如各种视频APP、各种购物APP。

6、自动软重启
授权管理自启动开启Apps2SD系统唤醒,Apps2SD设置里开启未挂载时自动软重启。这样重启手机后不用手动进去点remount和重启,因为目前的系统没有找到其他能用的方式可以在开机时运行init.d脚本。所以最后强迫症,所以决定刷SuperSU用su.d方式加载。

7、线刷TWRP
要刷论坛的版本。官网最新版本无法自动解密data分区。论坛版本中有批处理,自己fastboot手打也可以。

8、SuperSU
论坛的版本patch boot失败,要刷官网最新版。官网下载链接挂了,找别的网站下个md5相同的,进TWRP刷入。
然后Apps2SD就可以用su.d的方式开机自动mount了。

参考资料:
http://www.miui.com/thread-8205780-1-1.html
http://www.miui.com/thread-12033397-1-1.html
https://blog.csdn.net/u010150437/article/details/54744454
https://twrp.me/xiaomi/xiaomiredmi4x.html
http://www.supersu.com/download

Canon G2800错误折腾笔记

1、断供问题

放久了,或者搬运不当,墨车连接处可能漏气,使墨水管中进空气。这种情况最好是打开小车,用注射器抽气。
官方给的建议是一旦进气就要用系统清洗,但是这样会吃掉1/4的墨水,太浪费了,并且用掉1/4的废墨垫。

2、墨水阀和小车

蓝色的墨水盖旁边有个连在一起的白色的东西是墨水阀,当墨水盖打开时,阀门会关闭,避免墨水回流。
如何把小车移出来:打开盖子,按停止键5秒,小车会跑到左边。再按停止键5秒,小车就跑到可以更换墨盒的位置了。
打开小车前切记关闭墨水阀(即打开蓝色盖子),否则参见前文。

3、墨盒进气

如果断供后没有处理继续打印,墨盒会进空气直到最后干涸。没有墨的喷头打印时不会产生负压,无法自动补充墨水。
必须用清洗泵抽气才能供墨,实测需要执行5次以上的深度清洗才能恢复喷墨。
但是深度清洗每次注的墨不多,所以推测墨盒里的海绵其实一直会是不饱和的(下面是水上面是空气的状态),随时会断。所以最好是执行系统清洗。
我实在不想浪费墨水和废墨垫了,所以用针头往墨盒打了1ml墨进去,或许能行。

4、废墨垫和清零

拆掉机器后盖(两个螺丝)可以看到废墨垫,其中有两块海绵可以拿出来清洗或更换。其余的不方便拿出来,要拆整机。
可以看到废墨管,执行系统清洗的话也许可以拿出来排到机器外面。
4905以上版本的维修工具可以清零本机,普通用户建议找淘宝。

5、维修模式

关机状态按住停止键,再按住电源键,然后按5下停止键,最后放开电源键,即可进入维修模式。
此款型号至少需要4905版本的Service Tool,3600肯定不行,4720能识别系列型号,但无法通信。
不要用低版本工具或奇怪的第三方软件瞎搞,可能会变砖。

6、附加吐槽

我个人对任何工业产品的观点是,如果我知道这个东西的原理、构造,且手头工艺条件能达到,我应当可以自己去维修它,而没必要去维修店。
例如电脑,感谢IBM定义了兼容PC,我们可以买Intel的CPU、农厂的显卡、西数的硬盘、金士顿的内存,然后把它们组装起来。
但是打印机就很火大,比如明明你能把废墨垫取出来清洗或者换新,厂商也非要你送到维修店,让他给你用专用维修软件去清零,并且软件上说只能安装到授权的电脑上,否则是违法的。
这就像苹果手机一样,你买了使用权,但是没有所有权。或者像某些电视盒子,不让你装app,还能远程删掉你的文件。

Canon的维修工具有人偷出来,然后加上自己的注册码来卖,最新版的能卖到每台机器授权30美元。然后淘宝上每次清零服务10-30元不等。
可能有人想问我的维修工具是哪里找到的,我只能说我用Google找了两天两夜,找到的也是别人加了料的,然后利用自己搞二进制安全的技术进行了二次破解。因为来路不正,也不知道里面还有没有别的隐患,所以仅仅是勉强让自己能用,暂时不提供下载,想要的还是找淘宝清零吧。也记得别只清零,废墨垫还是要清洗的,别漏出来短路烧板子。

Chrome disable-directwrite-for-ui补丁

Chrome从版本41开始强制启用directwrite ui,ui界面包括主菜单、地址栏、书签栏等不再使用点阵宋体渲染,如果系统是windows classical主题,这些地方的字体会严重发虚。

通过在chrome的快捷方式中指定–disable-directwrite-for-ui启动参数可以解决这个问题。但如果是其他程序打开浏览器的第一个实例,就没法应用这个参数。同理,基于chrome的atom、visual studio code等electron应用,通常都是通过关联文件而不是快捷方式启动,所以依然会悲剧,观感非常难受,如下图。

今天决定彻底干掉这个问题。方法很容易想到,通过劫持一个dll进行注入,然后改掉GetCommandLine返回的结果。研究chrome的依赖dll后决定选择DWrite.dll进行劫持,就像游戏外挂都喜欢用d3d9.dll注入一样,优点是它们都是只需要转发一个函数即可。d3d9是Direct3DCreate9,DWrite是DWriteCreateFactory。

代码:

#include <Windows.h>

static void* pDWriteCreateFactory;

extern "C" __declspec(dllexport) __declspec(naked) void DWriteCreateFactory()
{
	__asm jmp dword ptr [pDWriteCreateFactory];
}

BOOL WINAPI DllMain(HMODULE, UINT uReason, LPVOID)
{
	if (uReason == DLL_PROCESS_ATTACH)
	{
		WCHAR path[MAX_PATH];
		GetSystemDirectoryW(path, sizeof(path));
		lstrcatW(path, L"\\DWrite.dll");
		HMODULE hModule = LoadLibraryW(path);
		pDWriteCreateFactory = GetProcAddress(hModule, "DWriteCreateFactory");

		static WCHAR commandLine[4096];
		lstrcpyW(commandLine, GetCommandLineW());
		lstrcatW(commandLine, L" --disable-directwrite-for-ui");

		BYTE* code = (BYTE*)&GetCommandLineW;
		DWORD protect = PAGE_EXECUTE_READWRITE;
		VirtualProtect(code, 6, protect, &protect);
		code[0] = 0xB8;
		*(WCHAR**)&code[1] = commandLine;
		code[5] = 0xC3;
		VirtualProtect(code, 6, protect, &protect);
	}
	return TRUE;
}

下载:

DWrite.zip

用法:

放置到chrome内核所在的目录即可。Chrome浏览器放到chrome.dll的目录(目录名是版本号的,非chrome.exe目录),vscode等electron应用放置到exe所在目录。

 

效果:

站点今天维护了一下

几个事情,一是用svn将wordpress合并到了最新版本。

二是修复了以前的电台,可能是上次合并的时候漏掉了在主题里加上radio.js所以电台失效了。

三是调整了一些url,非wordpress的地址目前统一通过lxf.me/www/目录访问,以前的lxf.me/pub等路径作废。并由此修复了相关文章中出现的链接。此步骤时phpmyadmin抽风,直接用phpmyadmin编辑文章会导致换行丢失。部分手动修了下,但可能和原来的版本有一些出入,mysql没备份所以大概修不回来了。

 

个人日常网购商品评价汇总

评分说明:5处女座表示不存在的,4张大妈,3没有特殊的感情,2不张大妈,1谁家有粉碎机借我用下
评分可能会因后续发生质量问题、退烧、购入新产品发生比较而导致变化,评分仅代表个人需求环境下的直接心理感受
部分商品闲置,如果有朋友想收购,可以评论留言

飞利浦E1500手机:1分,IP拨号的bug坑了我50块钱
联想newifi mini路由器:4分,一定要刷我编译的固件才行哦
川宇C292读卡器:3分,据说适合车载,其实要我设计还能再小点的
WD10JPVX 1T笔记本硬盘:2分,15秒自动断电巨坑
金胜M200 32G MSTAT固态硬盘:3分,本身一般,结合破解的ExpressCache才好用
铁三角ATH-CLR100耳机:3分,耳塞长度长了
iphone4s美版:4分,三网无锁全新,至今工作正常
神舟K610D-I7D1笔记本:4分,个人工作站,神船万岁,I7万岁,显卡坏了去球
iphone4s港版二手:4分,ios7.12万岁,后来功放坏了维修被坑死了
PowerLand 65W迷你笔记本电源:4分,但是店铺关门了,不知道哪天会爆炸
胜利VC921万用表:4分,袖珍,自动量程
金士顿FCR-MRG2读卡器:4分,小巧设计
Sony MDR-EX15LP耳机:4分,就是第二个坏得快了
MUJI二用笔:2分,经不起敲打
三菱Style Fit三用笔:4分,外观、结构设计好
网件WNDR3700路由器二手:4分,神器,没怎么用供起来了
红米Note3手机:3分,太大了拿不住,给我妈用空间满得太快
小米移动电源10000mah旧版:4分,18650×4简洁组装,大小适中
BOW HW098无线键鼠:2分,F11与NumLck重用,无法用于编程开发
QCY Q30蓝牙耳机:2分,会掉,地铁上仅一只耳朵听不清
森海CX213耳机:4分,200价位必备
红米4X手机:4分,价格实惠,该有的都有
Sony MDR-100ABN降噪蓝牙耳机:4分,地铁神器
小米3孔3USB插排:4分,外观设计好
小米24寸拉杆箱白:3分,材质略有单薄
JBL CM102音箱:3分,后来输入源多了发现应该买202的
小米电视4:2分,显示器模式色彩不佳,4K暂时无法60FPS,延迟感人
绿联VGA转HDMI:2分,新版本外观设计更好
小米5孔插排:3分,外观设计好,够用
UNITEK USB3HUB 7口带4A电源:3分,配的4A电源太大,建议配2A的
iNSIST鼠标:1分,京东推荐的加价购千万不要买
Cherry 3800红:4分,红轴万岁,平胸万岁
Cherry 3800茶:3分,多出的段落确认感实无必要,低估了手感的适应能力
Unitek USB3.0转2.5寸SATA:4分,外观设计很好
松下ERT3-S405剃须刀:4分,锂电池,带修剪器
小米双频无线鼠标:3分,可以电视和电脑切换,超薄设计触键点略偏后有些硬
佳能G2800一体机:4分,家用神器,连供设计好
Unitek USB3.0HUB+声卡:3分,声卡支持电视,但疑似和电视的wifi冲突
小米键盘一代红轴:2分,TTC轴连打回弹不足无法打游戏,烤漆面粘指纹,已退货
小米键盘二代红轴:4分,除3键灯光亮度的bug外未发现缺点。
Tempur千禧枕头M号:3分,M号高了,应该买S的,低的可以垫高高的没办法变低
YAMAHA U1H二手钢琴:4分,我挑中的那台声音和手感都最好的被人订走了哭

萌新OSU入坑三个月纪念,以及一些FC录像

感想啥的就不重复码字了,有兴趣直接去贴吧围观,顺便求mu。
https://tieba.baidu.com/p/5300912315

BP列表上FC的一些录像,好像有防盗链没法直接嵌入播放器了,直接贴链接吧:
(60fps录制,可切到高清画质观看压制的原版)
https://www.bilibili.com/video/av14244762/

接下来应该肝不动了,stream一直打不好,而且大跳没法零失误(为什么必须零失误呢,因为std模式的pp完全与combo成正比)。估计继续走技术路线得改打法。。。普通键盘也快残了,等搬家攒电脑后再说吧。

三个月2500pp纪念:

关于最近的勒索病毒,以及Windows月度汇总更新

近日闹出了基于MS17-010的勒索病毒,公司网络侥幸没中招,但还是吓得老老实实先关了445端口。

我给别人家装系统一般是会开自动更新的,但自己装系统却不怎么喜欢开,尽管我自己就是搞安全的。主要因为我自己重装系统通常是比较频繁的,而Windows7 SP1是2011发布的,6年积累的更新有两百余个,如果通过自动更新来装,按我的几百k网速和推送的尿性,估计几天都装不下来,这还不考虑公司的网络有限速机制,检测到下载流量直接封网。如果是下载一些网站打包好的合集(例如下载吧),那么你很快会发现,同时安装太多的更新会导致windows installer记录回滚状态的链表(我怀疑的)消耗高达数10G的内存,并且安装到后期每进行一步操作都要CPU满转几分钟才能在这个超级链表上加上一记录。

微软显然也意识到这个问题,所以Win10的策略是9个月滚一个版本,同时每月发布一个累积更新包。去年10月开始,Win7也引入了这个策略,根据微软官方博客上介绍,新的更新包会包含上个月的内容,博客上还说,他们会逐渐将历史补丁也加进来,也就是说未来只需要在baseline(也就是win7 sp1)上打一个当月最新的更新包就好了。

实际测试发现,首先2016年10月以后的所有补丁肯定在这个包里包含了,因为新策略实施后没有别的发布通道。但之前发布过的许多补丁还是能被windows update刷出来。也许是被逐步替换的,也就是某个文件,比如内核ntoskrnl,某年出了一个bug,然后微软通过一个补丁刷了一个版本号,然后16年10月之后的某一天又爆出一个bug,微软再刷一次版本号,那么新补丁就相当于包含了旧补丁。但对于相对“无关紧要”的文件,汇总更新里就没有,还是以单独的补丁包提供。

另外我查看了几个单独的补丁,bug标志都是“重要”,而汇总更新的标志是“严重”(critical)。个人看下来,如果一个bug是本地溢出,通常需要下载到一些特殊的文件才会触发,就会被标“重要”,而如果是远程溢出,例如smb、iis这些,能够快速通过网络传染,那就真的是躺着都能中枪,这种就会标为“严重”。

所以个人觉得,如果是需要快速重装系统,又担心被远程攻击,可以手动安装当前最新的月度安全质量汇总,把critical级别的先补上。其余的散包优先级稍低,可以交给自动更新慢慢补上。

希望微软能早日将历史上所有的补丁包都集成到月度更新中。

使用SVN让WordPress升级时合并定制的更改

因为实在是受不了阿里云每天推送wordpress有各种漏洞,决定还是尽量把wordpress升到最新版本。但个人对wordpress的代码进行过多处的修改(例如文章id复用、评论模板、主题修改等),直接升级就会被覆盖掉。所以决定引入版本管理。

服务器上直接安装TortoiseSVN,安装时建议选中命令行工具,这样就可以直接用svnserve开服务从远程连接,无需再安装VirtualSVN。

先考虑一下我们的逻辑。我的blog最后一次手动更新的版本是4.2.1,当前最新的版本为4.7.3。通常来说的逻辑应该是将当前正在跑的版本与4.2.1比对得出我自己修改过的差异,然后覆盖安装4.7.3,最后把我修改过的差异打到新版本上。方法就是先来diff一下生成patch文件,然后直接升级,最后来应用patch。

不过我们可以从反方向的角度来考虑这个问题,即将我自己修改的网站看作trunk,将wordpress官方4.2.1到4.7.3的(大范围的)更改看作分支,将这个修改集合并到我这边的主干上。这样考虑就可以很方便地用svn来进行了。以下为参考步骤。

1、创建一个仓库。建立一个/trunk/main,用于存放当前的网站。
2、建立一个/vendor/wordpress/current,下载4.2.1解压进去,提交。
3、svn复制current里的所有文件到main,更新工作集。
4、服务器上checkout当前的main,但不覆盖现有的文件,这样直接提交,将网站上的内容覆盖到main,这样main里就有了我修改过的内容。
5、删除current里的所有文件,下载4.7.3解压进去,执行一下添加所有文件,提交(乌龟会检查需要删除的文件,但未版本的文件要手动添加),这样current就滚到了最新。
6、到main里执行merge。merge来源为current,合并范围为从第2步之后current的rev,到head。这之后main就刷到了4.7.3,并且保留了我自己的更改。可能会有部分文件冲突需要手工合并。然后提交。
7、服务器上update最新的main。浏览器访问wp-admin升级数据库。

以后再遇到更新时,就直接将新版本替换到current里,然后将更改合并到main里。想方便的话还可以做个钩子让提交时服务器自动update。

20171129 4.7.3 to 4.9记录:
1、checkout current,下载4.9解压进去,执行添加所有文件(结果刚才忘了,合并后wordpress少文件打不开了),commit。
2、直接拿iis目录当working目录执行merge,来源为current,范围写current上一次的rev(刚刚commit之前的rev)到head。因为上次搞乱了line ending,选上忽略换行符合并。
3、合并顺利完成,访问正常,提交trunk。

参考文献:http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html