Proxmark 入坑指南
Proxmark 是 RFID 界的瑞士军刀,请注意,其官网为 proxmark.org,其他诸如 proxmark.com 的均为第三方商业网站,目前的最新硬件版本是 Proxmark 3。
Proxmark 是 RFID 界的瑞士军刀,请注意,其官网为 proxmark.org,其他诸如 proxmark.com 的均为第三方商业网站,目前的最新硬件版本是 Proxmark 3。
节选自《The Little Schemer》
基本元件 car 仅定义为针对非空列表。
基本元件 cdr 仅定义为针对非空列表。任意非空列表的 cdr 总是另一个列表。
基本元件 cons 需要两个参数。第二个参数必须是一个列表。结果是一个列表。
基本元件 null? 仅定义为针对列表。
基本元件 eq? 需要两个参数。每个参数都必须是一个非数字的原子。
Windows 的系统代理使用的其实是 IE 的代理设置,此外,对于绝大多数的应用程序而言,它们默认使用的也是 IE 的代理设置,比如,Chrome、Firefox、Microsoft Store 等。因此,如果想让绝大多数的应用程序使用代理,一个简单的方法是直接设置 IE 的代理(即系统代理)。不过,对于一小部分没有使用 IE 代理设置的应用程序,比如 Android Studio 等,你可能需要单独设置它们的代理(一般在软件的设置项中)。
值得注意的是,同为应用程序的 Shell(包括命令提示符和 PowerShell)就没有使用 IE 的代理设置,它们各自有自己的代理设置。具体而言,要为命令提示符设置代理,可使用如下两条命令:
1 | set HTTP_PROXY=http://user:password@proxy.domain.com:port |
而要为 PowerShell 设置代理则要使用如下命令:
1 | $env:HTTP_PROXY="http://user:password@proxy.domain.com:port" |
对于 Shell 中运行的程序,有一部分使用的是 IE 的代理设置,比如 winget、pip、npm 等,另一部分则使用的是 Shell 的代理设置,比如 curl、go、gem 等。
Captive Portal 是从 Android 5 开始引入的一项新功能,其主要用于检测网络连接是否正常,当用户连接网络后,系统会通过 HTTP 访问一个 Google 的服务器,若返回 200 状态码,则表示用户可能处在一个需要登录认证的网络环境中;若返回 204 状态码,则表示网络连接正常;若连接超时,则表示网络连接不正常,此时网络图标会显示一个叹号或叉号。
显然,Google 的服务器是连接不上的,我们可以通过修改服务器地址来解决此问题。具体而言,连接 ADB,针对不同的系统版本,下方分别给出了相关命令:
Android 9.0/8.1/8.0/7.1.2/7.1.1:
1 | adb shell settings put global captive_portal_https_url https://www.google.cn/generate_204 |
Android 7.1/7.0:
1 | adb shell settings delete global captive_portal_server |
Android 5.0-6.x:
1 | adb shell settings put global captive_portal_server www.google.cn |
执行之后,开启飞行模式,接着关闭飞行模式即可。
GCC 一般有两层意思,广义是指 GNU Compiler Collection(即 GNU 编译器套装),狭义是指 GNU C Compiler(即 GNU C 语言编译器),在本文中,我默认大写的 GCC 指广义,小写的 gcc 指狭义。
使用 gcc 编译 C 语言源代码的一般格式如下:
1 | gcc test.c -o test |
QEMU 是 Linux 中使用最广的模拟器,可以模拟出各种硬件环境,其便于调试的特性也适合于系统开发者。
使用 sudo apt install qemu 即可在 Ubuntu 中安装 QEMU,安装完成后会有很多以 qemu- 开头的命令,如:
qemu-system-i386:用于模拟 32 位的 80386 硬件环境qemu-system-x86_64:用于模拟 64 位的 x86 硬件环境qemu-system-arm:用于模拟 ARM 硬件环境再进一步,这些命令又可以分为以 qemu-system- 开头和以 qemu- 开头,以 qemu-system- 开头的用于在模拟的硬件环境上运行整个系统,以 qemu- 开头的用于在模拟的硬件环境上运行某个程序,而非整个系统。
Linux 中使用最广的构建工具是 make,而 make 会读取 Makefile 文件中的配置信息来完成构建,一个简单的 Makefile 文件如下所示:
1 | editor : main.o text.o |
具体而言,冒号前面为 target,即要生成的文件;冒号后面为 dependencies,即被依赖的文件;每一个 target:dependencies 对的下一行为要执行的命令(注意要以 Tab 键起首)。当 make 不带参数时,默认执行第一个 target。target 也可以是要求 make 要完成的动作,执行这种 target 后并不能得到和 target 同名的文件,因此,也称做 phony target(即伪 target),如第 7 行所示。dependencies 也可以为空,如常用的 target 为 clean 时,就没有依赖,只有命令,一般用于清理工作。
当输入 make 或 make editor,即可开始构建。若 editor 这个 target 文件不存在,或者 main.o、text.o 这两个依赖文件被修改,都会导致 make 调用其下的命令 gcc -o editor main.o text.o;接下来,由于引用到 main.o 和 text.o,make 会检查 main.o 的依赖 main.c、def.h 有无更新,如果有,则执行其下的命令 gcc -c main.c;同理,也适用于 text.o。当输入 make install,make 会检查 install 的依赖 editor 是否是最新,如果是,则执行其下的命令 mv editor /usr/local。