Lexsion 发布的文章

为路由器刷入第三方固件——以ASUS ACRH17刷OpenWrt为例简述其思路

前言

最近翻出一个之前不知放在哪的ASUS ACRH17路由器,而且K2P、新三之类的路由器已经用了很多年了,是时候换一换了。同时感觉华硕原厂的固件功能太少,于是有了刷OpenWrt系统的想法。很多人都知道给电脑重装系统、给手机刷机,但不一定听说过给路由器刷机。那么给路由器刷第三方固件这项活动是因何而起的呢?

当Linksys在2002年发布了使用Linux作为系统内核设计的WRT54G路由器,就为后来第三方固件的流行埋下了种子。转眼2003年3月Cisco收购Linksys。同年6月,Linux内核开发组听说WRT54G固件使用了包含GPL开源协议的Linux代码,遂要求Linksys开源相关部分代码,为此FSF还因此起诉Cisco,最终7月Cisco迫于外界压力开源了WRT54G的固件。至此,极客行动了起来,各种定制的固件和给路由器刷机的行为就流行了起来。后来大浪淘沙,其中OpenWrt、DD-WRT、Padavan、Asuswrt-Merlin(梅林)、Tomato、PandoraBox等固件成为了主流第三方固件项目。

注意:本文主要记录路由器刷入第三方固件的思路,以备日后刷其他型号路由器时参考,而刷固件的操作是因机而异的,随着相关项目的更新,某些操作可能会有变化。为路由器刷入第三方的固件的操作是个需要细心的活。您可能因为误操作、意外等情况损坏设备,所以务必小心操作!笔者不承担您的任何相关风险。

软件和硬件的准备:

  • 连接shell的终端软件:用于通过SSH协议或串行口连接到路由器shell,可以使用PuTTY或其他熟悉的工具。
  • SCP客户端或一个U盘:备份出厂数据或固件时,用于通过网络传输文件到本地,使用scp(Linux),WinSCP (Windows)或其他自己熟悉的软件。或存储到U盘中(需要路由器有USB接口)。
  • 网线、USB TTL转换器:通过网线连接以支持SSH登录、SCP传输文件等。USB TTL线可用于连接路由器主板的TTL调试接口,以访问Shell。

步骤

  1. 准备固件映像
  2. 建立到路由器的shell连接
  3. 备份原厂数据
  4. 刷入新固件

准备固件映像

刷机自然是要先把新固件准备好,这一般来源于论坛或Q群,比如恩山、OP大群、OpenWrt官方Wiki;也可以自己从GitHub拉取项目代码编译,这需要Linux系统并且有些难度。

根据不同机型,我们可能需要准备:

  • 最终使用的系统固件(一般为后缀包含squashfs-sysupgrade的固件)
  • 中转固件(一般是类似Linux Live CD那种RAM加载的临时系统固件,后缀为initramfs-kernel.bin;或是专用于从官方固件过渡到OpenWrt的系统固件,后缀包含factory字样)
  • Bootloader固件(某些情况下我们需要刷入新的Bootloader,比如不死Uboot、Breed等)

并非在所有情况都需要准备以上所有固件,具体选择哪些文件,需要视情况而定。

比如,之前接触的Cisco Meraki Z1,其原厂固件非OpenWrt,不支持直接刷入sysupgrade,便有大佬编译了initramfs-kernel固件供大家使用DD指令刷入作为中转,然后通过该固件中提供的sysupgrade指令支持刷入最终的squashfs-sysupgrade固件。

而像ACRH17,虽然该机器保留原厂的Bootloader可以使用原厂提供的救援工具刷回原厂,但网友大多都是要刷第三方的Bootloader以实现通过Bootloader随意刷机的需求。需要注意的是,Bootloader对于路由器这类嵌入式设备是非常重要的 ,所以无论原厂固件还是一般的OpenWrt固件都是不允许重写Bootloader区域的,于是有网友编译了解锁Bootloader的squashfs-flash-factory固件。通过在原厂固件的固件升级页面中直接刷入该固件,便可以在Shell中执行重写Bootloader的命令了,最后便可通过第三方的Bootloader进行刷固件或一些其他的高级功能。

建立到路由器的shell连接

建立到路由器的Shell连接的方法,可以分为免拆机法和拆机法。不同型号能使用的方法不同,因为拆机法对于动手能力和工具有一定要求,所以优先选择免拆机的方法。

路由器的主板在设计时大多会留出四个排在一起的焊盘,这时为硬件调试留出的TTL串口,需要通过一定的电路分析经验找出其GND、TXD、RXD,然后通过USB-TTL转接器连接到电脑,在电脑的设备管理器中确认其串口号,然后使用Putty或SecureCRT等工具通过端口号连接。根据不同机型,有的可能需要提升Root权限,有的可能需要登录。

有些路由器厂商屏蔽了开启SSH远程登录的功能,但它的固件是使用OpenWrt固件定制的,这类便有机会通过浏览器注入等方式打开屏蔽的SSH。然后利用IP地址和端口号(默认22)使用Putty、Xshell等工具建立Shell连接。

而像ACRH17,华硕官方本身提供了打开SSH的设置,我们在系统管理->系统设置中将启用SSH选项设置为是即可打开SSH。然后利用IP地址和端口号(默认22)使用Putty、Xshell等工具建立Shell连接。

备份原厂数据

备份原厂数据也有拆机和免拆机两种方法。

目前路由器存储固件采用的存储器通常是SPI Flash或NAND Flash。SPI Flash一般会是8MB或16MB,容量较小;而NAND Flash容量相对大一些,比如ACRH17的NAND Flash容量为128MB。拆机取下存储器,通过烧录器连接电脑直接读取整个存储器的二进制映像以备份的方法是一种可靠的方法,但其需要的技术和工具也是个麻烦,SPI Flash的烧录器约20元左右即可买到,而NAND Flash的烧录器价格几百上千,这绝不是电子爱好者可以承受的。

ACRH17采用的128M NAND Flash方案,笔者家贫,没有NAND Flash烧录器,上文种已经获建立了SSH的连接,本文主要介绍的便是通过Shell备份。

  1. 使用以下命令查看分区结构,从回显的信息我们可以得知有mtd0~8共九个分区,以及其对对应的名字。
admin@RT-ACRH17:/tmp/home/root# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00400000 00020000 "Bootloader"
mtd1: 07c00000 00020000 "UBI_DEV"
mtd2: 0005d000 0001f000 "nvram"
mtd3: 0001f000 0001f000 "Factory"
mtd4: 0001f000 0001f000 "Factory2"
mtd5: 03013000 0001f000 "linux"
mtd6: 02e11440 0001f000 "rootfs"
mtd7: 03013000 0001f000 "linux2"
mtd8: 02e11440 0001f000 "rootfs2"
  1. 使用 dd if=/dev/mtd* of=/tmp/mtd*_NAME.bin 命令依次备份各分区,备份文件的名字建议使用分区序号加名称。例如备份Bootloader的命令如下:

    admin@RT-ACRH17:/tmp/home/root# dd if=/dev/mtd0 of=/tmp/mtd0_Bootloader.bin
    8192+0 records in
    8192+0 records out
  2. WinSCP使用SSH的连接信息登录,然后从 /tmp 目录复制到本地进行妥善保存即可。需要注意的是, /tmp 目录是存在于路由器的RAM中的,断电后会丢失,所以在操作完毕前不要断电或重启路由器。

  3. 实践发现因为UBI_DEV分区太大,临时分区的剩余空间不足以存储其备份文件,这时我们可以借助一个U盘来存储备份的文件。插入U盘后可以在 /mnt/ 目录下看到U盘,使用U盘存储空间的路径替换上文命令的 /tmp/ 即可将文件备份到U盘中。此方法便不需要WinSCP来传输备份文件了。

  4. 虽然备份的文件大概率我们是不会用到,但是有了备份后我们便可以更放心的为其刷入固件了。

注意:ACRH17较重要的便是Factory区,其称为ART分区。据说其存储了该机器的无线校准数据,此为备份的重点关注对象。将所有分区全部备份后, 我们可以根据其名称和大小分析其具体的功能,有经验的大佬甚至能将其切割拼接做成编程器固件(可使用WinHex工具处理)。

刷入新固件

这次刷的是ACRH17,参考多数大佬的方案,刷不死OpBoot和OpenWrt。因为原厂系统以及默认的OpenWrt固件均不允许修改Bootloader,所以需要先刷入允许写入Bootloader的特殊OpenWrt固件,此功能是在OpenWrt固件编译时配置的。

  1. 在ACRH-17原厂固件升级页面上传并刷入解锁Bootloadder的 squashfs-flash-factory 固件并重写启动。

    用户名:root 密码:password

  2. 使用U盘或WinSCP将opboot文件传输到路由器的 /tmp 目录下,参考使用以下格式命令计算其MD5并核对是否损坏,如有损坏切勿刷入。

    md5sum /tmp/rt-acrh17-opboot-XXX.bin
  3. 校验无误后参考使用以下命令格式解锁Bootloader并使用OpBoot覆写。

    mtd unlock /dev/mtd0
    mtd -r write /tmp/rt-acrh17-opboot-XXX.bin Bootloader
  4. 按住WPS键接通电源,即可通过浏览器访问OpBoot固件更新页面,按页面提示上传固件即可刷入。

不同机型会有不同的方法。其他机型,有可以在原厂Bootloader中直接通过命令刷入新固件的,这种机型一般可在连接TTL串口时通过特定按键中断以进入Bootloader,也有可通过按键组合进入Web固件更新页面,但大多数的厂商会限制Bootloader只能刷入或引导原厂固件,这类情况一般通过更换第三方的Bootloader解决。具体可以参考Installing OpenWrt

如何将ACRH17刷回官方固件:本文方案已经将Bootloader和系统都刷写成了第三方,如果只需要将系统刷回第三方可直接在华硕官网下载该路由器的最新固件,然后解压并在OpBoot页面刷入即可。如果需要将Bootloader也刷会原厂,可通过OpBoot的高级功能刷写Boot loader实现,mleaf大佬在此处提供了相关文件。

参考

联通老用户更换套餐为互联网套餐

前言

营业厅办卡时推荐的套餐大多价格比较高,使用并不划算。如果平时手机数据网络上网较多,可以考虑购买大城市的校园网套餐,一般20元左右可以得到每月20~30GB的数据流量,但此类套餐往往只有一两年的有效期,不适合作为主号长期使用。如果平时没有在外看视频的习惯、流量用不太多,可以考虑使用互联网套餐。本文主要记录笔者将两张联通卡更换为互联网套餐的过程。

联通互联网套餐有哪些?

这个可以去淘宝搜索“联通换套餐”,有些店专门提供这种服务。他们会在宝贝详情页面提供一个服务单,告知有哪些套餐可以使用。目前互联网套餐最便宜的是8元流量王,套餐包含200MB通用流量+30分钟通话以及来电显示。性价比较高的卡有19元每月的天神卡和米粉王卡,3GB流量+100分钟通话以及来电显示;天神卡首年额外再送1GB,而米粉王卡则是头条系APP免流30GB。而月费22元的BiliBili 22卡则是2GB+100分钟,为哔哩系APP、新浪微博、百度贴吧、网易云等提供免流。另有阿里宝卡、腾讯王卡、滴滴王卡、懂我卡等其他套餐可供选择。有兴趣了解请自行去淘宝搜索。

操作流程

整个操作流程大致如此:中国联通微厅人工沟通、登记挂工单、相关业务单位联系用户沟通处理、收到短信提示办结。中途可能会遇到部分特殊情况,大多可通过投诉或暗示投诉解决。工信部还是很有分量的。以下沟通过程供参考:

# 关注微厅,发送 “转人工”。
提示:您已通过身份验证,正在为您转接人工服务,请稍等。
提示:坐席已接入,坐席【1XXXX】为您服务
客服:您好,很高兴为您服务,请问有什么可以帮您?
# 我:我想把套餐换成8元流量王
客服:130XXXXXXXX请问是该号码吗?
# 我:是的
客服:亲您目前使用的套餐是比较优惠的喔
客服:是什么原因需要办理转套餐业务呢
# 我:这号是以前在济南用的,现离开几乎不用了,但绑定某些东西销号不合适。
客服:麻烦提供一下130XXXXXXXX机主名+身份证后四位+证件地址
# 我:XX XXXX XXXXXXX (略)
客服:亲 查询到该地区套餐建议到联通营业厅咨询办理。
# 我:我不在当地了,您这边帮忙办一下可以么?
客服:稍等哦 亲
客服:4G全国流量王 8元套餐自费如下:
【月租】8元,包含来电显示;
套餐内包含200M国内流量,超出后国内流量资费10元/GB;
···略···
客服:是该套餐对吗
# 我:是的
客服:转入新套餐的话以下规则请知悉哦亲:···略···
# 我:了解了
客服:现在为您登记转套餐,次月生效
# 我:好的,谢谢
客服:好的,这边为您登记转套餐信息 交由我司工作人员为您处理 后续会有工作人员与您回电联系的 您留意一下
# 我:好的,谢谢

微厅客服挂工单后下午即有客服与笔者电话联系,告知原始业务已下架,更换套餐后无法换回。笔者表示了解后客服当即表示已经办理成功,下月生效。结束通话后几秒即收到办理成功的短信。

笔者家在山东某一末线城市,另一张卡属地是如此。微厅客服表示原始套餐含有归属地集团网业务,此会限制在线客服无法变更业务,需要归属地营业厅处理。反馈后当地营业厅客服电话与我沟通,其态度极其强硬、语气充满不屑,要求必须回属地办理,且威胁说以后可能就办不了了。本人当即表示不在属地,对其服务态度与方案非常不满,会考虑去工信部网站投诉,随后客服表示会再申报一下,稍后告知我新的处理方案。笔者写代办业务委托书,手持委托书与身份证拍半身照发属地营业厅处理。经了解,其他地区也有此类情况,这是一个合理的处理可行的方案。

2021.10更新:

今日登录联通网厅,发现莫名其妙多了一个3元/月的来话宝业务。是在8元业务生效的次月开始的,笔者当即拨打10010投诉,客服表示会登记核实返还话费。网上搜索相关问题,发现很多人在毫不知情的情况下自动开通此业务,且关闭一段时间后还会再次出现。请使用此套餐保号的网友注意检查每月话费详单,避免产生不必要的费月。

Proxmark3 Easy 复制4100卡到T5577卡

前言:

最近搬新住处,小区的门禁是用的ID卡,配一张卡30元。可以理解,但还是感觉很贵。想来手里有PM3 Easy,另外还有几张HACKNOWN的双频混合卡,记得它的低频是使用的T5577方案。把吃灰的东西用起来,也复习一下PM3的使用。

实践本文,您可能需要:

  1. Proxmark3 Easy
  2. 待复制的EM4100卡
  3. 空白的T5577卡
  4. 门禁刷卡机,用于验证复制的卡能否正常使用

EM4100卡简介:

EM4100卡工作频率为125KHz,是低频卡。发送数据时采用曼彻斯特编码,比特率为RF/64 。该卡存储64个只读数据位(bit),每个二进制位存储的不是0就是1。起始9个位为9个1,用作表示一次传输的开始。接下来传输10组数据,每组有4位数据+1位偶校验(每组5位中1的个数为偶数个),这个巧妙的设计在进行数据校验的同时确保了发送数据时不会出现连发9个1的情况,从而避免数据发送过程与起始信号冲突。这10组数据中前2组是用于标记版本或厂商,后8组是编号数据。10组数据位的后面跟随的是4位列校验位,最后以0为结束位。如下图所示:

01.jpg

什么是偶校验?所谓的偶校验即指定的一组二进制数据中限定1的个数为偶数,本例中,假如一组数据的数据位为0100(0x4),则目前1的个数为奇数,为了满足偶校验,会在校验位上写1以将1的个数补充到偶数个,这组数据最终就是01001。反之,如果数据位为0101,1的个数已经是偶数,为了满足偶校验,校验位上就写0。

EM4100卡片卡号:

上文中提到的10组数据,每组都编码了一个16进制值。这10个16进制值所构成的就是EM TAG ID这个ID是这张卡存储的所有信息。这也是卡片在读卡过程中发出的实际数据(当热,数据发送时还有发送校验位),因其发射数据时采用的时曼彻斯特编码调制方式,又称其为曼彻斯特内码(Manchester)

需要注意,曼彻斯特内码不在卡面标注ID卡表面通常会印有一串10位10进制数字,该数字为ABA码,它是由EM TAG ID去掉前2位后剩余的用户ID部分转换成10进制后得到的。较大的ID卡表面可能还会印有一个中间由 ,分隔的值,这个是韦根码(wiegand),它是使用ID代码倒数5、6位和后4位分别换算成10进制组成。

假设有一张EM4100卡片的EM TAG ID是:06008148DD 。那么它的ABA码就是:0008472797 [(HEX:008148DD)==>(DEC:0008472797) ];其韦根码为:129,18653 [ (HEX: 81 , HEX:48DD) ==> ( 129 ,18653) ] .

综上,EM TAG ID包含了卡片所有数据,且刷卡时发射的数据也是它,我们复制的新卡自然也应该是发送这些数据。

T5577空白卡简介:

T5577的Page0有8个区块,区块0存储的配置信息,用于配置卡片的工作模式。区块1~7可以存储用户数据,区块7也可以用于存储访问密码。每个区块有33个二进制位。通过把需要发送的数据存储在用户数据区,再通过修改区块0的数据,配置卡片工作方式,以此模拟EM4100卡片。

思路:

为实现目标,首先需要将T5577卡片配置在合适的模式下。曼彻斯特编码、RF/64、ST=0等。经过计算,T5577的Page0:Block0应该配置为:0X00148040。

接下来将EM TAG ID填入上文EM4100卡片简介的图中,计算行列校验位的数值并补齐,以此获得64bit的实际发送数据,将数据转换为16位16进制值,并将其依次写入Block1和Block2。

这样T5577卡片应该就会按照EM4100的方式工作了,在刷卡器上应该会被正常识别。

操作步骤:

实际PM3的命令中提供了更简单的操作方式,有一个命令可以将T5577写成EM4100的工作模式。

在开始之前,我们需要使用hw tune命令来测试天线是否正常。正常情况据说低频天线应该能测到10V以上的电压。但是我的不知是坏了还是怎么,表现如下,但是实际可以正常读写低频卡。

proxmark3> hw tune

Measuring antenna characteristics, please wait.........          
# LF antenna:  0.55 V @   125.00 kHz          
# LF antenna:  0.55 V @   134.00 kHz          
# LF optimal:  1.10 V @    46.88 kHz          
# HF antenna: 24.39 V @    13.56 MHz          
# Your LF antenna is unusable.

首先将原始的EM4100卡片防止在PM3的低频天线上,然后使用lf search命令搜索卡片。如果一切顺利,会有类似如下部分提示:

.....
Checking for known tags:

EM410x pattern found:           

EM TAG ID      : 06008148DD          
Unique TAG ID  : **********         

Possible de-scramble patterns 
.....

将EM4100卡片从低频天线上取下,将EM TAG ID记下来,稍后备用。至此,我们已经获取了EM4100卡片的所有数据。

将T5577空白卡放到低频天线上,运行lf em4x em410xwrite <EM TAG ID> 1 64命令,本例中EM TAG ID为:06008148DD,所以命令如下。

lf em4x em410xwrite 06008148DD 1 64

命令执行后,再次执行 lf search命令,若能够回显与之前的EM4100卡片相同之信息,即表示复制成功。考虑兼容性,具体能否使用还是需要到门禁处实际刷卡验证。

不同固件可能某些命令会不完全一样,比如,上文的命令在某个固件中需要使用以格式:

lf em 410xwrite 06008148DD 1

如果需要尝试识别某张卡是不是T5577卡,可以使用lf t55xx detect命令,回显信息类似如下即表明是。

proxmark3> lf t55xx detect
Chip Type  : T55x7          
Modulation : ASK          
Bit Rate   : 5 - RF/64          
Inverted   : No          
Offset     : 33          
Seq. Term. : No          

Block0     : 0x00148040          

Downlink Mode used : default/fixed bit length

使用了上面的lf t55xx detect命令后,可以使用lf t55xx dump命令获取T5577卡中每个块的原始数据。

假设我们需要单独写入某个块,我们可以使用lf t55xx wr <block> <data>的方式写入。以下是将0x00148040写入到块0中。

lf t55xx wr 0 00148040

网上也有人说要把块0写成0x001480E0,也有人说要把块0写成0x00148041,目前我写的是默认的0x00148040,如果不行,大家可以多试一试。如果命令使用过程遇到问题,可以使用help命令获取帮助。

PS:听说有些读卡器有针对T5577的检测,如果检测到是T5577就不响应,此种情况被称为防火墙,而瞒过此类检测的操作被称为穿过防火墙,T5577卡一般可通过添加写卡密码的方式做到穿防火墙,因为添加密码后必须使用正确的密码方可执行detect 和dump指令。

参考:

PGP加密电子邮件通信——使用Thunderbird搭配内置OpenPGP收发加密邮件

前言

The natural flow of technology tends to move in the direction of making surveillance easier,

the ability of computers to track us doubles every eighteen months.

----Phil Zimmermann

众所周知,通过互联网传输的的数据很容易被第三方监听和篡改。而我们发送电子邮件时,其数据会通过运营商线路发送到发件人邮件服务提供商的服务器,由服务商的服务器将电子邮件投递到收件人邮箱对应服务商的服务器,最终收件人从服务器上接收邮件。虽然目前绝大多数服务商支持传输过程的TLS加密,这基本杜绝传输中的泄密。但是,邮件原文仍会在双方邮件服务提供商的服务器上留存,这里留下了泄密的风险。如果有一种方案,在发件方发送前本地加密,收件方收到后本地解密,这样就避免了传输过程泄密和篡改。那么如何实现呢?

PGP(Pretty Good Privacy)中文可以翻译成:很不错的隐私。它是一种加密程序,可以为数据通信提供加密和身份验证。PGP可以用于对文本、邮件或文件进行签名、加密和解密。菲尔·齐默尔曼(Phil Zimmermann) 于1991年开发了PGP的最初版本,其最初用户为集权国家持不同政见者、民权主义者和密码朋克的“自由交流”活动家。PGP发布不久,便在美国以外的地方被使用。1993年齐默尔曼被美国政府以“无证出售军火”调查,因为当时美国法律规定大于40位密钥的密码系统被视为"军火",而PGP从未使用低于128位的密钥。菲尔·齐默尔曼以富有想象力的方式挑战了这些规定,他将PGP的源代码通过写成一本书出版了。因为枪支弹药、飞机和软件的出口被限制,但书籍的出口受第一修正案保护。几年后,调查以没有提起任何诉讼而结束。

联邦刑事调查结束后,菲尔·齐默尔曼和他的团队成立了一家公司开发PGP。PGP在随后的几年辗转倒手几家公司,作为一个商业软件,它遇到了一些专利问题,这导致它的使用遇到很多问题。而菲尔·齐默尔曼深信,PGP加密的开放标准对他们和整个加密社区都至关重要。后来IETF应其要求便成立了OpenPGP工作组。后来自由软件基金会开发了一个兼容OpenPGP标准的程序,称为GNU Privacy Guard,简称GnuPG或GPG。

可能有人注意到,在当下,某些对于信息安全比较注意的博主,或是独立调查记者、社会活动家。他们的个人网站电子邮箱附近会留有一个PGP KEY,其后跟着一个40位16进制数。这个数字实际是PGP公钥的指纹,通过它可以在公共PGP公钥分发服务器上找到其对应的完整公钥。有了PGP公钥,我们便可以向其发送加密后的电子邮件了,电子邮件在到达对方的邮件客户端前的整个传送过程,一直都是密文。而除非窃听者获取了对方的私钥,否则无法获取到原文。

Thunderbird是一款开源免费的电子邮件客户端,用于发送,接收和存储电子邮件,分别支持Windows、MacOS、Linux等平台。它目前由开源社区负责维护,它被PRISM BREAK项目所推荐。之前它需要搭配Enigmail插件使用OpenPGP加密,目前Thunderbird 78 原生支持两种加密标准,OpenPGP 和 S/MIME,所以不再需要插件。官方文档描述,Thunderbird 78 OpenPGP标准支持是通过RNP实现的。

实践本文内容前,您可能需要知晓以下内容:

  • 准备一个电子邮件账户,需要服务提供商支持IMAP或POP3协议

  • 如果对安全要求较高,需确认当前系统无恶意软件

  • 如果对数据安全要求极高,建议全盘加密

本文描述的方法用于避免传输过程中邮件内容被窥探,用于证明发件人身份。对于发送前的内容泄密、私钥泄露等皆无力应对;且随着技术发展,此方法并非能够永远安全,请谨慎。

1. 安装Thunderbird并配置邮件账户

  1. Thunderbird的安装非常简单。大多Linux发行版都默认安装了它。而在Windows下的安装也非常简单,只需要从官方网站下载适合您语言和系统的安装程序,然后运行安装程序跟随提示安装即可。如果需要修改安装位置可以选择自定义,然后修改安装位置,其他不再赘述。

  2. 安装完成后运行Thunderbird,会提示您配置邮件账户。如果您关闭了这个窗口,可以点击菜单键(其在主窗口关闭下方,图标是三根横线,下文简称三横菜单键),在菜单中点击新建 > 已有电子邮件账户... ,打开邮件账户配置窗口。
    1-0.png

  3. 按提示填写发件时显示的名字,电子邮件账户地址,密码,然后点击 继续

    1-1.png

  4. Thunderbird会自带尝试检索邮件服务器配置信息,如果找到,会自动在下方列出。如果检查到的信息与您实际情况相同,可以直接点击 完成 按钮,完成电子邮件账户的添加。

    1-2.png

  5. 如果找不到,或找到的配置信息不正确,您可以点击 手动配置(M)... 按钮,手动填写从邮件服务商处获得的服务器信息。填写无误后点击 完成 按钮,完成电子邮件账户的添加。

    1-3.png

警告:请确保以上配置中“接收”和“发出”均配置了SSL(安全套接字层)或STARTTLS(启动传输层安全性),这保证您与电子邮件服务商的网络连接是加密的。

注意:如果您电脑系统登录的是公用账户,请不要勾选记住密码。为了数据安全,不建议在公用账户做加密邮件通信。详细参考该官方文档

注意:某些邮箱,例如网易邮箱、Gmail,可能不再支持使用网页登录的密码连接POP和IMAP服务,需要在网页端按提示生成专用的连接密码。

2. 生成并配置密钥

配置好电子邮件账户后,接下来便是通过内置的OpenPGP密钥管理器生成密钥对。

  1. 在主界面点击三横菜单键 > 账户设置 ,在左侧您的邮箱下的选项中选择 端到端加密 ,在右侧界面的OpenPGP栏目中点击 OpenPGP密钥管理器(K) 按钮以打开OpenPGP密钥管理器。(密钥管理器 也可以从 三横菜单键 > 工具中访问)

    2-1.png

  2. 点击上方菜单栏中的 生成(G) > 生成新密钥对(K) ,弹出的新建OpenPGP个人密钥窗口。在身份标识处选择您使用的邮箱。密钥到期日建议选择到期时间2年或3年,不建议设置永不过期。密钥类型选择RSA,密钥大小选择4096,点击 生成密钥 按钮,在接下来的页面中会询问您是否确定生成,核对无误点击确定等待片刻即可生成密钥对。

    2-2.png

  3. 关闭密钥管理器,此时应该能够在OpenPGP栏目中看到新添加的密钥。点击选中新添加的密钥,即可将该密钥对应用于此电子邮件账户。

    2-3.png

可选安全配置:为了更高的安全性,有以下可选项设置,但以下设置会导致易用性下降。

  • 禁用远程内容。这个设置在选项 > 隐私与安全 中 ,允许消息中的远程内容,此选项默认设置就是不启用的。关闭此选项可在一定程度上降低邮件远程内容加载项带来的攻击风险。
  • 禁用HTML电邮呈现。打开 三横菜单 ,点击 查看 > 消息体为(这个翻译太草了) ,此处默认是原始HTML,将其设置为 纯文本 可以更大程度上避免HTML加载项导致的黑客攻击,但会导致大量HTML格式的邮件呈现为几乎不可读的状态。建议只在安全要求极高的情况下使用。
  • 禁用HTML电邮撰写。此设置在账户设置 > 通讯录选项 下 。编写以HTML格式编写消息 默认为勾选状态。如果要使用纯文本方式撰写邮件,需要把此勾选去掉。
  • 启用默认签名与加密。此设置在 账户设置 > 端到端加密 下。将 发送消息时的默认设置 改为 默认要求加密 ,勾选默认添加我的数字签名。这个设置可以避免忘记加密将邮件发出。但会给平时不发送加密邮件的场景带来麻烦,按需启用。
  • 将草稿和模板保存在本地。此设置在 账户设置 > 副本和文件夹 下,将草稿和模板的保存文件夹设置在本地,而不是邮箱的远程文件夹中,这可避免未完成的、未加密的草稿被自动上传至邮件服务商处,此设置按需配置。

导出私钥:

导出私钥备份到安全的地方可以降低意外导致私钥丢失的情况。私钥丢失将导致您无法解密他人发送给您的加密邮件,这也是一件令人尴尬的事情。同时,Thunderbird中自带的OpenPGP密钥管理器功能有限,后续的发布操作也需要导出到GnuPG完成。

运行Thunderbird,三横菜单键 > 工具 > OpenPGP密钥管理器。在密钥管理器中选定要导出的项目,然后点击 文件 > 备份私钥为文件 。在弹出的窗口设置保存的位置与文件名称后点击保存,然后在弹出的设置密码窗口中设置密码,最后点击确定完成导出。

2-4.png

注意:此处生成的密钥对包含私钥和公钥。私钥需要安全保存,绝对不共享给其他人。公钥您可以公开分享给信任你的人。具体的使用会在后面的内容中讲述。

3. 加密邮件的发送和接收

要实现加密邮件双向收发,需要双方分别拥有自己的密钥对,并且互相持有对方公钥。这需要一个交换的过程,通常可以将公钥导出,作为附件发送给对方。然后通过电话、线下见面等方式核对公钥的指纹,确保对方收到的公钥没有问题。以下假设Alice和Bob两人要交换公钥。

  1. Alice打开OpenPGP密钥管理器,在自己的密钥对上右击,选择 将密钥导出为文件 ,选择合适的地方保存,这就是导出的PGP公钥。Alice给Bob发送一个未经PGP加密的邮件,将刚才导出的PGP公钥作为附件发送。此步骤可简化为:Alice打开OpenPGP密钥管理器,在自己的密钥对上右击,选择 通过电子邮件发送公钥

    3-1.png

    在弹出的邮件撰写窗口中填写Bob的邮件地址并完善标题与正文内容,确定安全选项下为不加密,点击发送即可。

    3-1-1.png

  2. Bob收到邮件后,下载附件中Alice的公钥。打开OpenPGP密钥管理器,点击 文件> 从文件导入公钥 ,选择Alice的公钥。在弹出的要导入下列密钥吗?的窗口中会显示当前导入公钥的指纹,通过其他可信途径与Alice核实指纹是否正确,核对无误后选择 接受 ,然后点击确定。在新弹出的成功信息页上点击 查看详细信息并管理密钥接受度 ,在 您是否接受 选项下选择 接受,我已验证这的确是正确的指纹 ,点击确定键完成设置,然后关闭密钥管理器。

    3-2.png

    3-2-1.png

  3. Bob完成Alice公钥的导入后,打开OpenPGP密钥管理器,在自己的密钥对上右击,选择 通过电子邮件发送公钥 ,在弹出的邮件撰写窗口中填写Alice的邮件地址并完善标题与正文内容,点击 安全 右边的下拉按钮,选择 要求加密 选项,点击发送即可将公钥和邮件以加密的方式完成发送。而加密后的内容只有Alice的私钥能够解密。

  4. Alice收到邮件后,Thunderbird会自动使用Alice的私钥解密邮件内容。Alice下载附件中Bob的公钥,参考步骤2的过程将Bob的公钥导入自己的OpenPGP密钥管理器。到此双方便可以互相发送加密邮件了。结果如下图所示。

    3-4.png

还有一种方法是将公钥发布到公钥服务器上,然后双方通过可信的途径交换公钥的指纹。让对方通过指纹或密钥ID来搜索并获取公钥。然后添加时核对指纹,如果没有差异即表示正确的交换了公钥。如何将公钥发布到公钥服务器会在后面内容中讲述。

4. 延长过期密钥

若要延长过期的密钥,在密钥管理器窗口中选择过期的密钥对,右键菜单选择 密钥属性 ,然后在打开的窗口中点击更改到期时间,重新设置到期时间(建议2~3年),密钥对会被更新。之后需要重新与通信伙伴们分享公钥。如果有在公钥服务器上发布,则需要重新发布以更新。

4-1.png

注:该部分笔者没有实际尝试操作,仅供参考。

5. 公钥发布与吊销

上文内容已经实现了PGP加密邮件通信。此处研究一下通过公共密钥服务器发布自己的公钥。这个活单纯靠Thunderbird搞不定,因为它没有这样的功能。为此,我们需要安装一个GnuPGP软件包,因为本文环境为Windows系统,所以需要下载安装Gpg4win。然后使用它将公钥发布到公钥服务器上。

安装Gpgwin:

  1. 从官网下载Gpg4win安装程序,双击运行安装程序,点击 下一步

    5-1.png

  2. 按需要从可选组件中选择要安装的组件,Kleopatra是一个窗口化的密钥管理器,GPA是GNU隐私助理,GpgOL是Outlook插件,GpgEX是资源管理器插件。本文只用到了Kleopatra的部分功能,还有部分操作用命令行淦。选择需要的功能后点击下一步。

    5-2.png

  3. 设置安装位置,建议默认位置即可。然后点击安装,等待其完成安装后退出安装程序。

    5-3.png

导入密钥对到GnuPG:

从Thunderbird中导出的私钥文件,在Gnu PG的图形化前端Kleopatra中进行导入。导入后加解密一段任意文本,以触发并完成私钥本身的解密流程。这是一个方法,如果安装了Kleopatra。否则我们也可以在命令提示符中完成。

  1. 使用以下命令进入备份目录(本例为E:\Sec\TEST\),并执行导入。会弹出一个输入密码的对话框,输入之前从Thunderbird中导出时设置的密码,然后点击OK完成导入。

    C:\Users\Lexsion>E:
    E:\>cd Sec\TEST
    E:\Sec\TEST>gpg --import Alice-secret.asc

    如图:

    5-B-1.png

    成功后有类似以下提示:

    gpg: key FFFFFFFFFFFFFFFF: "Alice <Alice@Alice.com>" imported
    gpg: key FFFFFFFFFFFFFFFF: secret key imported
    gpg: Total number processed: 1
    gpg:               imported: 1
    gpg:       secret keys read: 1
    gpg:   secret keys imported: 1
  2. 使用以下命令查看有哪些密钥,记下我们刚导入的密钥对的8位密钥ID,即指纹的后8位(本例为:67A7B3D5)。

    E:\Sec\TEST>gpg --list-keys

    部分缩写介绍:

    sec => 'SECret key'
    ssb => 'Secret SuBkey'
    pub => 'PUBlic key'
    sub => 'public SUBkey'
  3. 使用以下命令结合刚才获取到的指纹ID编辑密钥对,将信任等级改为完全信任。完成后退出。

    E:\Sec\TEST>gpg --edit-key 67A7B3D5
    gpg> trust
    
    Your decision? 5
    Do you really want to set this key to ultimate trust? (y/N) y
    
    gpg> quit

    如图:

    5-B-2.png

    5-B-3.png

编辑状态时,usage标记的解释:

Constant           Character      Explanation
─────────────────────────────────────────────────────
PUBKEY_USAGE_SIG      S       key is good for signing
PUBKEY_USAGE_CERT     C       key is good for certifying other signatures
PUBKEY_USAGE_ENC      E       key is good for encryption
PUBKEY_USAGE_AUTH     A       key is good for authentication

发布公钥到公共服务器:

我们仍假设8位公钥ID是“67A7B3D5”,使用以下命令将公钥发布到公共服务器“keys.gnupg.net”。您也可用发布到其他的服务器,主要的公共密钥服务器之间会定期互相同步的。

 gpg --keyserver keys.gnugp.net --send-keys "8D253E8A"

稍等片刻,我们可以尝试用以下命令查询服务器中是否已经有我们的密钥。

gpg --keyserver keys.gnugp.net --search-keys "user-name/e-mail/fingerprint"

撤销公钥:

公钥一旦发布到了公共的公钥服务器上,那便谁都可以获得了。如果哪天我们私钥丢失,无法解密;或是私钥泄露,不再安全怎么办?我们便需要一种机制,可以用来声明公钥已经失效,让大家不要再使用。于是便有撤销公钥的操作,原理便是用私钥签一个公钥回收证书,加入到原有的密钥链中。注意:为了更大程度保证此操作可用,公钥回收证书建议在发布公钥前导出,妥善保管,若需要撤销公钥时直接导入,避免丢失公钥,无法生成撤销证书。

使用以下命令生成回收证书,revoke.asc为文件名,文件会放在当前操作目录。

gpg --output revoke.asc --gen-revoke "8D253E8A" 

使用以下命令将公钥回收证书导入到公钥中。这个操作将在本地撤销公钥,使本地的公钥状态变成已失效(revoked) 。但不会影响已上传到公钥服务器中的数据。

gpg --import revoke.asc

使用以下命令搜索公钥服务器,以确定是否有这个公钥。

gpg --keyserver keys.gnugp.net --search-keys "8D253E8A"

确定服务端有这个公钥的记录之后,使用以下命令上传导入了回收证书的公钥,这样便更新了服务器上的记录。

gpg --keyserver keys.gnugp.net --send "8D253E8A"

稍后我们再使用前面的命令从公共公钥服务器上搜索,便会看到公钥的状态变成了(revoked)。以上即完成了公钥的撤销。

Q&A:

Q:PGP、OpenPGP、GnuPG、GPG、Gpg4win分别是什么,它们有什么关系?

A:相关的问题在前言中有部分提到,PGP是这项技术最早的开发者针对加密程序的命名,目前它是个商业软件,属于赛门铁克(Symantec)。OpenPGP是这项技术的标准,它是商业运作PGP过程中发现专利问题后为了更好发展提出的开放标准。GnuPG全称GNU Privacy Guard,它是自由软件基金会开发的一个兼容OpenPGP标准的程序,其又简称GPG,它是PGP的开源替代品。Gpg4win是一个Microsoft Windows下的软件包,其包含GnuPG核心程序、证书管理器和加密插件。除了OpenPGP作为技术标准名称,其他都是软件名称,他们几乎通用,但支持的加密算法会有不同。

Q:公钥、私钥、指纹、密钥ID分别是什么?

A:公钥用来加密和验证签名,私钥用来解密和签名。指纹是从公钥产生,长度为40位16进制数。密钥ID是公钥的ID,分为长ID和短ID两种,长ID是指纹的后16位,短ID是指纹的后8位。长短ID仅作为方便搜索使用,交换、使用公钥时务必完整核对指纹,避免碰撞攻击。

Q:导出的PGP私钥文件是否包含公钥?

A:导出的PGP私钥文件是包含公钥的,如果你尝试将导出的私钥在其他设备上导入,导入后便能看到其包含公钥。另外,可以使用pgpdump分析私钥文件来研究这个问题。

Q:私钥导出时要求我设置了密码,但是导入时没有提示输入密码就成功导入了?

A:导出私钥时设置的密码是有用的,私钥确实使用您设置的密码加密了。部分GnuPG公钥管理器是这么设计的,导入操作本身是不需要密码的,但是导入后的私钥仍在加密状态,这个状态的私钥是不能使用的。可以使用这个私钥解密一个文件,其会自动提示让您输入之前设置的密码以解锁私钥。本文使用的命令界面操作,没有遇到此问题。

Q:据说其他新的加密算法更加优秀,为什么还要用RSA?

A:为了保证更好的兼容性,所以还是建议选RSA。

Q:POP3和IMAP有什么区别,怎么选择?

A:POP3和IMAP是两种不同的协议,相比IMAP,POP3是一种简单协议。POP3协议将邮件移动到本地,尽管服务商处可以设置将消息保留在服务器上。而IMAP协议是访问、操作远程服务器上的文件夹,下载到本地的被称为副本。IMAP客户端可以对远程服务端的邮件执行各种复杂的操作,它支持通过读写远程服务端的标志以跟踪同步邮件的状态。POP3要求连接到邮件服务器的客户端是唯一 的,IMAP支持多个客户端同时访问。如果需要在多个客户端访问邮件,选择IMAP协议;如果需要邮件接收到本地,不想邮件保存在不受自己控制的服务商那里,选择POP3协议(前提是服务商处的设置确实会在邮件接收后删除邮件,据了解,主流服务商不是这样的,所以推荐IMAP)。

Q:在Android系统下该选择什么邮件客户端?

A:PRISM BREAK项目推荐K-9 Mail,这个应用在GitHub上有开源项目,可以看到完整的源代码。它可以在F-Droid应用市场下载,这个也是闻名的开源Android应用市场。相信开源的项目更让人放心,本人没有尝试过此应用,具体使用方法本文不研究。

参考:

HP39gs计算器改装锂电池供电

前言:

简而言之,就是切断电池仓正极连接,换成锂电池。为锂电池并联一个充电模块,充电模块供电从MINI USB接口取电。ADC电压采样电阻是R17和R18,把R17 换成 1MΩ 、R18 保持 2MΩ 不变,这样修改后,使用锂电池时电压高于3.85V,应当不会再提示Low Bat。按照这个核心方案干就完了,下面全是废话。

(回忆···)

首先说明,下文讲述的笔者是5年前干的事情的,前端时间看见欠陥電気大佬写的搞机贴,觉得此事我可以水一篇博文。那时我还是在校学生,是校电协成员。记不清是哪位朋友发现这款型号为HP 39gs的计算器在某宝以非常便宜的价格销售,仅27.58元。从来没有接触过图形计算器的我,通过搜索引擎了解到这款计算器属于图形计算器,2006年上市,当时售价千元。里面是一枚SAMSUNG S3C2410A ARM处理器,该处理器最高频率约200MHz,在该计算器中,官方设计为75MHz。据说可使用HP Basic编程语言编写程序以在此计算器上运行,另外其不支持CAS,这些我不懂。我们几位社员一合计,咱们也从来没用过图形计算器,现在有机会必须试试。好家伙,这计算器值!于是大家就入手(Keng)了。注:经简单了解,目前此计算器价格有所上涨;另外因年代久远且其设计理念不佳(S3C2410A上运行的Saturn CPU模拟器,然后模拟器上运行SysRPL),所以在当今看来,功能少,运算慢,据说其根本不适合日常工程计算使用。购(Ru)买(Keng)需谨慎!当然,笔者拿来当普通计算器算个加减乘除感觉还是可以的。算的数多了也慢。

基本规格:

*
型号: 惠普 HP 39gs 图形计算器
CPU: Samsung S3C2410A(ARM920T单核) @75MHz (实际最高约200MHz)
Memory: 256KB RAM (用户实际可用约200KB) ,1MB Flash
通信接口: USB Mini-B(Kermit 或 XModem协议) , IrDA ,4PIN 3.3V异步串口
供电: 4×AAA电池作为主电源 ,CR2032纽扣电池用于数据保持
屏幕: 131×64 像素+上方状态条 单色LCD,对比度可调
语言: sRPL , HP-Basic
其他: 内置蜂鸣器,带有硬质保护壳,不支持CAS
上市时间: 2006年 06月

注:上表信息来自维基百科

准备工作:

实践本文内容需要如下硬件准备:

  • HP 39gs 计算器
  • 合适大小的锂聚合物电池
  • 锂电池充电模块
  • 导线若干(建议线规约22AWG)
  • 螺丝刀(十字 1.0左右)
  • 薄型撬片(或撬棒)
  • 万用表(选配)

需要在技能树中点亮如下技能:

  • 电子产品拆卸技术
  • 基础电路知识
  • 基本锡焊技术

警告:电子DIY需要有一定的相关知识与技能,操作过程有静电损坏元器件风险,使用烙铁焊接有烫伤风险。请谨慎操作,避免受伤或损坏设备。笔者不会对您的改装行为所造成的任何损失负责!

改装:

我们在使用一周后发现了这一问题,耗电太快了。四枚普通AAA电池,使用一个星期就低电警告了。这对于我们这种穷苦学生怎么承受的了,所以大家想改锂电。原有供电系统为6V,考虑S3C2410A为3.3V IO系统,外围器件也多为3.3V供电,所以考虑单节锂电池供电是可能的。那年正是MPOS火爆推广的时候,1元即可买到一个MPOS还包邮,里面可以拆出拇指电池、4055单节锂电池充电IC、3.3V LDO、高精度运放IC、蓝牙模块、单片机(运气好可能是STM32)。这便给改装提供了思路,杀一只MPOS即可提供电池和锂电池充电IC,如果嫌一节电池容量太小,可以杀两只POS鸡。整个改装过程主要分为以下几步:

  1. 拆机
  2. 验证实际工作电压范围
  3. 查找并改装电压采样
  4. 制作充电电路
  5. 装配以完成改装

1.拆机:

该机器拆机简单,首先取下硬质塑料保护壳,使用薄撬片小心取下屏幕保护盖,避免划伤。使用螺丝刀拆下两颗螺丝,然后使用撬片沿机身四周撬开并取下底壳。需小心注意底壳上有电源与蜂鸣器的连接线,避免失手扯断连线。必要可使用烙铁拆焊部分连接线。请牢记各连线焊接位置,必要可拍照记录,以确保在装配时能正确复原

2.验证工作电压范围:

拆下主电源(电池仓)连接线,临时焊接测试线,连接到数控电源,使用数控电源输出模拟锂电池电压变化。经过粗略测试,电压需要保持在3.68V以上计算器才能正常工作。虽然锂电池可以放电到更低的电压,但是计算器不能在那个电压下正常工作。这表示,虽然使用单节锂电池方案不能完全使用电池的电量,但也是可行的。

3.查找并改装电压采样:

首先检查主板上的所有IC,发现没有ADC。猜测低电检测是使用CPU内置的ADC实现的,4枚AAA电池电压高达6V以上,必有分压电路进行电源电压采样后再输入ADC。一般来说,电压采样电路可能更靠近ADC,此处即应靠近S3C2410A。考虑专业设计一般会引出测试点,先对周围测试点进行电压测量,如果能测到一个会随电源电压变化而变化的电压,大概就是电压采样测试点,如果测不到那就该对周围的电阻两端进行测量,找出会随电源电压变化的点。经过测量发现,S3C2410A右上角的测试点明显符合预期。观察PCB走线,发现与R17和R18有连接。测量两颗电阻阻值分别为1.8MΩ和2MΩ,皆在兆欧级别,也符合电压采样分压电阻的规格。至此,便成功的找到了分压电路。

理论上,接下来通过数控电源提供各种电压进行测试,确定ADC输入的电压低于多少时触发低电提醒。测量后我们确认到的是2.4V,实际电池低电电压与ADC触发电压的差与ADC触发电压的比值即为R17和R18的比值。经过估算,R17 = 1.5MΩ 、R18 = 3.9MΩ应当是个不错的组合。但是实际更换后并不能按照预期提示低电,无论电量多低都没有低电提示,直到电压低至无法开机也没有低电提示。鄙人学艺不精,无法理解什么原因,但这是无法接受的。经过多次实际测试,最终我们选择将R17 换成 1MΩ 、R18 保持 2MΩ 不变,这样计算器大约会在低于3.84V提示低电,充电至高于此电压后便不会出现低电提示。

4.制作充电电路:

可充电的锂电池装到计算器里面,当然不能没有充电电路。大家可以某宝购买TP4055、TP4056等充电模块,价格很便宜。笔者当年使用了中指甲盖大小的一片单面洞洞板,将MPOS机中拆出的4055充电IC整到了上面。4055充电IC为SOT23封装,以左下角为起点1脚,逆时针旋转依次为2~5脚。1脚接充电指示LED负极,LED正极过1K电阻上4脚,与其一同连接至输入+;2脚接GND;5脚为充电电流编程脚,过一个电阻接地,阻值大小视电池容量决定;3脚为输出,连接到电池+。

5.装配:

最后我们需要将计算器装起来,前面如果都能搞定,这个并不难。把电池的正负极与充电模块的输出正负极分别连接,然后连接到计算器的主电池输入。从USB口附近或其他方便的地方引出5V电源和GND到充电模块的输入。切断电池仓正极的连接,把电池粘在底壳合适位置以保证能盖好底壳,然后把充电模块粘在电池仓缝隙处,保证能从外面看到充电指示灯。最后把底壳装回去就大功告成了。

参考:

HP 39gs --惠普官网

hpcalc.org

The HP HOME view

将 HP 39gs 升级为 HP 48gII--欠陥電気

计算器自检/HP-39GS

HP39gs 从入门到精通(完全教程)

我该用什么词典?——翻译工具的选择

前言

在研究电子技术和计算机技术的过程中,大家都不可避免的需要接触英文资料;如果英语水平不够,遇到不懂的单词、甚至成段看不懂的情况,那便需要翻译了。传统的纸质词典、电子词典等使用相对低效,在我们使用电脑看英文文档的当下,翻译这件事自然也是用电脑完成。通常,我们会通过浏览器使用谷歌、必应、百度、有道等提供的在线翻译网页查单词、整段翻译,也会在电脑上安装翻译工具程序进行翻译。而后者,作为一个应用程序,通常能提供比通过浏览器工作的在线翻译更好的使用体验。本文前部分会使用较小的篇幅记录笔者翻译工具使用史,后面的部分则介绍笔者如何配置、使用商业词典欧路词典和开源词典GoldenDict。

笔者的翻译工具使用史

说起笔者最开始使用的翻译工具,那应该是有道,那时我刚接触电脑时间不长,只是偶尔用词典软件查过几个单词,安装词典可能只是为了体验通过电脑查单词的这个过程。那时有道有鼠标取词的功能,闲暇时刻我会用鼠标胡乱指向一些中文的词语,将其翻译成英语。

后来笔者入了电子技术这个坑,阅读Datasheet的困难便随之而来,虽然我英语从未挂科,但只满足不挂科的英语水平的确不足以阅读Datasheet,更别提里面很多专业的词汇上课也不会学。可能那时比较流行使用破解版商业软件,又可能是因为PDF文档中取词的需求。看了百度上众多网友的推荐,我选择了使用破解版的金山词霸企业版,因为里面多个词库看起来蛮专业的,而且它有Adobe Reader取词插件,可以很方便的在PDF文件中拖动光标选取内容进行整段的翻译,翻译结果会自动显示。而有道不支持Adobe Reader,自然不会再使用它。

转眼来到2021年的某一天,我秃然发觉金山词霸是用了那么多年,想来这么多年过去,翻译工具是否会有更好的选择呢?一番搜索之后发现很多人都推荐欧路词典,下载安装后发觉界面不错,自带词库查词返回内容也挺多,支持整段的翻译,甚至它还有一个截屏取词的功能。取词与划词默认配置可能不适合所有人,其选项可以根据个人需求进行更改。虽然是商业软件,它的免费版本也没有广告,这点值得称赞。欧路词典可以挂载第三方提供的词库扩展,支持常见的Mdict和灵格斯格式。针对扩展词库,免费版本只能显示前两个。其实对于非英语专业来说,两个可能也够了。如果需要挂载更多扩展词库,欧路词典的价格也不贵,也就三箱桶面的样子。

通过对欧路词典几天的使用,我发现它经常出现划词翻译失灵的现象,这个问题也有可能是和其他翻译工具冲突的原因。抛开此问题不谈,我还发现它的鼠标取词功能识别率略低,之前使用金山词霸几乎没有的识别错误问题,短短几天欧路发生了好几次,但是后来的几天错误率降低了。但是软件版本并没有更新,这个表现很迷,难道是后台直接更新了部分文件还是什么其他的东西自动改变了?这些表现可能与我电脑软件环境有关,但我还是对欧路词典的稳定性抱有怀疑。

在发现欧路词典可能不稳后,开始寻找其他替代方案。想起前面看到的Mdict格式,便打算去了解了一下Mdict是什么,通过搜索引擎搜索后了解到这也是一款词典,功能不是很强,但是很多权威大辞典都是打包成这种格式。然后看到有人对Mdict、欧路词典和GoldenDict进行了简单对比,我了解到了GoldenDict是一款开源软件,它支持的词典格式较多,同时它也支持Mdict格式。然后发现了nonwill大佬优化过后的GoldenDict++OCR,这是支持OCR取词的GoldenDict版本。下载简单使用了一下后发现,功能确实挺不错,它还有一个称之为构词法规则的功能很实用。但它没有欧路词典这种商业软件那么美观的界面,配置也会比较复杂,想要使用它需要一定的折腾能力,但它是免费的。

目前我主要尝试使用欧路词典,而GoldenDict为辅。因为我不是英语专业类工作,也不是英语研究爱好者。我只是需要一个翻译工具用来翻译我无法读懂的文档。这种情况,一个简单易用美观的翻译工具是有必要的。如果欧路词典的划词稳定性没有问题,我可能会考虑购买付费版本;如果有问题,则会考虑换用GoldenDict。

词典的配置与使用

以下记录笔者使用时的配置,系统为Windows10,其他系统没有测试。仅供参考。

欧路词典:

首先是第三方词库的安装,因为免费用户只能加载两个扩展词库,所以需要做一些取舍。如可以安装一部带发音的词频词典和一部权威大词典(或行业词典),排序时把词频词典放第一,自带英汉汉英放第二,权威大辞典放第三以避免长篇幅挡住自带词典内容。如果不使用权威大辞典而是使用词条篇幅较短的行业词典,可以考虑和自带英汉汉英对调。

添加词典的操作过程。单文件的词典直接在词库管理中点击安装词库>选择文件,按照提示添加即可。多文件的词典安装时需要点击安装词库>选择文件夹。包含外观样式文件的词典,需要现在设置中心中点击打开软件配置目录,打开欧路的配置文件目录,复制词典自带的样式文件到这个目录。

欧路词典的划词翻译功能可能有问题,勾选开启划词翻译功能选项,使用光标选择一段内容后会出现翻译按钮,点击此按钮有时会出现无效的情况。但是手动划词快捷键F7按下还是能正常翻译的。这个问题可能是本人系统环境造成,也可能是欧路词典本身的Bug。针对此问题,建议记住快捷键F7,去掉开启划词翻译功能选项勾选,后期使用快捷键调用划词翻译。再记住一个截屏翻译快捷键:Ctrl+Alt+D,必要时可以直接截屏翻译。我个人始终认为:快捷键比点击图标更高效

其他设置就是比较常规的,比如我勾选了关闭窗口时最小化到状态栏。这样就可以缩到通知区域里面,不占用任务栏了。勾选启动Windows系统时自动运行,这样就可以随系统启动。如果不喜欢它的每日一句等在线内容,可以取消这个勾选,主页就会更清爽一些。其他一些快捷键也可以按实际习惯修改。

GoldenDict:

主程序安装与配置官网提供的版本已经太旧了,不支持mdx和mdd格式的词典文件,可以去SourceFORGE下载。建议使用nonwill大佬优化过后功能更强大的GoldenDict++OCR,这个有OCR功能,我也是用的这个。大佬针对Windows编译的版本都是便携版(Portable),根据自己系统下载主程序包解压到合适位置后,可以下载Dictionary文件,里面有一些共享的词典样式表和字体文件。

确保GoldenDict++OCR未打开,在其主目录下,新建portable文件夹和content文件夹。解压Dictionary文件中的dicts目录下的内容到content文件夹,解压portable目录下内容到portable文件夹。然后运行GoldenDict++OCR,点击编辑~~>首选项,打开首选项的设置页面。在此可以设置显示风格(即主题)和附加样式(查词结果显示区域的样式),.该词典上古风格的主题,在现在的审美看来糟糕透了,咱肯定不能指望免费的东西有什么漂亮的主题,但还是有必要按照自己喜好修改一下。我分别选择了灵格斯-蓝色调modern-yeah。如果需要随开机启动,可勾选随系统启动。取词和划词选项卡可以修改相应功能的快捷键,OCR取词默认快捷键是Ctrl+B+B,这个快捷键与Adobe Acrobat冲突,所以我的改成了Ctrl+Shift+C+C

词典的安装:与欧路词典需要付费不同,GoldenDict不需要付费即可加载多本词典,但是加载过多的词典可能带来使用卡顿。如果是对英语进行研究,可能需要查看大量不同词典;如果只是一般应用,建议尽量少装词典,像上文欧路配置两本词典也可以。具体按照操作:将词典文件解压到content目录,点击编辑~~>辞书在来源选项卡的文件选项卡引入前文创建的content目录的路径,然后在辞书选项卡中可以看到已经扫描到的词典。辞书排序栏中不需要的辞书,可以托拽到禁用栏中。

启用构词法规则:学习英语过程中,有时我们可能需要了解这个单词的来源是什么单词,以便更好地记忆、学习、理解单词。如果之前我们正确的将morphology文件夹放到了content目录,那么在来源选项卡下的构词法规则库页面,我们可以勾选需要的构词法(比如英语),应用设置后我们查询单词时如果在构词法库中有记录,则会在单词页面上附加显示来源词的释义。比如搜索sustainable,除了给出此单词释义是形容词可持续的,还会给出sustain的释义是动词维持。这个功能欧路词典是没有的。构词法词库还用于拼写错误时给出拼写建议。比如我听了一个词:algorithm,但我不知道如何拼写,我随手打出:aogerithm,然后GoldenDict便会给出拼写建议:algorithm,而欧路词典的建议是通过联网的网络释义实现的。

整句翻译:与其他商业公司的翻译软件相比,GoldenDict一个很大的缺点就是没有整句翻译。这个需求可以通过调用外部程序实现。因为Google翻译等对自己的翻译API做了限制,经过大佬们的努力,他们通过调用外部的一个Python程序实现,Python程序负责调用Google翻译API并把结果返回GoldenDict。笔者使用的xinebf提供的项目,托管于GitHub,项目页有详细的安装说明。

首先需要安装Python3.7以上版本,然后通过pip3 install google-translate-for-goldendict命令配置这个项目,接下来在GoldenDict中点击 编辑 - 字典 - 字典来源 - 程式,添加如下条目:

类型: Html
名称: Google Translate
命令行: python -m googletranslate zh-CN %GDWORD% -s "translate.google.cn"

图示请从GitHub项目中下载保存到合适位置,然后设置位置。保存设置后尝试使用快捷键对英文句子取词,即可看到整句翻译结果。

到此,本文结束。其他使用技巧大家可自行摸索,如果有什么见解,也可以在下面留言。

参考: