easyconnect arm64 docker教程

基于Hagb的develop分支

在qemu中模拟arm64执行

修改easyconnect为最新配置文件

修改Dockerfile,在CMD ["start.sh"]前加入

1
RUN busybox wget http://download.sangfor.com.cn/download/product/sslvpn/pkg/linux_767/EasyConnect_x64_7_6_7_3.deb && dpkg -x EasyConnect_x64_7_6_7_3.deb ec_7.6.3 && cp ec_7.6.3/usr/share/sangfor/EasyConnect/resources/conf/* /usr/share/sangfor/EasyConnect/resources/conf_backup

编译arm镜像

1
2
3
4
5
docker image build -f Dockerfile.build -t hagb/docker-easyconnect:build .
docker image build \
--build-arg EC_URL=https://download.sangfor.com.cn/download/product/sslvpn/SSLVPN%E4%BF%A1%E5%88%9B%E5%AE%A2%E6%88%B7%E7%AB%AF/%E7%BB%9F%E4%BF%A1UOS%20%E6%B5%B7%E6%80%9D%E9%BA%92%E9%BA%9F990%20SSL%20VPN%E5%AE%A2%E6%88%B7%E7%AB%AF.zip \
--build-arg EC_DEB_PATH=02-升级包及安装文件/EasyConnect_UOS_arm64-20220302.deb \
--tag hagb/docker-easyconnect -f Dockerfile .

运行镜像

1
docker run --device /dev/net/tun --cap-add NET_ADMIN -ti -e PASSWORD=xxxx -v ecdata:/root -p 5901:5901 -p 1080:1080 -p 8888:8888 hagb/docker-easyconnect:latest

yubikey GPG SSH设置指南

明确你的目的

yubikey可以用于多种用途,首先需要明确的是自己需要哪些用途,而这些用途又有着多种实现方法,并且实现的难度被使用的系统影响

最主要的用途大概是GPG认证加解密、SSH认证、OATH认证、无密码登录系统、密码管理器认证等

选择实现目的的方式

SSH认证可以通过GPG、FIDO2的SSH密钥(ed25519-sk和ecdsa-sk)、基于PIV(WinCrypt SSH)等方式实现,但是在不同系统上实现难度不同。个人推荐使用FIDO2,是支持程度最高的

Windows macOS Linux
GPG
FIDO2
PIV

注:目前使用Cloudflare Tunnel代理的SSH无法和GPG方式共存

GPG设置

Windows

Gpg4win用于设置PowerShell和Cmd下的GPG,Git Bash默认自带GPG套件,与PowerShell和Cmd完全独立。下载安装即可,但是注意密钥等配置两者不共通

macOS

brew install gnupg pinentry-mac(干净无GUI)

brew install gpg-suite-no-mail --cask(带有GUI,安装完整套件,不带付费的邮件插件)

brew install gpg-suite --cask(带付费的邮件插件)

三者任选其一

Linux

默认自带

SSH各种实现方式

FIDO2

Windows

若要在PowerShell和Cmd下使用SSH,Windows默认的OpenSSH版本过低,需要手动安装。下载OpenSSH的msi安装包进行安装,配置环境变量Path,增加一条C:\Program Files\OpenSSH(这是新安装的SSH的路径),删除原本的SSH的路径

Git Bash默认自带

IDE方面,IDEA等JetBrains家的软件使用的SSH库与系统的无关,新版本支持此方式

SSH客户端方面,目前只有PuTTY-CACtermius付费版支持此方式

注意必须使用管理员模式打开软件才能使用

macOS

macOS自带的OpenSSH在编译时去除了FIDO2的支持,通过brew install openssh即可覆盖。如果不行可以尝试修改环境变量export PATH=$(brew --prefix openssh)/bin:$PATH

Linux

默认自带

PIV

Windows下安装WinCrypt SSH即可,macOS和Linux默认自带

个人认为设置的步骤比FIDO2更加烦琐,且对软件的支持未知,不推荐使用

GPG

Windows

IDE方面,JetBrains家不支持此方式

SSH客户端方面,只有PuTTY-CAC可能以后会支持,其余都不支持

在Git Bash上配置和在Linux上配置相同

PowerShell和Cmd下需要使用wsl-ssh-pageant

个人建议别用

macOS

参考,执行以下命令后重启电脑即可

1
2
3
cd ~/Library/LaunchAgents
curl -O https://jms1.net/yubikey/net.jms1.gpg-agent.plist
curl -O https://jms1.net/yubikey/net.jms1.gpg-agent-symlink.plist

无法和JetBrains家的IDE使用

Linux

配置~/.gnupg/gpg-agent.conf,增加enable-ssh-support
配置~/.bashrc,增加

1
2
3
export GPG_TTY="$(tty)"
export SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket)
gpgconf --launch gpg-agent

虚拟机下使用

以VMware为例,在虚拟机的vmx文件中添加

1
2
usb.generic.allowHID = "TRUE"
usb.generic.allowLastHID = "TRUE"

密码管理器认证

个人采用KeePassXC,在YubiKey Manager的OTP选项中,设置slot1为Challenge-response,用于验证。设置slot2为Static password,输入KeePassXC的密码。这样就可以通过长按yubikey实现打开密码数据库的操作。但是为了安全性考虑,推荐不添加slot2的静态密码

Voxeldance Tango无限试用

Voxeldance Tango是一款非常好用的3D打印切片软件,但是它采取订阅制且价格过于昂贵。不过好在它提供了每个用户的15天免费试用,这就带来了白嫖的方法。

经过查看,发现Tango是通过读取注册表HKLM\SOFTWARE\Microsoft\CryptographyMachineGuid生成机器码的,因此只需要修改这项就能做到无限试用。以下是一个简单的bat脚本,可以自动完成修改注册表的工作。

1
2
3
4
5
6
7
8
9
%1 start "" mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c ""%~s0"" ::","","runas",1)(window.close)&&exit
set /a a=%random%%%(99999999-10000000+1)+10000000
set /a b=%random%%%(9999-1000+1)+1000
set /a c=%random%%%(9999-1000+1)+1000
set /a d=%random%%%(9999-1000+1)+1000
set /a e=%random%%%(999999-100000+1)+100000
set /a f=%random%%%(999999-100000+1)+100000
reg add "HKLM\SOFTWARE\Microsoft\Cryptography" /v "MachineGuid" /t REG_SZ /d "%a%-%b%-%c%-%d%-%e%%f%" /f
del /f "C:\ProgramData\Voxeldance Tango\VDTangoCache.db"

机场使用体验

西部数据:晚高峰YouTube卡顿,720p画质;GitHub断流极其严重

ssrcloud:GitHub clone限速严重,只有几百KB/s;晚高峰延迟高

可乐云:审计规则严格,堪称墙中墙;延迟不稳定

胡桃云:延迟高,香港、台湾节点看YouTube时高时低,日本节点正常;全节点服务器经常崩溃;断流严重

ytoo:实际结算要付服务费,总计大约40一个月。有0.2倍率节点用的很正常,算下来一个月1000G流量

hwid欺骗

这部分代码能够骗过wmic bios get serialnumber,详细内容搜索hwid spoofer

以下是代码和编译完成的文件

hwid.rar

CHITUBOXPro无限试用

代码在GitHub - ztmzzz/CHITUBOXPro-trial: trial CHITUBOXPro every 7 days

介绍

CHITUBOXPro是一个很好用的切片工具,并且提供了7天的免费试用。并且账号的创建不需要进行邮箱的验证(自建poste.io可解),根据hwid判断机器(hwid spoofer可解),因此可以无限创建账号来无限试用。

使用selenium来注册账号,因为只是个人使用所以无所谓效率。修改配置文件让CHITUBOXPro认为这是新的机器,pyautowin自动操作软件进行试用流程

“破解”记录

第一天

买了新打印机正在测试的过程中,偶然间想到CHITUBOXPro有更多的高级功能,而且貌似还有试用时间,那么为什么不尝试搞个无限试用呢?

说干就干,先去官网尝试了一下,发现只要注册个账号就有7天的试用时间,想着这么简单随便花个几小时弄一下全自动试用就行。然后想着还有验证邮件,不如自建一个邮件服务器,选择了poste.io,并且查好了api,测试了一下没啥问题,可以先放一边。

到群里问了一下有没有这个需求的,结果群友告诉说是和机器码绑定的,注册了一个新账号果然如此,一台机器只能试用一次。

机器码很简单,掏出VMware看看能不能改点东西,一眼就看到了bios.uuid,这不就是bios的序列号么,改了这玩意肯定识别成新的机器了。试了一下居然机器码没变,用geek强制删除发现在AppData\Local\CHITUBOXPro下有个machineInfo.cfg,这不就好办了,删掉重新打开软件发现机器码改变,可以继续试用。

刚准备到群里发一下好消息,给大伙送个福利,发现有人说有空做个loader搞个全自动的。我仔细想了一下,这个方案要求使用虚拟机,而且每次切换机器码都要重启虚拟机,确实是个麻烦的方案,需要深刻检讨一下自己思考不全面的问题。那么现在就要求不重启系统改变机器码,一查发现有很多种方法。不过和做外挂的需求差不多,找到了hwid spoofer,用驱动直接修改,哼哧哼哧一顿找,成功骗过了wmic bios get serialnumber,能够返回修改的数据。

第二天

也不知太激动了还是睡得晚导致出现幻觉,以为昨天已经做好测试能骗过CHITUBOXPro,以为自己解决了核心问题开开心心的去搞自动化试用了。不知道是QT的问题还是CHITUBOXPro的问题,账号密码的输入框找得到,但是登录按钮完全不知道在哪,inspect也显示都是静态。无奈之下只能选择模拟鼠标进行点击。因为VMware下的3D加速会导致界面透明,所以还不能用图片识别的方式,无奈只能手动输入偏移量。

回到驱动的部分,先是拷贝了启动驱动的代码进行测试,发现总是会返回驱动启动失败,再加上自己对于Windows编程一窍不通,干脆直接写cmd脚本,再用Python调用。最终结果是Python调用vbs脚本,vbs用管理员权限运行cmd脚本。

差不多都完成了,先总体运行一次尝试一下,看起来很棒,驱动执行也很完美,就是在运行第二次的时候为什么软件没法试用了呢?

打开machineInfo.cfg一看,压根就没变,但是我残存的记忆告诉我昨天是做好了测试能用的,于是又是几次测试,发现完全没变化。在排除了多个因素之后,我跑到回收站一看,笑死,昨天压根没测试过。

看来不是根据wmic获取的机器码,拿出ProcessMonitor一看,发现其实访问了很多的注册表,并且也同时调用了wmic,查了一下发现一些注册表是和hwid有关的。看起来应该是双管其下。于是我保存了写入machineInfo.cfg前所有的记录,修改VMware的bios.uuid,对这2份记录进行对比,发现数据基本没什么区别,区别的部分和机器码也没啥关系,这下搞不明白了,想着可能这次尝试失败了

第三天

早上起来破罐子破摔,想着能不能替换machineInfo.cfg来改变机器码,居然可行。这真的是离谱,每次启动都要读注册表和wmic,然后也不重新校验一下,就让人随便改。在对比了几份生成的machineInfo.cfg后,测试得到前面一部分固定,后面一部分随便改,机器码会对应改变。

那么这次”破解”就算是差不多完成了,优化优化程序,就做到了在不重启的情况下无限试用,并且不仅限于虚拟机。总计花费3天时间。

truenas解决dataset_is_busy问题

当在truenas中创建zvol并分配给虚拟机后,如果想要删除这个zvol就会出现错误

1
cannot destroy 'xxxxxxxx': dataset is busy

我从Dataset is Busy · Issue #4442 · openzfs/zfs · GitHub找到了解决办法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# pvdisplay
--- Physical volume ---
PV Name /dev/zd64
VG Name vg_name
PV Size 20.00 GiB / not usable 4.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 5119
Free PE 4863
Allocated PE 256
PV UUID HhldEE-NiiF-BiQH-2j9u-esRu-WIfC-uLmyYC
# vgchange --activate n vg_name
# vgexport vg_name
# zfs destroy -r <name>

Winodws安装自签名驱动

参考链接

  1. Windows10-CustomKernelSigners/README.zh-CN.md at master · HyperSine/Windows10-CustomKernelSigners · GitHub

  2. GitHub - valinet/ssde: SSDE is a collection of utilities that help in having Windows load your custom signed kernel drivers when Secure Boot is on and you own the system's platform key, instead of using test mode.

  3. Stuck on step 2.5 (Guide to get out of the Boot Loop) · Issue #7 · HyperSine/Windows10-CustomKernelSigners · GitHub

简略步骤

  1. 根据链接1,操作到步骤2.4完成

  2. 根据链接2,从步骤2.5开始操作直到完成

注意事项

  1. 电脑的主板必须支持修改安全启动的Platform Key(PK),我的华硕主板比较麻烦,需要先关闭安全启动,清除所有安全密钥,然后重启到bios,可以看到PK未加载。然后打开安全启动,加载自己的PK,不要忘了把下面的KEK等加载为主板的默认设置

  2. 如果使用ssde_enable.exe导致电脑无限重启(一般5次以上才算),参考链接2的办法,找一个U盘,用Rufus装个恢复镜像,从U盘进入,选择命令提示符,输入regedit,选择Windows\System32\config\SYSTEM,随便打个名字,设置Setup/CmdLine为空,Setup/SetupType为0

  3. 加载注册表的时候可能出现加载配置单元灰色的情况,此时点击HKEY_LOCAL_MACHINE既可。

  4. 如果选择用恢复镜像手动设置HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CI\Protected\Licensed为1的话,一般来说要尝试3次以上才能成功

  5. 注意操作的顺序,我的电脑必须先使用ssde_query.exe查看返回值为1后,再启动ssde服务,不能把顺序颠倒了。但是虚拟机可以把顺序颠倒。最好先把ssde.sys签名后再操作

  6. 记得把ssde.sys放到%windir%\system32\drivers\

  7. 需要在命令行中运行ssde_query.exe才能看到输出,系统会很快的修改注册表的数值,因此要一开机立马查询,只要输出是1就是成功了,可以执行

    1
    sc create ssde binpath=%windir%\system32\drivers\ssde.sys type=kernel start=boot error=normal
  8. 可以使用sc delete ssde,sc query ssde来删除和查询ssde服务(仅限CMD)

详细步骤

  1. 创建根证书localhost-root-ca

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    $cert_params = @{
    Type = 'Custom'
    Subject = 'CN=Localhost Root Certification Authority'
    FriendlyName = 'Localhost Root Certification Authority'
    TextExtension = '2.5.29.19={text}CA=1'
    HashAlgorithm = 'sha512'
    KeyLength = 4096
    KeyAlgorithm = 'RSA'
    KeyUsage = 'CertSign','CRLSign'
    KeyExportPolicy = 'Exportable'
    NotAfter = (Get-Date).AddYears(100)
    CertStoreLocation = 'Cert:\LocalMachine\My'
    }

    $root_cert = New-SelfSignedCertificate @cert_params
  2. 创建内核代码证书localhost-km

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $cert_params = @{
    Type = 'CodeSigningCert'
    Subject = 'CN=Localhost Kernel Mode Driver Certificate'
    FriendlyName = 'Localhost Kernel Mode Driver Certificate'
    TextExtension = '2.5.29.19={text}CA=0'
    Signer = $root_cert
    HashAlgorithm = 'sha256'
    KeyLength = 2048
    KeyAlgorithm = 'RSA'
    KeyUsage = 'DigitalSignature'
    KeyExportPolicy = 'Exportable'
    NotAfter = (Get-Date).AddYears(10)
    CertStoreLocation = 'Cert:\LocalMachine\My'
    }

    $km_cert = New-SelfSignedCertificate @cert_params
  3. 创建UEFI Plaform Key证书localhost-pk

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $cert_params = @{
    Type = 'Custom'
    Subject = 'CN=Localhost UEFI Platform Key Certificate'
    FriendlyName = 'Localhost UEFI Platform Key Certificate'
    TextExtension = '2.5.29.19={text}CA=0'
    Signer = $root_cert
    HashAlgorithm = 'sha256'
    KeyLength = 2048
    KeyAlgorithm = 'RSA'
    KeyUsage = 'DigitalSignature'
    KeyExportPolicy = 'Exportable'
    NotAfter = (Get-Date).AddYears(10)
    CertStoreLocation = 'Cert:\LocalMachine\My'
    }

    $pk_cert = New-SelfSignedCertificate @cert_params
  4. certlm.msc个人\证书中导出生成的三份证书

  5. 设置UEFI KEY
    在VMware的vmx文件中加入,删除nvram文件

    1
    2
    uefi.allowAuthBypass = "TRUE"
    uefi.secureBoot.PKDefault.file0 = "localhost-pk.der"
  6. 创建内核代码证书规则
    在Windows企业版中运行以下命令得到SiPolicy.bin

    1
    2
    3
    New-CIPolicy -FilePath SiPolicy.xml -Level RootCertificate -ScanPath C:\windows\System32\
    Add-SignerRule -FilePath .\SiPolicy.xml -CertificatePath .\localhost-km.der -Kernel
    ConvertFrom-CIPolicy -XmlFilePath .\SiPolicy.xml -BinaryFilePath .\SiPolicy.bin
  7. 签名并导入规则

    1
    2
    3
    4
    signtool sign /fd sha256 /p7co 1.3.6.1.4.1.311.79.1 /p7 . /f .\localhost-pk.pfx /p <localhost-pk.pfx的密码> SiPolicy.bin
    mv .\SiPolicy.bin.p7 .\SiPolicy.p7b
    mountvol x: /s
    cp .\SiPolicy.p7b X:\EFI\Microsoft\Boot\
  8. CustomKernelSigners持久化

    1. 签名ssde.sys
    1
    signtool sign /fd sha256 /a /ac .\localhost-root-ca.der /f .\localhost-km.pfx /p <localhost-km.pfx的密码> ssde.sys
    1. ssde.sys放入%windir%\system32\drivers\

    2. 使用ssde_enable.exe或者进行如下步骤

      1. 制作一个Windows安装U盘

      2. 从安装Windows界面进入,选择命令提示符,输入regedit

      3. 点击HKEY_LOCAL_MACHINE

      4. 点击加载配置单元,选择Windows\System32\config\SYSTEM

      5. 设置HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Control\CI\Protected\Licensed为1

      6. 正常启动电脑

    3. 进入系统后立刻用cmd打开ssde_query.exe结果是1则运行以下命令,否则回到2

    1
    sc create ssde binpath=%windir%\system32\drivers\ssde.sys type=kernel start=boot error=normal
  9. 检查结果
    cmd运行sc query ssde,检查是否运行既可

破解sandboxie-plus

前提准备

  1. 拥有可用于驱动签名的证书或者Winodws安装自签名驱动

  2. 安装Visual Studio 2019,勾选使用C++的桌面开发

  3. 安装Windows SDK,对应WDK版本

  4. 安装Windows WDK, Windows 10, version 2004 https://go.microsoft.com/fwlink/?linkid=2128854

  5. 安装QT5和VS的QT插件(可选,编译界面用)(QT6应该也行)

  6. 在VS中安装带有Spectre缓解的C++ MFC

  7. GitHub上下载最新的安装包和对应的源代码

  8. 使用安装包安装

编译

  1. 用VS打开Sandboxie\SandboxDrv.sln

  2. 选择verify.c

  3. 修改KphVerifySignature函数,在函数开头直接return 0;

  4. 选择Release,x64,编译出SbieDrv.sys

驱动签名

在VS的Developer Command Prompt中执行

1
signtool sign /v /a /f 证书.pfx /p "证书密码" SbieDrv.sys

覆盖驱动

重命名原始的SbieDrv.sys为其他名字,替换为修改过的SbieDrv.sys,然后重启既可

输入捐赠证书

例如:

1
2
3
4
NAME: 123
LEVEL: CONTRIBUTOR
DATE: 01.01.2200
SIGNATURE: 1111

使用sandboxie-plus隔离QQ和微信

前提准备

购买sandboxie-plus的捐赠版本,一年18欧元,或者破解版

绿化版或原版安装包

以下均以v1.1.3捐赠版本为例

沙盒配置

基础配置

新建一个数据保护加固型沙盒,确认勾选以下选项

常规选项-管理员权限-撤销管理员和Power Users用户组的权限

常规选项-管理员权限-使应用程序认为自己已被提权运行

资源访问-资源访问权限策略-隐私模式

如果想要将QQ微信程序或者聊天记录等放在主机上而不是沙盒的文件夹内,那么在资源访问-资源访问权限规则中添加路径,并选择开放权限。这样就相当于在沙箱上面打了个洞,QQ微信能直接访问这些文件,而不是访问沙箱内的虚拟文件(默认存放在Sandbox文件夹中)

资源访问-资源访问权限规则中添加安装包或绿化版所在的路径,选择开放权限。也可以放置在C:\Sandbox\YOUR-ID\SANDBOX-ID\user\Public下(YOUR-ID和SANDBOX-ID取决于你的用户名和沙箱名字),只要沙箱内能访问到就行,安装完后可以直接删除

C:\Sandbox\YOUR-ID\SANDBOX-ID\user\current下创建Desktop文件夹,这样可以避免QQ微信的资源管理器白屏

如果想要把聊天记录放在沙箱中就再创建一个Documents文件夹

按照正常流程打开安装包或者绿化版既可。注意绿化版直接打开源文件既可,不需要也没有权限绿化

必沙程序中添加QQ微信程序所在的目录,如果安装在沙盒内就跳过

停止行为中添加引导程序WeChat.exe或者QQ.exe,这样在QQ微信退出的时候,沙盒内所有程序都会退出

推荐勾选常规选项-文件选项-沙盒删除选项-保护此沙盒受删除或清空,防止不小心删除

大功告成!QQ微信的所有操作都不会影响到真实系统的对应文件,只会修改沙盒文件夹内的数据

高级配置

这样配置完之后打开沙箱的资源管理器一看,发现还是能够访问到C:\Program Files,C:\Program Files (x86),C:\Windows,不过QQ微信对这些都是只读的,更改不会影响到真实系统。如果不想让QQ微信访问到这些文件夹里面的内容,可以增加以下设置

由于QQ微信是需要使用Program Files这些文件夹里面的某些程序的,因此不能直接屏蔽C:\Program Files\*,那如果在加上允许C:\Program Files\xxxx可以么?

按照sandboxie-plus的特异性规则来说按理是可行的,因为允许的规则特异性高,应当优先匹配。不过实际上会导致整个Program Files无法访问,没有效果。因此QQ微信是无论如何都能看到你安装的程序名的,能做的只是屏蔽他们进一步查看里面的内容。

对于想要隐藏的程序,以7-Zip为例,添加C:\Program Files\7-Zip的封锁权限,不过程序太多,更好的办法是直接修改沙盒的配置文本,加上ClosedFilePath=C:\Program Files\7-Zip。搭配ls指令,可以方便的生成配置文件,不过要注意不能将QQ微信需要的文件夹屏蔽了,这就需要自己尝试了。