使用 veth 实现 IPv6-only 的 Brouter 功能

最近从 @shankerwangmiao 学到了一个方法:通过 veth 把两个 bridge 的 IPv6 桥接起来。方法如下: $ ip link add veth-v6-in type veth peer name veth-v6-out $ brctl addif br-in veth-v6-in $ brctl addif br-out veth-v6-out $ ebtables -t filter -A FORWARD -p ! IPv6 -o veth-v6-in -j DROP $ ebtables -t filter -A FORWARD -p ! IPv6 -o veth-v6-out -j DROP 这样就可以看到 veth 上仅有 IPv6 的流量了。

Read More

在 Android 上打开 LTE 的 IPv6

听闻北京移动给 LTE 配置了 SLAAC ,但现在需要手动打开,方法如下: Settings -> Network & Internet -> Mobile Network -> Advanced -> Access Point Names -> 中国移动 GPRS (China Mobile) -> 把 APN procotol 和 APN roaming protocol 两项都改成 IPv4/IPv6 然后在 test-ipv6.com 上可以看到确实分配了 IPv6 地址,不过目前评分只有 1⁄10 。也就是说可用性还不佳。 而在 iOS 上,通过 HE 的 Network Tools 能看到,确实拿到了 IPv6 的地址,但是出不去,怀疑是运营商没有下发相关配置,所以还不能使用,只能继续等。 2018-11-06 更新:现在 iOS 用户也有 LTE 的 v6 了。评分是 9⁄10 。目前可用性已经可以了,就是国内互联还不大好。

Read More

THUCTF 2018 和 Teaser Dragon CTF 2018 小记

终于可以公开 writeup 了,大家也可以去看 twd2 写的 writeup 。 这次是我第一次打 CTF ,发现题目还挺有意思的,虽然也有一些题目做不出来,有拿钱还是美滋滋。 这次也认识了好些会打 CTF 的人吧,如 0x00, user1, igoodvegetable 等队伍的同学。一开始被蛤力橙叫来打比赛,我觉得心里挺没底的,然后花了很多时间做题目,一点一点还是做出了不少题目来。最精彩的还是结束以后,当知晓没做出来的题目的做法时候,会不自觉感叹题目的巧妙。也学到了一些梗: #define 1000000007 twd2 接着就参与了一下 Teaser Dragon CTF 2018 ,是个在线赛,许多人一起做题,只有 24 小时。看了下题目,除了签到题,其它题都比 THUCTF 2018 难多了,我只能围观他们做题。最后看到别人写的 writeup ,真是太巧妙了,一环接一环,真的想不到。不过也有很麻烦的题目,特别是有的逆向的题目,太考验人的耐心了。 接下来就等待官方的 writeup 和别人的 writeup ,学习一下别人的做法吧。

Read More

绕过 GPGMail 的激活检测

前段时间 GPGMail 宣布不再免费,在三十天的试用期后就不给用了。唉,可能是官方实在没钱维护了,也可能是官方想赚钱了。不过,既然 GPGMail 采用的是自由的许可证,意味着我们可以自己对代码进行更改。和许可证验证相关的代码如下: - (BOOL)hasActiveContract { NSDictionary *contractInformation = [self contractInformation]; return [contractInformation[@"Active"] boolValue]; } 我们只要改成 return TRUE ,在自己的电脑上手动编译、并复制到 /Library/Application Support/GPGTools/GPGMail 下即可。 另:还有一个直接对二进制打 patch 的方法(仍然符合许可证),利用了最近打 CTF 学到的一些知识。找到以上这个函数,然后把返回值修改成非零即可。这里就不提供方法了。最后的更改: $ radiff2 -D --- 0x0000282f 410fbec7 - movsx eax, r15b +++ 0x0000282f 4c89e090 + mov rax, r12 + nop 当然了,还需要额外 codesign --remove-signature 一下。 谨慎对非自由软件采用这个方法。可能有法律风险。

Read More

在 macOS 的 VirtualBox 上从 USB 启动

做了一个 Windows 10 安装 U 盘,想测试一下能不能启动,于是想用 VirtualBox 起一个虚拟机。但是发现,一般情况下要从 ISO 或者把 U 盘克隆成一个 vdi/vmdk etc 再启动。不过找到了 Cem Arslan 的 VirtualBox - Booting From USB (MAC) 实验了一下,确实可以用,以 /dev/disk2 为例方法如下: $ diskutil unmountDisk /dev/disk2 $ sudo chown $(whoami) /dev/disk2 $ VBoxManage internalcommands createrawvmdk -filename PATH_TO_VMDK -rawdisk /dev/disk2 $ # Now boot from VirtualBox 对于其它平台,可以参考 Tu Nguyen 的 How to boot from USB in VirtualBox 。 研究了一下生成的 vmdk 文件,大概是这样的: # Disk DescriptorFile version=1 CID=12345678 parentCID=ffffffff createType="fullDevice" # Extent description RW 12345678 FLAT "/dev/disk2" 0 # The disk Data Base #DDB ddb.

Read More

在 Ubuntu 上跨版本迁移 MongoDB

由于 MongoDB 只支持当前版本和上一个版本的数据库格式,然后刚刚滚系统升级的时候升级到了 3.6.x ,而数据库格式仍然是 3.2.x 的,于是需要先安装回 3.4.x 版本的 MongoDB,输入命令把数据库升级到 3.4.x 版本后,再用 3.6.x 的数据库进行升级。 以 从 Ubuntu 14.04 LTS 升级到 Ubuntu 18.04.1 LTS 为例,方法如下: $ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.4.17.tgz $ tar xvf mongodb-linux-x86_64-ubuntu1604-3.4.17.tgz $ cd mongodb-linux-x86_64-ubuntu1604-3.4.17/bin/ $ sudo ./mongod --config /etc/mongodb.conf & $ mongo > db.adminCommand( { setFeatureCompatibilityVersion: '3.4' } ) { "ok" : 1 } $ fg ^C $ sudo chown -R mongodb:mongodb /var/lib/mongodb $ sudo systemctl start mongodb $ mongo > db.

Read More

通过 SSH 隧道连接 ADB 和 Android 设备

由于本机算力不足,想要在远程编译 LineageOS ,其中有一步需要连接到已有的设备,于是突发奇想: adb 可以通过 网络连接 ssh 可以进行端口转发,这里是把 remote 的端口转发到 Android 设备上的端口。 方法如下: $ adb shell ip -f inet addr show wlan0 $ # remember the ip address here $ adb tcpip PORT1 $ ssh -R PORT2:ANDROID_IP:PORT1 REMOTE (remote)$ adb connect localhost:PORT2 # trust this device on Android 参考文档: How can I connect to Android with ADB over TCP? SSH PORT FORWARDING EXAMPLE

Read More

在 LEDE (OpenWrt) 上启用 wpad

WPAD(Web Proxy Auto-Discovery Protocol)是一个可以利用 dhcp 分发 pac 配置的协议。方法如下: $ # ssh to router first $ vim /etc/dnsmasq.conf dhcp-option=252,"http://router_ip/wpad.dat" $ vim /www/wpad.dat # put pac here $ service dnsmasq restart $ # ensure proxy is available to lan $ # enable wpad on devices 参考文档: Web Proxy Auto-Discovery Protocol Automatic Proxy Configuration with WPAD Deploying WPAD Example PAC File

Read More

在 Xcode 9 上启用 Vim 模拟(XVim 2)

作为一个不用 vim 编辑会死星人,用 Xcode 总是止不住自己想 Escape 的心。于是找到了 XVimProject/XVim2 进行配置。 大致方法如下: 按照 Signing Xcode 对 Xcode 进行重签名。套路和对 GDB 进行签名一样。不过这次,签名完成的时间可长多了,毕竟 Xcode 这么大。 接着按照项目的 README ,首先 git clone 然后 make ,第一次打开 Xcode 的时候选择 Load Bundle 即可。 终于可以满足我 Escape Xcode 的欲望了。

Read More

在 macOS 上读取移动硬盘的 S.M.A.R.T. 信息

之前想看看自己各个盘的情况,但是发现只能看电脑内置的 SSD 的 S.M.A.R.T 信息,而移动硬盘的都显示: $ smartctl -a /dev/disk2 smartctl 6.6 2017-11-05 r4594 [Darwin 17.7.0 x86_64] (local build) Copyright (C) 2002-17, Bruce Allen, Christian Franke, www.smartmontools.org /dev/disk2: Unable to detect device type Please specify device type with the -d option. Use smartctl -h to get a usage summary 一开始我怀疑是个别盘不支持,但换了几个盘都不能工作,问题应该出现在了 USB 上。查了下资料,果然如此。根据 USB devices and smartmontools ,获取 S.M.A.R.T 信息需要直接发送 ATA 命令,但是由于经过了 USB ,于是需要进行一个转换,导致无法直接发送 ATA 命令。这个问题自然是有解决方案,大概就是直接把 ATA 命令发送过去(pass-through)。上面这个地址里写到,如果需要在 macOS 上使用,需要安装一个内核驱动。可以找到,源码在 kasbert/OS-X-SAT-SMART-Driver 并且有一个带签名的安装包在 External USB / FireWire drive diagnostics support 中可以下载。丢到 VirusTotal 上没查出问题,用 v0.

Read More