Lexsion 发布的文章

使用RTL2832电视棒接收ADS-B信号追踪飞机飞行轨迹

前言

无线电技术在当今世界非常重要,从生活中的遥控小玩具到我们通信的手机,再到航空航天,无时无刻不起到重要作用。从麦克斯韦提出电磁场理论并预言了电磁波存在,到业余无线电爱好者发明早期的“电报装置”-“火花电台”;无线电技术的时代就拉开了序幕。随着电子技术的发展,半导体技术到超大规模集成电路的发展,也让无线电通信技术从模拟通信转向数字通信。如今在一个芯片上集成调制解调、编码解码、发射接收已经成为一件非常简单的事情。但是如此高的集成度,便意味着编解码算法的的升级换代需要更换整个芯片处理,这既是浪费也是麻烦,于是人们就想有没有办法设计一套硬件,其信号的编解码、调制解调等都可以通过软件数据定义实现,硬件只提供一个信号发射接收的平台。于是软件定义无线电的概念便出现了。

RTL2832电视棒的价格非常便宜,只需要人民币50元左右即可在淘宝买到。它是基于瑞昱RTL2832方案实现的一个USB DVB-T电视调谐接收器,将其插在电脑USB口上,安装一个软件就可以在电脑上接收电视节目。目前中国大陆用它看电视可能够呛了,也许国外可能有市场吧。国外某大佬发现RTL2832有个特殊模式,可以直接将原始数据传输到电脑上,其工作频率大约在20M~1700M范围。随后几位大佬逆向了这货的驱动程序、接口,成功的把原始数据拉到了电脑上,然后他们开发了各种处理这种原始数据的程序,为我们带来了低廉的软件定义无线电方案。更多硬件相关资料见文末参考链接

入手此物后作为入门的第一件事自然就是跟随前辈的脚步,复现使用其配合SDR#接收FM广播的用途。国内应该不会有人买这货看电视吧!主要操作就是下载SDR#,解压并运行内部的一个批处理下载扩展文件,使用zadig替换驱动程序并最终运行SDR#接收FM广播。确定无误后可以尝试接收民航频段与对讲机频段。通过这些操作,你已经初步领略了软件定义无线电的魅力,同一个硬件,可以收FM广播频段,也可以收对讲机使用的430M频段;可以按调频的方式解,也可以按条幅的方式解,而这设备只需要人民币50元左右,这便是软件定义无线电的优点。以上这些都非常简单,本文就不再赘述。

本文目标是接收ADS-B信号以追踪飞机飞行轨迹。民航飞机为了安全性等原因,设计了一个ADS-B发信机,具体历史不再赘述。飞行中它不断的向周围发送一个ADS-B信号,信号频率为1090MHz,信号中包含了飞机的ICAO编码、飞机航班号、机型、经纬度、当前高度、目标高度、速度、航向角等信息。我们接收这些信息后就可以在地图中标记出飞机的位置,了解到飞机的航线,通过航班号我们可以在互联网上查到这架飞机的航线等信息。

操作

整个过程并不复杂,大致如下:首先下载相关工具,将电视棒接好天线通过USB接口与电脑连接并安装驱动程序;配置软件RTL1090,其解码RTL电视棒获取的数据并在本地搭建一个服务端。然后安装配置VirtualRadar,其提供一个可以通过浏览器访问的图形界面。以下为详细过程:

安装配置RTL1090套件

  1. RTL1090官网下载RTL1090-IMU,按官网介绍,这是一个安装和维护工具,它通过网络获取最新版本的RTL1090主程序以及RelWithDebInfo与zadig。RelWithDebInfo是RTL_SDR工具包,它提供各种访问接口;zadig则是驱动程序。

  2. 在欲安装的位置新建一个文件夹,名称自拟。将RTL1090-IMU的程序解压到文件夹中,将RTL2832电视棒插入到USB接口,双击运行。在主界面的Install and Update页面右侧点击New Install然后选择操作系统,然后点击Return to application folder按钮将安装目录设置为当前文件夹。继续等待安装工具完成相关文件的下载,这个过程中工具会自动解压相关资源并放在正确的位置。

  3. 等待其完成安装后,Zadig会自动运行,若出现UAC提示,请同意其管理页权限。参考安装工具的提示完成驱动安装并关闭RTL1090-IMU。具体如下:

    在Zadig中勾选Options->List All Devices,然后在设备列表中尝试选择BULK-IN INTERFACE (INTERFACE 0)或类似RTL2832XXX字样的设备。选定后应该能在下方的USB ID中看到0BDA:2832或0BDA:2838字样,即为正确选择设备。箭头右侧应选择WinUSB而不是其他,然后点击下方的Install Driver按钮开始安装驱动,完成后关闭Zadig。

  4. RTL1090官网下载最新版主程序包,覆盖解压到之前建立的安装目录。

  5. 双击运行 rtl1090.exe ,点击START按钮若出现防火墙提示,请允许。这样便完成了RTL1090的配置。此时正常应能收到上空经过飞机的信号了,相关信息可以在Table选项卡中看到。

安装配置VirtualRadar

  1. VirtualRadar官网下载Virtual Radar Server并安装,安装过程中Server Port页面可以设置网页访问的端口。然后下载Database Writer Plugin选择同一目录安装。
  2. 右键管理员权限运行主程序,点击Tools->Options,在左侧选择Receivers->Receiver。在右侧点击Wizard按钮打开接收器配置向导,Kind of receiver选择A software defined radio,Decoder program选择RTL1090,是否运行在本地选择Yes,然后点击Finish完成向导。
  3. 此时点击Test Connection按钮,应该会弹出Connection can be made的提示,如果不正常请检查防火墙设置、软件配置等信息无误,并尝试重启RTL1090和Virtual Radar。若一切正常建立,RTL1090软件中右下的TCP图标应该会亮起。
  4. 确保右键管理员权限运行VirtualRadar,点击Tools->Plugins,在Database Writer中点击Options,勾选Enabled,点击Create Database后点击OK。
  5. 此时,访问本机IP:之前设置的端口号即可访问飞机追踪页面。点击Menu -> 第二个图标,将语言设置为中文。然后点击菜单->选项,勾选设置当前坐标,然后去地图上拖动地图到自己所在的区域,然后在此页面取消勾选。以此完成当前坐标的设置,这样每次打开页面便会默认加载正确的位置。
  6. 勾选通知所有已选择的航空器,可以在监测到飞机时语音播报相关信息。其他设置可自行研究。

参考

使用Adobe Acrobat修改带签名的PDF文档

前言:

PDF文档,即Portable Document Format,看名字就知道,这是一种便携式文档格式。它是Adobe公司设计的,主要目的是为了能提供高度一致的效果,而与打开文档的设备软硬件环境无关。我们平时查看PDF文档用的工具一般是Adobe Acrobat Reader DC,它是免费的;但它只是阅读器,不能修改PDF文档,我们一般使用付费的Adobe Acrobat或一些其他软件修改或打包PDF文档。某些特殊情况,我们可能需要修改的PDF文档存在签名(最常见的比如电子发票),而存在签名的PDF文档是无法修改的,而Adobe Acrobat没有去除签名的功能,此时该怎么办呢?

准备:

  • 要处理的文档
  • 一台安装了Adobe Acrobat软件的电脑一台

操作:

方法一:

  1. 准备好要修改的文档,准备好文档保存的文件夹并在资源管理器中打开,资源管理器中空白处鼠标右击 ,点击 新建 -> 文本文档 新建一个空白的TXT文件,名称随意,建议可使用最终PDF要保存的文件名。
  2. 打开Adobe Acrobat,依次点击 文件 -> 创建 -> 从文件创建PDF(或直接按 Ctrl+N ),在弹出的打开对话框中双击选择上一步新建的TXT文件打开。
  3. 点击:工具 -> 组织页面 ,在弹出的选项中点击 插入 -> 从文件(或直接按 Shift+Ctrl+I ),在弹出的对话框中双击选择原始PDF文档以完成选定。在弹出的 插入页面 对话框中,位置下拉列表选择 之前 ,设置好需要的页码范围,点击 确定 完成插入。
  4. 组织页面 功能下,使用鼠标单击选中创建PDF文档时产生的空白页面,点击 删除 按钮(或直接按 Del),在弹出的对话框中点击确定删除多余页面。
  5. 点击:工具 -> 编辑PDF ,这时便会发现,文档已经是可以编辑的状态了。使用键盘鼠标改动一番,然后点击 保存文件 图标或按 Ctrl+S ,在弹出的保存页面中选择保存的路径,输入要保存的文件名,点击 保存 图标或按 Alt+S 完成保存。最初创建的空白TXT文档也可以删除了。

方法二:

  1. 准备好要修改的文档,准备好文档保存的地方,使用Adobe Acrobat打开文档。
  2. 点击:工具 -> 组织页面 ,页面范围选择 所有页面 ,点击 提取 选项,保持 “在提取后删除页面” 和 “将页面提取为单独文件” 未勾选,点击 提取 按钮完成提取。
  3. 点击:工具 -> 编辑PDF ,这时便会发现,文档已经是可以编辑的状态了。使用键盘鼠标改动一番,然后点击 保存文件 图标或按 Ctrl+S ,在弹出的保存页面中选择保存的路径,输入要保存的文件名,点击 保存 图标或按 Alt+S 完成保存。

明显,方法二步骤更简单一些。

注:本文只针对未加密的已签名PDF文档有效,且修改保存后文件的签名也不复存在。不同版本操作可能会有变化,请自行观察软件功能,灵活操作。本方法可能随着软件版本更迭而失效,本文使用的软件版本是:2019.008.20080。

为路由器刷入第三方固件——以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应用市场。相信开源的项目更让人放心,本人没有尝试过此应用,具体使用方法本文不研究。

参考: