故事背景:家里拉了很多年的千兆,这两年才从 FTTB 换成 FTTH。但是之前买的千兆套餐不送 IPTV 了,而光改的时候,联通的工作人员帮我改了桥接,但是所有口都绑定了 Internet。现在开通IPTV需要初装费,还要月费,所以我就没开通。本来是不想折腾的,因为实在没空,但是被催了好久猫棒的事情,所以就临时下了个单,花了一天做了些实验。
(more…)Blog
-
EdgeRouter 4 Build & Install udpxy
Please DON’T use udpxy, check msd_lite!!!
Source Code: http://gigapxy.com/download/udpxy/
# show version Version: v2.0.9-hotfix.7 Build ID: 5622762 Build on: 06/15/23 11:31 Copyright: 2012-2020 Ubiquiti Networks, Inc. ...Steps:
1 Configure apt source
EdgeOS 2.0 is based on debian stretch, outdated.
# cat /etc/apt/sources.list.d/stretch.list deb http://archive.debian.org/debian/ stretch main contrib deb http://archive.debian.org/debian/ stretch-updates main contrib deb http://archive.debian.org/debian/ stretch-backports main contrib deb http://archive.debian.org/debian-security/ stretch/updates main2 install
build-essentialapt install build-essential3 Get source, and build
wget http://gigapxy.com/download/udpxy/udpxy-src.tar.gz tar xvf udpxy-src.tar.gz cd udpxy-1.0.25-1/ makeThen you will see error like cc not found.
CC=gcc makeYou’ll see
gcc: error trying to exec 'as': execvp: No such file or directoryThis is because the
binutilspackage provided by UBNT is almost empty.wget -c https://archive.debian.org/debian/pool/main/b/binutils/binutils_2.28-5_mips.deb dpkg --unpack binutils_2.28-5_mips.debBackup your config, Install manually.
Then
CC=gcc make CC=gcc make install -
PVE 查看以太网设备的映射关系
root@pve:~# lshw -c network -businfo Bus info Device Class Description ============================================================ pci@0000:02:00.0 enp2s0 network Ethernet Controller I226-V pci@0000:03:00.0 enp3s0 network Ethernet Controller I226-V pci@0000:04:00.0 network 82599ES 10-Gigabit SFI/SFP+ Network Connection pci@0000:04:00.1 network 82599ES 10-Gigabit SFI/SFP+ Network Connection pci@0000:05:00.0 enp5s0 network Ethernet Controller I226-V pci@0000:06:00.0 enp6s0 network Ethernet Controller I226-V -
Cloudflare Bulk Delete DNS Records
DOMAIN=sskaje.me EMAIL=sskaje@mail.sskaje.me KEY=this.is.cloudflare.key ZONE_ID=$(curl -s -H "X-Auth-Email: ${EMAIL}" -H "X-Auth-Key: ${KEY}" "https://api.cloudflare.com/client/v4/zones" | jq -r '.result[] | select(.name == "'$DOMAIN'") | .id') for RECORD_ID in $(curl -s -H "X-Auth-Email: ${EMAIL}" -H "X-Auth-Key: ${KEY}" "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records"| jq -r '.result[] | select(.name | test("_acme-challenge")) | .id'); do echo $ZONE_ID $RECORD_ID; curl -s -H "X-Auth-Email: ${EMAIL}" -H "X-Auth-Key: ${KEY}" -XDELETE "https://api.cloudflare.com/client/v4/zones/${ZONE_ID}/dns_records/${RECORD_ID}"; done -
Windows 目录大小写敏感
用了一个古老的工具 asn1c,结果定义文件里有个 Time 类型,生成了 Time.h,而这个工具自己把所有文件放在一个目录里,不得不把源码目录放到include path里,于是祭出大法。。。
fsutil file setCaseSensitiveInfo asn1c-test disable fsutil file setCaseSensitiveInfo asn1c-test enable结论,vs工程源码目录要单放,至少 vs2010 工程默认的设置里,有的地方用 Release 有的地方用 release。


-
Windows 下vcpkg 与bindiff
vcpkg 是 微软的一种包管理方式,对于curl之类的库,目前看使用 vcpkg可能是比较好的下载安装方式,比自己编译简单太多。
遇到了一个需要逆向的程序,经过人肉特征分析,程序里发现使用了 curl 的一个老版本,这个版本的二进制已经不提供下载了,虽然通过 web.archive.org 拿到了要的版本,但是是 mingw 的,而且没有调试信息用起来不方便。
于是,记录一下 vcpkg 操作的过程。
下载不提了,假设安装完 vcpkg 后,在一个空白的工作目录,建立 vcpkg.json
{ "name": "curl-test", "dependencies": [ "curl", "libsodium" ], "overrides": [ { "name": "curl", "version": "8.0.0" } ] }然后在这个目录执行 (我要分析的程序静态链接了curl,而且是32位的)
..\vcpkg\vcpkg.exe install --triplet x86-windows上边这个配置文件的例子其实是成功不了的,错误提示是
error: C:\Work\packages\vcpkg.json was rejected because it uses "overrides" and does not have a "builtin-baseline". This can be fixed by removing the uses of "overrides" or adding a "builtin-baseline". See `vcpkg help versioning` for more information.我没找到正确姿势,但是看到这个baseline 跟git版本疑似有关,偷懒但是生效了
第一步,加一个
"builtin-baseline":"HEAD",再次执行,报错变成了the top-level builtin-baseline (HEAD) was not a valid commit sha: expected 40 hexadecimal characters.You can use the current commit as a baseline, which is: "builtin-baseline": "61f610845fb206298a69f708104a51d651872877" note: updating vcpkg by rerunning bootstrap-vcpkg may resolve this failure.直接改json。
接下来,bindiff的问题。
一般程序不可能静态链接一个 debug 版本的库,所以直接用 ida pro分析 release 版本的二进制,而 vcpkg 的目录里带了调试信息,在 match的时候会比较简单。
#EOF
-
记录一个软件 API Monitor
http://www.rohitab.com/apimonitor
找了好长时间,终于找到了。
需求是找一个工具记录软件的 DeviceIOControl 的调用,用来查设备驱动被哪个用户软件调用,且最好能找到调用的参数或者内容。
在找到这个之前,试过了nirsoft / deviceioview、MartinDrab / IRPMon、zodiacon / DriverMon、Fyyre / DrvMon、DynamoRIO / drmemory,很遗憾,各种问题都用不了。
而这个工具能记录目标程序的具体哪个DLL、哪个线程调用了哪些调用,相当神器。
遇到的问题:记录数据不全,设置限制了最大的数据抓取4096字节,且输入长度最大4个字符。
解决的方案:半解决吧,patch了程序。用 4096 搜立即数,找到了限制最大值的代码,逐个改成 0x400000;搜 EM_SETLIMITTEXT,看到定义是 0xC5,当立即数搜索,查找 SendMessageW 的调用,定位了两个框的限制,改成了8。
-
基于 USB/IP 的USB劫持实验
环境:服务端 usbipd (Linux,用的是 PVE),客户端 usbip(Linux,用的是 ubuntu 22.04虚拟机),测试设备 SanDisk U盘(一开始用的是海康的 R36C,遇到了 UAS 的问题,后边说),中间机 mac + mitmproxy。
思路:
- 服务端 usbipd 起服务
- 服务端插上 U 盘,usbip bind
- 中间机器开 mitmproxy 反向代理,加载插件
- 客户端连中间机器的端口
- 客户端挂载分区,写入文件
- 验证写入文件是否被劫持
可能用到的命令
客户端
usbip --tcp-port 2021 list -r 192.168.11.33 usbip --tcp-port 2021 attach -r 192.168.11.33 -b 6-2.1 lsblk mount -o rw,noatime,noauto,sync /dev/sdb1 /mnt/ echo helloabcdefghijk > /mnt/1.txt umount /mnt usbip detach -p 8中间机器
mitmdump --mode reverse:tcp://192.168.11.5:3240@2021 -s usbip.pyusbip.py 只做了一件事情,就是把 abcdefg 换成 xyzabcd。
结果:正常操作下来,从服务端挂载 U 盘后
root@wpve:~# cat /mnt/1.txt helloxyzabcdhijk证明写入的数据确实是被修改过的。
但是客户机在写入后立即读,读到的还是原始尝试写入的内容,这个缓存不知道怎么关,但是不重要了。
UAS 的问题,硬盘挂载上dmesg报错
[48408.638543] usb 14-1: USB controller vhci_hcd.0 does not support streams, which are required by the UAS driver. [48408.638550] usb 14-1: Please try an other USB controller if you wish to use UAS. [48408.638553] usb-storage 14-1:1.0: USB Mass Storage device detected [48408.639125] scsi host2: usb-storage 14-1:1.0找到了一篇文章https://leo.leung.xyz/wiki/How_to_disable_USB_Attached_Storage_(UAS)
按说明在客户端配置了 quirks,不报错,但是没有 /dev下的 sdx,手动触发 udev
udevadm trigger -v但是看不到分区,所以换了小U盘。